このガイドでは、ゾーン ネットワーク エンドポイント グループ(NEG)バックエンドを使用した内部パススルー ネットワーク ロードバランサをデプロイする方法を説明します。ゾーン NEG は、1 つのサブネット内の Google Cloud リソースの IP アドレスまたは IP アドレス / ポートの組み合わせのコレクションに相当するゾーンのリソースです。NEG を使用すると、VM 全体ではなく、ソフトウェア サービスを表す IP アドレスまたは IP アドレス / ポートの組み合わせの論理グループを作成できます。
このガイドに進む前に、次の内容を理解しておいてください。
内部パススルー ネットワーク ロードバランサは、GCE_VM_IP
エンドポイントを含むゾーン NEG のみをサポートします。
権限
このガイドを使用する前に、インスタンスを作成し、プロジェクト内のネットワークを変更しておく必要があります。そのためにはプロジェクトのオーナーまたは編集者であるか、次の Compute Engine IAM のロールがすべて必要です。
タスク | 必要なロール |
---|---|
ネットワーク、サブネット、ロードバランサ コンポーネントの作成 | ネットワーク管理者 |
ファイアウォール ルールの追加と削除 | セキュリティ管理者 |
インスタンスの作成 | Compute インスタンス管理者 |
詳細については、次のガイドをご覧ください。
設定の概要
このガイドでは、GCE_VM_IP
ゾーン NEG バックエンドを使用して内部パススルー ネットワーク ロードバランサを構成してテストする方法について説明します。このセクションでは、以下の構成方法について説明します。
- カスタム サブネットを持つ
lb-network
という名前のサンプル VPC ネットワーク - バックエンド VM への受信接続を許可するファイアウォール ルール
- 4 つの VM。
- ゾーン
us-west1-a
内に VMvm-a1
とvm-a2
- ゾーン
us-west1-c
内に VMvm-c1
とvm-c2
- ゾーン
- 2 つのバックエンド ゾーン NEG(ゾーン
us-west1-a
内にneg-a
、ゾーンus-west1-c
内にneg-c
)。各 NEG には次のエンドポイントがあります。neg-a
には、次の 2 つのエンドポイントが含まれています。- VM
vm-a1
の内部 IP アドレス - VM
vm-a2
の内部 IP アドレス
- VM
neg-c
には、次の 2 つのエンドポイントが含まれています。- VM
vm-c1
の内部 IP アドレス - VM
vm-c2
の内部 IP アドレス
- VM
us-west1-a
内で接続テストに使用する 1 台のクライアント VM(vm-client
)- 次の内部パススルー ネットワーク ロードバランサのコンポーネント:
us-west1
リージョンの内部バックエンド サービス。2 つのゾーン NEG への接続分散を管理します。- ロードバランサのフロントエンドの内部転送ルールと内部 IP アドレス
この例のアーキテクチャは次のようになります。
ネットワーク、リージョン、サブネットを構成する
このページで説明されているサンプルの内部パススルー ネットワーク ロードバランサは、lb-network
という名前のカスタムモード VPC ネットワークで作成されています。
この例のバックエンド VM とゾーン NEG、ロードバランサのコンポーネントは、次のリージョンとサブネットに存在します。
- リージョン:
us-west1
- サブネット:
lb-subnet
(プライマリ IP アドレス範囲は10.1.2.0/24
)
サンプルのネットワークとサブネットを作成する手順は次のとおりです。
コンソール
- Google Cloud コンソールで [VPC ネットワーク] ページに移動します。
[VPC ネットワーク] ページに移動 - [VPC ネットワークを作成] をクリックします。
- [名前] に「
lb-network
」を入力します。 - [サブネット] セクションで次の設定を行います。
- [サブネット作成モード] を [カスタム] に設定します。
- [新しいサブネット] セクションに、次の情報を入力します。
- 名前:
lb-subnet
- リージョン:
us-west1
- IP アドレス範囲:
10.1.2.0/24
- [完了] をクリックします。
- 名前:
- [作成] をクリックします。
gcloud
カスタム VPC ネットワークを作成します。
gcloud compute networks create lb-network --subnet-mode=custom
lb-network
ネットワーク内に、us-west1
リージョンのバックエンド VM のサブネットを作成します。
gcloud compute networks subnets create lb-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1
ファイアウォール ルールを構成する
この例では、次のファイアウォール ルールを使用します。
fw-allow-lb-access
: VPC ネットワーク内のすべてのターゲットに適用される上り(内向き)ルールで、10.1.2.0/24
の範囲の送信元からのトラフィックを許可します。このルールは、lb-subnet
にあるクライアントからの受信トラフィックを許可します。fw-allow-ssh
: 負荷分散されたインスタンスに適用される上り(内向き)ルール。任意のアドレスから TCP ポート 22 への SSH 接続が許可されます。このルールには、送信元 IP 範囲をより限定的に指定できます。たとえば、SSH セッションを開始するシステムの IP 範囲のみを許可するように指定できます。この例では、ターゲットタグallow-ssh
を使用して、適用する VM を識別させています。
これらのファイアウォール ルールがない場合は、デフォルトの上り(内向き)拒否ルールによってバックエンド インスタンスへの受信トラフィックがブロックされます。
コンソール
- Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。
[ファイアウォール ポリシー] に移動 - [ファイアウォール ルールを作成] をクリックして次の情報を入力し、サブネット トラフィックを許可するルールを作成します。
- 名前:
fw-allow-lb-access
- ネットワーク:
lb-network
- 優先度:
1000
- トラフィックの方向: 上り(内向き)
- 一致したときのアクション: 許可
- ターゲット: ネットワーク内のすべてのインスタンス
- ソースフィルタ: IPv4 の範囲
- 送信元 IPv4 範囲:
10.1.2.0/24
- プロトコルとポート: すべて許可
- 名前:
- [作成] をクリックします。
- [ファイアウォール ルールを作成] を再度クリックして、SSH 接続の受信を許可するルールを作成します。
- 名前:
fw-allow-ssh
- ネットワーク:
lb-network
- 優先度:
1000
- トラフィックの方向: 上り(内向き)
- 一致したときのアクション: 許可
- ターゲット: 指定されたターゲットタグ
- ターゲットタグ:
allow-ssh
- ソースフィルタ: IPv4 の範囲
- 送信元 IPv4 範囲:
0.0.0.0/0
- プロトコルとポート: 指定されたプロトコルとポートを選択してから、
tcp:22
のように入力します。
- 名前:
- [作成] をクリックします。
- [ファイアウォール ルールを作成] をもう一度クリックして、Google Cloud ヘルスチェックを許可するルールを作成します。
- 名前:
fw-allow-health-check
- ネットワーク:
lb-network
- 優先度:
1000
- トラフィックの方向: 上り(内向き)
- 一致したときのアクション: 許可
- ターゲット: 指定されたターゲットタグ
- ターゲットタグ:
allow-health-check
- ソースフィルタ: IPv4 の範囲
- 送信元 IPv4 範囲:
130.211.0.0/22
と35.191.0.0/16
- プロトコルとポート: すべて許可
- 名前:
- [作成] をクリックします。
gcloud
fw-allow-lb-access
ファイアウォール ルールを作成して、サブネットとの通信を許可します。gcloud compute firewall-rules create fw-allow-lb-access \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=10.1.2.0/24 \ --rules=tcp,udp,icmp
ネットワーク タグ
allow-ssh
を使用して、VM との SSH 接続を許可するfw-allow-ssh
ファイアウォール ルールを作成します。source-ranges
を省略すると、Google Cloud は任意の送信元を対象とするものとしてルールを解釈します。gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
Google Cloud ヘルスチェックを許可する
fw-allow-health-check
ルールを作成します。gcloud compute firewall-rules create fw-allow-health-check \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp,udp,icmp
NEG バックエンドを作成する
内部パススルー ネットワーク ロードバランサのリージョン特性を示すために、この例では、2 つのゾーン NEG バックエンド(neg-a
と neg-c
)をゾーン us-west1-a
と us-
west1-c
で使用します。トラフィックは、両方の NEG 間および各 NEG 内のエンドポイント間でロードバランスされます。
VM を作成する
この例をサポートするために、4 つの VM はそれぞれ、TCP ポート 80、8008、8080、8088、443、8443 をリッスンする Apache ウェブサーバーを実行します。
lb-subnet
の内部 IP アドレスと外部(公開)エフェメラル IP アドレスがそれぞれの VM に割り当てられます。外部 IP アドレスは後で削除できます。
バックエンド VM には外部 IP アドレスは必要ありません。ただし、外部 IP アドレスにより VM がインターネットから Apache をダウンロードでき、SSH 経由の接続が可能なため、この例では外部 IP アドレスがあると便利です。デフォルトでは、Apache は任意の IP アドレスにバインドされます。内部パススルー ネットワーク ロードバランサは、宛先 IP を保持してパケットを配信します。
バックエンド VM で動作中のサーバー ソフトウェアが、ロードバランサの内部転送ルールの IP アドレスをリッスンしていることを確認してください。
説明を簡単にするため、これらのバックエンド VM では Debian GNU Linux 10 を実行します。
コンソール
VM を作成する
- Google Cloud コンソールの [VM インスタンス] ページに移動します。
[VM インスタンス] ページに移動 - 次の手順を繰り返し、4 つの VM を作成します。次の名前とゾーンの組み合わせを使用します。
- 名前:
vm-a1
、ゾーン:us-west1-a
- 名前:
vm-a2
、ゾーン:us-west1-a
- 名前:
vm-c1
、ゾーン:us-west1-c
- 名前:
vm-c2
、ゾーン:us-west1-c
- 名前:
- [インスタンスを作成] をクリックします。
- ステップ 2 に示したように [名前] を設定します。
- [リージョン] には、
us-west1
を選択し、手順 2 に示したゾーンを選択します。 - [ブートディスク] セクションで、ブートディスク オプションとして Debian GNU/Linux 12 (bookworm) が選択されていることを確認します。必要に応じて [選択] をクリックし、イメージを変更します。
[詳細オプション] をクリックして、次の変更を行います。
- [ネットワーク] をクリックして、ネットワーク タグ
allow-ssh
とallow-health-check
を追加します。 - [ネットワーク インターフェース] にある編集ボタン
- ネットワーク:
lb-network
- サブネット:
lb-subnet
- プライマリ内部 IP: エフェメラル(自動)
- 外部 IP: エフェメラル
をクリックして、次の変更を行い、[完了] をクリックします。 - ネットワーク:
[管理] をクリックします。[起動スクリプト] フィールドに、次のスクリプトの内容をコピーして貼り付けます。スクリプトの内容は 4 つの VM ですべて同じです。
#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed
- [ネットワーク] をクリックして、ネットワーク タグ
[作成] をクリックします。
gcloud
次の [VM-NAME]
と [ZONE]
の 4 つの組み合わせを使用して、下のコマンドを 4 回実行して 4 つの VM を作成します。スクリプトの内容は 4 つの VM ですべて同じです。
vm-a1
の[VM-NAME]
とus-west1-a
の[ZONE]
vm-a2
の[VM-NAME]
とus-west1-a
の[ZONE]
vm-c1
の[VM-NAME]
とus-west1-c
の[ZONE]
vm-c2
の[VM-NAME]
とus-west1-c
の[ZONE]
gcloud compute instances create VM-NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check \ --subnet=lb-subnet \ --metadata=startup-script='#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed'
GCE_VM_IP
ゾーン NEG を作成する
NEG(neg-a
と neg-c
)は、前の手順で作成した VM と同じゾーンに作成する必要があります。
コンソール
ゾーン ネットワーク エンドポイント グループを作成するには:
- Google Cloud コンソールの [ネットワーク エンドポイント グループ] ページに移動します。
[ネットワーク エンドポイント グループ] ページに移動 - [ネットワーク エンドポイント グループを作成] をクリックします。
- ゾーン NEG の名前を入力します(例:
neg-a
)。 - [ネットワーク エンドポイント グループの種類] で [ネットワーク エンドポイント グループ(ゾーン)] を選択します。
- [ネットワーク] で lb-network を選択します。
- [サブネット] で lb-subnet を選択します。
- [ゾーン] で us-west1-a を選択します。
- [作成] をクリックします。
- この手順を繰り返して、
neg-c
という 2 番目のゾーン NEG を us-west1-c ゾーンに作成します。
エンドポイントをゾーン NEG に追加します。
- Google Cloud コンソールの [ネットワーク エンドポイント グループ] ページに移動します。
[ネットワーク エンドポイント グループ] に移動 - 前の手順で作成した最初のネットワーク エンドポイント グループの名前(neg-a)をクリックします。[ネットワーク エンドポイント グループの詳細] ページが表示されます。
[このグループのネットワーク エンドポイント] セクションで [ネットワーク エンドポイントを追加] をクリックします。[ネットワーク エンドポイントの追加] ページが表示されます。
- [VM インスタンス] をクリックして [vm-a1] を選択し、その内部 IP アドレスをネットワーク エンドポイントとして追加します。
- [作成] をクリックします。
- もう一度 [ネットワーク エンドポイントを追加] をクリックし、[VM インスタンス] で [vm-a2] を選択します。
- [作成] をクリックします。
前の手順で作成した 2 番目のネットワーク エンドポイント グループの名前(neg-c)をクリックします。[ネットワーク エンドポイント グループの詳細] ページが表示されます。
[このグループのネットワーク エンドポイント] セクションで [ネットワーク エンドポイントを追加] をクリックします。[ネットワーク エンドポイントの追加] ページが表示されます。
- [VM インスタンス] をクリックして [vm-c1] を選択し、その内部 IP アドレスをネットワーク エンドポイントとして追加します。
- [作成] をクリックします。
- もう一度 [ネットワーク エンドポイントを追加] をクリックし、[VM インスタンス] で [vm-c2] を選択します。
- [作成] をクリックします。
gcloud
gcloud compute network-endpoint-groups create
コマンドを使用して、us-west1-a
にneg-a
というGCE_VM_IP
ゾーン NEG を作成します。gcloud compute network-endpoint-groups create neg-a \ --network-endpoint-type=gce-vm-ip \ --zone=us-west1-a \ --network=lb-network \ --subnet=lb-subnet
エンドポイントを
neg-a
に追加します。gcloud compute network-endpoint-groups update neg-a \ --zone=us-west1-a \ --add-endpoint='instance=vm-a1' \ --add-endpoint='instance=vm-a2'
gcloud compute network-endpoint-groups create
コマンドを使用して、us-west1-c
にneg-c
というGCE_VM_IP
ゾーン NEG を作成します。gcloud compute network-endpoint-groups create neg-c \ --network-endpoint-type=gce-vm-ip \ --zone=us-west1-c \ --network=lb-network \ --subnet=lb-subnet
エンドポイントを
neg-c
に追加します。gcloud compute network-endpoint-groups update neg-c \ --zone=us-west1-c \ --add-endpoint='instance=vm-c1' \ --add-endpoint='instance=vm-c2'
ロードバランサ コンポーネントを構成する
次の手順では、すべての内部パススルー ネットワーク ロードバランサのコンポーネントを構成します。
バックエンド サービス: この例では、ロードバランサを HTTP トラフィックに渡す必要があります。したがって、UDP ではなく TCP を使用する必要があります。
転送ルール: この例では、内部転送ルールを 1 つ作成します。
内部 IP アドレス: この例では、転送ルールを作成する際に、内部 IP アドレス
10.1.2.99
を指定しています。
コンソール
gcloud
新しいリージョン HTTP ヘルスチェックを作成します。
gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
バックエンド サービスを作成します。
gcloud compute backend-services create bs-ilb \ --load-balancing-scheme=internal \ --protocol=tcp \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1
2 つのゾーン NEG(
neg-a
とneg-c
)をバックエンド サービスに追加します。gcloud compute backend-services add-backend bs-ilb \ --region=us-west1 \ --network-endpoint-group=neg-a \ --network-endpoint-group-zone=us-west1-a
gcloud compute backend-services add-backend bs-ilb \ --region=us-west1 \ --network-endpoint-group=neg-c \ --network-endpoint-group-zone=us-west1-c
バックエンド サービスの転送ルールを作成します。転送ルールを作成するときは、サブネット内の内部 IP アドレスに
10.1.2.99
を指定します。gcloud compute forwarding-rules create fr-ilb \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=bs-ilb \ --backend-service-region=us-west1
ロードバランサをテストする
このテストでは、ロードバランサのバックエンド VM からではなく、個別のクライアント VM からロードバランサに接続します。セッション アフィニティが構成されていないため、トラフィックは 4 つのバックエンド VM に分散されます。
テスト クライアント VM を作成する
この例では、クライアント VM(vm-client
)を、バックエンド(サーバー)VM と同じリージョンに作成します。クライアントを使用するのは、ロードバランサの構成を検証し、テストセクションで説明されている想定される動作を示すためです。
コンソール
- Google Cloud コンソールの [VM インスタンス] ページに移動します。
[VM インスタンス] ページに移動 - [インスタンスを作成] をクリックします。
- [名前] を
vm-client
に設定します。 - [ゾーン] を
us-west1-a
に設定します。 - [詳細オプション] をクリックして、次の変更を行います。
- [ネットワーキング] をクリックして
allow-ssh
をネットワーク タグに追加します。 - [ネットワーク インターフェース] にある編集ボタンをクリックして、次の変更を行い、[完了] をクリックします。
- ネットワーク:
lb-network
- サブネット:
lb-subnet
- プライマリ内部 IP: エフェメラル(自動)
- 外部 IP: エフェメラル
- ネットワーク:
- [ネットワーキング] をクリックして
- [作成] をクリックします。
gcloud
クライアント VM はロードバランサと同じリージョン内の任意のゾーンにあり、そのリージョン内の任意のサブネットを使用できます。この例では、クライアントは us-west1-a
ゾーンにあり、バックエンド VM と同じサブネットを使用しています。
gcloud compute instances create vm-client \ --zone=us-west1-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh \ --subnet=lb-subnet
ロードバランサにトラフィックを送信する
次の手順でロードバランサに接続します。
クライアント VM インスタンスに接続します。
gcloud compute ssh vm-client --zone=us-west1-a
curl
を使用して IP アドレスに接続するロードバランサへのウェブ リクエストを作成します。レスポンスが異なるバックエンド VM から返ってくることを確認するために、このリクエストを繰り返します。レスポンスを生成する VM の名前が、各バックエンド VM 上で、/var/www/html/index.html
のコンテンツによる HTML レスポンスのテキストとして表示されます。Page served from: vm-a1
とPage served from: vm-a2
のようなレスポンスが返されます。curl http://10.1.2.99
転送ルールは、ポート
80
、8008
、8080
、8088
を処理するように構成されています。その他のポートにトラフィックを送信するには、次のように、IP アドレスの後にコロン(:
)とポート番号を追加します。curl http://10.1.2.99:8008
次のステップ
- グローバル アクセスの有効化、すべてのポートでのトラフィックの受信、2 つの転送ルールを使用した複数のポートでのトラフィックの受け入れなど、追加の構成オプションを設定するには、内部パススルー ネットワーク ロードバランサの追加の構成オプションをご覧ください。
- 基礎知識については、内部パススルー ネットワーク ロードバランサの概要をご覧ください。
- フェイルオーバーに関する重要な情報については、内部パススルー ネットワーク ロードバランサのフェイルオーバーのコンセプトをご覧ください。
- 内部パススルー ネットワーク ロードバランサの Logging と Monitoring の構成については、内部パススルー ネットワーク ロードバランサのロギングとモニタリングをご覧ください。
- VPC ネットワークに接続されたピア ネットワークから内部パススルー ネットワーク ロードバランサにアクセスする方法については、内部パススルー ネットワーク ロードバランサと接続ネットワークをご覧ください。
- 内部パススルー ネットワーク ロードバランサの問題をトラブルシューティングする方法については、内部パススルー ネットワーク ロードバランサのトラブルシューティングをご覧ください。