【OCI_10】ロードバランサーでWEBサーバの通信を負荷分散する

今回は事前に作成したWEBサーバ2台の前段にロードバランサーを配置し、WEBサーバへの通信を負荷分散してみたいと思います。
公式チュートリアルを参照して手順を進めましたが、ロードバランサーの構成後、自動でセキュリティ・リストへルールが作成されませんでした。
※これは私の環境だけかもしれませんが・・・
後から手動で作成してもよいのですが、自動で作成する設定にもかかわらず作成されないので、別の手順(ほぼ手順は同じですが最初の作成時にクリックするボタンが違う)で進めると自動でセキュリティ・リストへルールが作成されましたのでその手順で記事を書いています。
ロードバランサーでWebサーバーを負荷分散する
https://oracle-japan.github.io/ocitutorials/intermediates/using-load-balancer/
目次
事前準備
WEBサーバをパブリック・サブネットに2台構築しておきます。
WEBサーバは、最初の1台を構成し、2台目はカスタム・イメージから起動して作成しました。
興味のある方は、以下の記事を参照してください。
ロードバランサーの構成
ロードバランサーは、Webサーバーと同じサブネットや別のサブネットに配置できるそうです。
今回はチュートリアルに習い、Webサーバーが配置されているサブネットとは別のパブリック・サブネットをリージョナル・サブネットとして作成し、そこにロードバランサーを配置します。
リージョナル・サブネットとは
はじめて聞いたので chatgpt へ聞きました。
OCIの「サブネット」は、リージョン全体にまたがるタイプ か特定の可用性ドメイン(AD)に限定されるタイプ かを選択できます。
特定の可用性ドメイン(AD)に限定されるタイプは、1つのAD(可用性ドメイン)に限定されるため高可用性を自分で設計する必要があります。
リージョン全体にまたがるリージョナル・サブネットは、リージョン全体をカバー(ADに限定されない)して高可用性をOCIが自動で確保してくれます。
つまり、リージョナルサブネットとは、ADをまたがって利用できるサブネット(=リージョン全体がスコープ)であり、OCIが裏で自動的に複数ADに冗長構成を取れるように設計されたものです。
ロード・バランサの Active/Standby 構成について
OCIのロード・バランサは、作成時に必ず 2つのノード(Active/Standby) が作成されるそうです。
東京リージョン(ap-tokyo-1)も大阪リージョン(ap-osaka-1)も、アベイラビリティ・ドメイン(AD)は1つだけですが、Oracle側で内部的にノードを分散しており、ロード・バランサを「リージョナル・サブネット」で作成すれば自動的に冗長構成(Active/Standby)が構築されるそうです。
ロードバランサー用セキュリティ・リストの作成
左上ハンバーガーメニューから ネットワーキング > 仮想クラウド・ネットワーク を選択し、Webサーバーが存在するVCN名のリンクをクリックします。
「セキュリティ」タブを選択、セキュリティ・リストの「セキュリティ・リストの作成」をクリックします。※ロードバランサーを作成した際に、適切なルールが自動的に付与されるので、ここではルールを登録していません
セキュリティ・リストの作成画面で以下入力、選択し、右下の「セキュリティ・リストの作成」をクリックします。
名前:任意名
コンパートメントに作成:自身の権限のあるコンパートメント
イングレスのルール許可:なし(ルールが入っていれば削除します)
エグレスのルール許可:なし(ルールが入っていれば削除します)

ロードバランサー用セキュリティ・リストが作成されました。

ロードバランサー用ルート表の作成
左上ハンバーガーメニューから ネットワーキング > 仮想クラウド・ネットワーク を選択し、Webサーバーが存在するVCN名のリンクをクリックします。
「ルーティング」タブを選択、ルート表の「ルート表の作成」をクリックします。
ルート表の作成画面で以下入力、選択します。
名前:任意名
コンパートメントに作成:自身の権限のあるコンパートメント

ルート・ルール(オプション)で「別のルート・ルール」をクリックします。
以下入力、選択し、右下の「作成」をクリックします。
ターゲット・タイプ:インターネット・ゲートウェイ
宛先CIDRブロック:0.0.0.0/0
ターゲット・インターネット・ゲートウェイコンパートメント:デフォルトで現在のコンパートメントが選択される
ターゲット・インターネット・ゲートウェイ:VCNのインターネット・ゲートウェイ

ロードバランサー用のルート表が作成されました。

ロードバランサー用サブネットの作成
冒頭にも記載しましたがリージョナル・サブネットとして作成していきます。
左上ハンバーガーメニューから ネットワーキング > 仮想クラウド・ネットワーク を選択し、Webサーバーが存在するVCN名のリンクをクリックします。
「サブネット」タブを選択、サブネットの「サブネットの作成」をクリックします。
サブネットの作成画面で以下入力、選択します。
名前:任意名
コンパートメントに作成:自身の権限のあるコンパートメント
サブネット・タイプ:リージョナル(推奨)
IPv4 CIDRブロック:10.0.0.3/24 (自身の環境に合わせてください)

