本記事は、以下のOCIチュートリアルを参考に執筆しました。
しかし、上記チュートリアルの内容が古くなっているため、新たに本記事を執筆しました。
本記事のゴール
以下構成図を参考に、Webブラウザからロード・バランサのIPアドレスを入力を行い、
事前に設定した2台のコンピュート(VM1・2)のWebページが交互に表示されることを確認します。
本手順
本検証は以下の手順で実施を行います。
1. コンピュート・インスタンス2台(VM1・2)を作成
2. 作成後、httpdを使用してVM1・2をWebサーバ化
3. ロード・バランサ用のパブリックIPアドレスを予約
4. ロード・バランサを作成、バックエンド・セットにVM1・2を登録
5. Webブラウザからロード・バランサのパブリックIPアドレスを入力、
VM1・2で設定したWebページが交互に表示されるか確認
事前準備
事前に以下リソースは作成済の状態となっております。
- VCN:VCN_10.0.0.0/16
- パブリック・サブネット:Pubsub_10.0.0.0/24
- プライベート・サブネット:Prisub_10.0.1.0/24
- インターネット・ゲートウェイ:IGW(パブリック・サブネットにアタッチ)
- NATゲートウェイ:NGW(プライベート・サブネットにアタッチ)
- ルート表
- パブリック・サブネット用:宛先CIDR:0.0.0.0/0,ターゲット:IGW
- プライベート・サブネット用:宛先CIDR:0.0.0.0/0,ターゲット:NGW
- ファイアウォール(今回はNSGで制御。セキュリティ・リストは空で設定)
- ロード・バランサ用
- イングレス・ルール:ソースCIDR:0.0.0.0/0, プロトコル:TCP/80(HTTP)
- エグレス・ルール:宛先CIDR:0.0.0.0/0, プロトコル:全てのプロトコル
- VM1・2用
- イングレス・ルール:ソースCIDR:10.0.0.0/24(パブリック・サブネット), プロトコル:TCP/80(HTTP)
- エグレス・ルール:宛先CIDR:0.0.0.0/0, プロトコル:全てのプロトコル
- ロード・バランサ用
また、パブリック・サブネットに踏み台サーバ(Bastion)を作成、踏み台サーバ経由でワンライナーで接続します。
1. コンピュート・インスタンス2台(VM1・2)を作成
ここでは以下スペックを参考に、コンピュート・インスタンスを作成します。
※尚、時間の関係上VM1のみの作成とします。
- OS:Oracle Linux 9
- シェイプ:VM.Standard.E5.Flex
- OCPU:1OCPU
- メモリ:8GB
- ストレージ:50GB
最初にOCIコンソールの左上のナビゲーション・メニューから「コンピュート」→「インスタンス」をそれぞれ選択します。
以下項目をそれぞれ入力します。
イメージの選択画面が表示されるので、「Oracle Linux 9」にチェックを入れ、「イメージの選択」を選択します。
イメージの選択後、「Change Shape」を選択してシェイプを変更します。
シェイプをそれぞれ適切な値に変更、「シェイプの選択」を選択します。
以下項目をそれぞれ入力、「拡張オプションの表示」を選択します。
「ネットワーク・セキュリティ・グループを使用してトラフィックを制御」にチェックを入れ、「NSG-VM」を選択します。
「SSHキーの追加」でSSHキーを作成する場合は「キー・ペアの自動で生成」を、既存SSHキーを使用する場合は「公開キー・ファイル(.pub)のアップロード」をそれぞれ選択します。
「カスタム・ブート・ボリューム・サイズを指定します」にチェックを入れ、ストレージのサイズを調整します。
2. 作成後、httpdを使用してVM1・2をWebサーバ化
コンピュート・インスタンスの作成後、httpdをインストールしてWebサーバ化を行います。
最初に以下コマンドで踏み台サーバを経由してワンライナーでVM1にSSH接続を行います。
ssh -i <コンピュートのsshキーのパス> -o ProxyCommand='ssh -i <踏み台サーバのsshキーのパス> -W %h:%p opc@<踏み台サーバのパブリックIPアドレス>' opc@<コンピュートのプライベートIPアドレス>
VM1にログイン後、以下コマンドでOS側のファイアウォール(firewalld
)の無効化を行います。
sudo systemctl stop firewalld
必要に応じて、firewalld
の自動起動の無効化も以下コマンドで実行します。
sudo systemctl disable firewalld
今回はhttpd
をインストールしてWebサーバ化を行います。
sudo dnf install -y httpd
実行ログの最後に以下の文が表示された場合、httpd
のインストールは完了となります。
完了しました!
httpd
の起動と、必要であれば自動起動の有効化も行います。
sudo systemctl start httpd
sudo systemctl enable httpd
以下コマンドでhttpd
が起動しているか確認を行います。
sudo systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: disabled)
Active: active (running) since Wed 2025-03-19 12:41:41 JST; 45s ago
Docs: man:httpd.service(8)
Main PID: 101087 (httpd)
Status: "Total requests: 0; Idle/Busy workers 100/0;Requests/sec: 0; Bytes served/sec: 0 B/sec"
Tasks: 177 (limit: 47290)
Memory: 21.8M
CPU: 60ms
CGroup: /system.slice/httpd.service
├─101087 /usr/sbin/httpd -DFOREGROUND
├─101088 /usr/sbin/httpd -DFOREGROUND
├─101089 /usr/sbin/httpd -DFOREGROUND
├─101090 /usr/sbin/httpd -DFOREGROUND
└─101091 /usr/sbin/httpd -DFOREGROUND
3月 19 12:41:41 vm1 systemd[1]: Starting The Apache HTTP Server...
3月 19 12:41:41 vm1 systemd[1]: Started The Apache HTTP Server.
3月 19 12:41:41 vm1 httpd[101087]: Server configured, listening on: port 80
httpd
の場合、作成後に/var/www/html
のディレクトリが自動作成されて、/html配下にWebコンテンツをアップロードしてWebサーバを作成する、といった流れとなります。
ここではドキュメントルートを表すindex.html
に以下ファイルを格納して、擬似的なWebページを作成します。
最初に/var/www/html
に移動します。
cd /var/www/html
移動後に以下コマンドでindex.html
を作成、その下にある簡易的なWebサイト用ソースコードをペーストします。
sudo vim index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Test Server</title>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
font-family: Arial, sans-serif;
background-color: #f4f4f4;
}
.container {
text-align: center;
background: white;
padding: 20px;
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
h1 {
color: #333;
}
</style>
</head>
<body>
<div class="container">
<h1>This is a test server 1.</h1>
</div>
</body>
</html>
保存後、Webサーバの作成は完了となります。
ロード・バランサ用のパブリックIPアドレスを予約
Webサーバを作成後、OCIコンソール画面に戻りロード・バランサ用のパブリックIPアドレスの予約を行います。
OCIコンソールの左上のナビゲーション・メニューから「ネットワーキング」→「予約済パブリックIP」をそれぞれ選択します。
任意のIPアドレス名(ここでは「IP-FLB」)を入力、「パブリックIPアドレスの予約」を選択します。
4. ロード・バランサを作成、バックエンド・セットにVM1・2を登録
パブリックIPアドレスを予約後、ロード・バランサの作成を行います。
OCIコンソールの左上のナビゲーション・メニューから「ネットワーキング」→「ロード・バランサ」をそれぞれ選択します。
ロード・バランサの作成詳細画面が表示されるので、以下の項目を入力して「次」を選択します。
- ロード・バランサ名:FLB
- 可視性タイプ:パブリック
- パブリックIPアドレスの割当て:予約済IPアドレス
- 予約済IPアドレス:IP-FLB
- 帯域幅:任意(ここでは最小・最大いずれも10Mbps)
- 仮想クラウド・ネットワーク:VCN_10.0.0.0/16
- サブネット:Pubsub_10.0.0.0/24
- ネットワーク・セキュリティ・グループを使用してトラフィックを制御:有効
- ネットワーク・セキュリティ・グループ:NSG-FLB
※他はデフォルトの設定値で問題ございません。
続いてバックエンドの選択画面が表示されるので、以下の項目を入力、「バックエンド・サーバーの選択」を選択します。
VM1とVM2をそれぞれ選択、「インスタンスの追加」を選択します。
ヘルス・チェック・ポリシーの指定画面が表示されますが、ここではデフォルトの設定で問題ございません。
その他設定画面が表示されるので、以下の項目を入力、「次」を選択します。
- バックエンド・セット名:任意(ここでは「BS-FLB」)
- セキュリティ・リスト:バックエンド・サーバーの追加後にセキュリティ・リスト・ルールを手動で構成します
※他はデフォルトの設定値で問題ございません。
リスナーの作成画面が表示されるので、以下の項目を入力、「次」を選択します。
ロギングの管理画面が表示されますが、取得不要のため全て無効化を行い「次」を選択します。
最後に全ての設定の確認画面が表示されるので、問題がない場合は「送信」を選択します。
ステータスが「作成中」→「アクティブ」になったのち、ロード・バランサの作成は完了となります。
左下のリソースから「バックエンド・セット」→「BS-FLB」をそれぞれ選択してバックエンド・セットの状態を確認します。
バックエンド・セットとして設定した2台(VM1・VM2)はいずれもヘルスが「OK」の状態となり、正常にヘルス・チェックが実行されています。
尚、バックエンド・セットで1台でも「クリティカル」になった場合、全体のヘルスも「クリティカル」の状態になります。
5.動作確認
全ての設定が完了したので、動作確認を行います。
ブラウザにロード・バランサのパブリックIPアドレスを入力、設定したWebサイトが表示されれば検証は完了となります。
尚、「保護されていない通信」と警告文が表示されていますが、HTTPでの通信を行っていることが原因です。
別途HTTPS通信も有効化することで上記警告文は表示されずに、Webサイトを表示できます。
また、更新を実施することでVM2に設定したWebサイトが表示され、ロード・バランシング・ポリシー(重み付けラウンド・ロビン)の設定が反映されていることがわかります。
本検証については以上となります。
ロード・バランサのプライベートIPアドレスを確認する方法
補足で、ロード・バランサのプライベートIPアドレスを確認する方法についても紹介します。
ロード・バランサのプライベートIPアドレスは設定不可で、自動で割り当てられます。
バックエンドの詳細画面から、バックエンドに指定されているリソースの赤枠アイコンを選択、表示されているIPアドレスがロード・バランサのものとなっております。
尚、IPアドレスが2つ表示されているのは、ロード・バランサが内部で冗長化されており、2つのロード・バランサからヘルス・チェックを実施しているためです。
以上