以下入力、選択します。
ルート表コンパートメント:自身の権限のあるコンパートメント
ルート表:事前作成したロードバランサー用ルート表
サブネット・アクセス:パブリック・サブネット
DNS解決:チェックを外す
DHCPオプション:デフォルトの選択のまま

以下入力、選択し、右下の「サブネットの作成」をクリックします。
セキュリティ・リストコンパートメント:自身の権限のあるコンパートメント
セキュリティ・リスト:ロードバランサー用セキュリティ・リスト
リソース・ロギング:OFF(デフォルト)

ロード・バランサの作成
ロードバランサー用セキュリティ・リスト、ロードバランサー用ルート表、ロードバランサー用サブネットの作成が完了したので次はロード・バランサを作成していきます。
作成の際にロードバランサーに必要なシェイプと配置先として先ほど作成したロード・バランサ用サブネット(リージョナル・サブネット)を選択します。
左上ハンバーガーメニューから ネットワーキング > ロード・バランサ を選択します。

「ロード・バランサの作成」をクリックします。

ロード・バランサの作成画面で以下入力、選択します。
ロード・バランサ名:任意名
可視性タイプの選択:パブリック
パブリックIPアドレスの割当て:エフェメラルIPアドレス

以下入力、選択します。
帯域幅シェイプ:最小帯域幅が 10 Mbps、最大帯域幅が 50 Mbps と入力
IPv6アドレス割当ての有効化:OFF(デフォルト)

以下入力、選択し、左下の「次」をクリックします。
仮想クラウド・ネットワークコンパートメント:自身の権限のあるコンパートメント
仮想クラウド・ネットワーク:サブネットを作成したVCN
サブネットコンパートメント:自身の権限のあるコンパートメント
サブネット:事前に作成したリージョナル・サブネット
ネットワーク・セキュリティ・グループを使用してトラフィックを制御:OFF(デフォルト)

管理は、以下のとおり選択し、「次」をクリックします。

バックエンドの選択 画面で以下を入力、選択します。
ロード・バランシング・ポリシーの指定:重み付けラウンド・ロビン

バックエンド・サーバーの選択:「バックエンドの追加」をクリックし、事前作成したWEBサーバ2台を選択します。(今回は、20251006-instance と 20251007-instance の2台を選択しています)

ヘルス・チェック・ポリシーの指定は、すべてデフォルトのままとし、左下の「次」をクリックします。

バックエンド・セットは、デフォルトのままにします。

「セキュリティ・リスト」は、「セキュリティ・リスト・ルールを自動的に追加します」が選択されていることを確認します。
さらにセキュリティ・リスト、サブネット、エグレス・ルール(トラフィック送信の許可)、イングレス・ルール(トラフィック受信の許可)に必要なルールが表示されていることを確認しておきます。このルールが自動的に追加されます。

セッション永続性は、デフォルトのままにします。

リスナーの構成 画面で以下の項目を入力、選択し、左下の「次」をクリックします。
リスナー名:任意名
リスナーで処理するトラフィックのタイプを指定します:HTTP
リスナーでイングレス・トラフィックをモニターするポートを指定します:80

ロギングの管理 画面で以下の項目を入力、選択し、「送信」をクリックします。
エラー・ログ:無効
アクセス・ログ:無効(デフォルト)
リクエストID:有効(デフォルト)

内容を確認し、右下の「送信」をクリックします。

ロードバランサーの作成が開始されます。状態が「アクティブ」になるまで待ちます。
全体的なヘルスが「保留中」は、配下のWEBサーバと通信できるようになれば変わります。

全体的なヘルスが「OK」となり、配下のWEBサーバと通信が取れました。
ロード・バランサの設定が完了しました。

ロード・バランサ作成途中にあった「セキュリティ・リスト・ルールを自動的に追加します」のとおり、ロード・バランサ用セキュリティ・リスト(エグレス)とパブリック・サブネット用セキュリティ・リスト(イングレス)へそれぞれルールが追加されていることを確認します。
■ロード・バランサ用セキュリティ・リスト(エグレス)

■パブリック・サブネット用セキュリティ・リスト(イングレス)

ロードバランサーへのHTTP通信許可の設定
最後にロードバランサーに対してインターネットからのHTTP通信を許可するイングレス・ルールの設定を行います。
ここではとりあえず通信できるか確認したいので「ソースCIDR」は「0.0.0.0/0」を入力しました。
セキュアにするため、自宅のパソコンからのみ接続を許可したい場合は「ソースCIDR」を自宅のパソコンのグローバルIPアドレスを指定してください。

ロードバランサーに対してインターネットからのHTTP通信を許可するイングレス・ルールが設定できました。

動作確認
個人パソコンのブラウザから「http://ロード・バランサのパブリックIPアドレス」へアクセスします。
以下画面が表示された場合は「サイトに進む」をクリックします。

WEBサーバのWEBページが表示されました。以下はWEBサーバ1号機となります。

ブラウザの表示を更新するとWEBサーバ2号機のWEBページも表示され、負荷分散されていることが確認できました。

ロード・バランサ配下にWEBサーバを2台配置して負荷分散できることが確認できました。本題については、ここで完了となります。以下は、ネットワーク・セキュリティ・グループを試してみたかったのでついでに検証した内容となります。本題とは分けて見ていただけたらと思います。
【おまけ】セキュリティ・リストをネットワーク・セキュリティ・グループへ変更する
現在、WEBサーバ2台が起動するパブリック・サブネットには、セキュリティ・リストが適用されています。実際の運用では、セキュリティ・リストよりネットワーク・セキュリティ・グループを利用しているのではないかと勝手に推測しています。
このセキュリティ・リストの内容を空にして、WEBサーバへネットワーク・セキュリティ・グループを適用してロード・バランサ経由で通信可能か確認してみます。
セキュリティ・リストの内容を確認
左上ハンバーガーメニューから ネットワーキング > 仮想クラウド・ネットワーク を選択し、Webサーバーが存在するVCN名のリンクをクリックします。
「セキュリティ」タブを選択、パブリック・サブネットで利用しているセキュリティ・リストをクリックします。
「セキュリティ・ルール」タブを選択します。
「イングレス・ルール」と「エグレス・ルール」を確認しておきます。


ネットワーク・セキュリティ・グループの作成
左上ハンバーガーメニューから ネットワーキング > 仮想クラウド・ネットワーク を選択し、Webサーバーが存在するVCN名のリンクをクリックします。
「セキュリティ」タブを選択、ネットワーク・セキュリティ・グループの「ネットワーク・セキュリティ・グループの作成」をクリックします。

ネットワーク・セキュリティ・グループの作成画面で以下入力、選択します。
名前:任意名
コンパートメントに作成:自身の権限のあるコンパートメント
タグ:何もしない

セキュリティ・ルールの追加でセキュリティ・リストで控えたイングレス・ルール、エグレス・ルールと同じルールを設定して、右下の「作成」をクリックします。
■SSH(イングレス)

■ICMP(イングレス)

■HTTP(イングレス)

■すべてのプロトコル(エグレス)

ネットワーク・セキュリティ・グループが作成されました。

ネットワーク・セキュリティ・グループの適用
作成したネットワーク・セキュリティ・グループをインスタンスへ適用します。
WEBサーバ2台の両方で同じネットワーク・セキュリティ・グループを適用します。
左上ハンバーガーメニューから コンピュート > インスタンス を選択し、該当のインスタンスをクリックします。
「ネットワーキング」タブを選択、ネットワーク・セキュリティ・グループの「編集」をクリックします。

ネットワーク・セキュリティ・グループの編集画面で作成したネットワーク・セキュリティ・グループを選択し、右下の「変更の保存」をクリックします。

WEBサーバ2台へネットワーク・セキュリティ・グループが適用されました。
■20251006-instance

■20251007-instance

パブリック・サブネットのセキュリティ・リストの中身を空にする
パブリック・サブネットで利用しているセキュリティ・リストのイングレス・ルール、エグレス・ルールをすべて削除します。
これでパブリック・サブネットで利用しているセキュリティ・リストは、利用されてない状態になりました。

ロード・バランサのヘルスの確認
左上ハンバーガーメニューから ネットワーキング > ロード・バランサ を選択します。
利用しているロード・バランサをクリックします。
「詳細」タブを選択、「ロード・バランサのヘルス」で全体的なヘルスが「OK」になっていることを確認します。

動作確認
WEBサーバが利用していたセキュリティ・リストの内容を空にして、代わりにネットワーク・セキュリティ・グループへ変更しても、ロード・バランサのIPアドレスへアクセスしてWEBページは負荷分散されました。

まとめ
ロード・バランサ配下にWEBサーバを2台配置して負荷分散できることと、本題ではないですが、セキュリティ・リストの内容を空にして、WEBサーバへネットワーク・セキュリティ・グループを適用してロード・バランサ経由で負荷分散できることが検証できました。
次の目標は、オートスケーリングを構成して、ロード・バランサ、オートスケーリングによる負荷分散を確認できればと考えています。
以下、他の記事をまとめた一覧です。OCI以外にAWSもまとめています。