このドキュメントでは、複数のリージョンにデプロイされたゾーン NEG バックエンド間でトラフィックのバランスを取るグローバル外部パススルー ネットワーク ロードバランサを作成する方法について説明します。
始める前に
設定が次の前提条件を満たしていることを確認します。
Google Cloud CLI をインストールする
このガイドの手順では、Google Cloud CLI を使用してグローバル外部パススルー ネットワーク ロードバランサを構成します。インストールするには、gcloud CLI をインストールするをご覧ください。
必要なロール
プロジェクト作成者にはオーナーロール(roles/owner)が付与されます。デフォルトでは、オーナーロール(roles/owner)または編集者ロール(roles/editor)には、このドキュメントの手順に沿って操作するために必要な権限が含まれています。
プロジェクト作成者でない場合は、プロジェクトで必要な権限を適切なプリンシパルに付与する必要があります。プリンシパルは、Google アカウント(エンドユーザーの場合)やサービス アカウントになることもあります。
VM インスタンス グループ バックエンドを使用してグローバル外部パススルー ネットワーク ロードバランサを構成するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
VPC ネットワーク、サブネット、ロード バランシング コンポーネントを作成する: Compute ネットワーク管理者ロール (
roles/compute.networkAdmin) -
ファイアウォール ルールを作成する: Compute セキュリティ管理者ロール (
roles/compute.securityAdmin) -
VM インスタンスを作成する: Compute インスタンス管理者ロール (
roles/compute.instanceAdmin)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
Cloud Load Balancing のロールと権限の詳細については、ロールと権限をご覧ください。転送ルールの条件付き付与で IAM ポリシーを定義する方法については、転送ルールの IAM 条件をご覧ください。
設定の概要
次の図は、us-west1 リージョンと europe-west2 リージョンにデプロイされたゾーン NEG バックエンドを使用するグローバル外部パススルー ネットワーク ロードバランサを示しています。グローバル外部パススルー ネットワーク ロードバランサの仕組みについては、概要ガイドのアーキテクチャ セクションをご覧ください。
この例では、次のコンポーネントが構成されています。
4 つのバックエンド VM:
us-west1-aゾーンのvm-us-1とvm-us-2europe-west2-aゾーンのvm-eu-1とvm-eu-2
GCE_VM_IPエンドポイントを使用する 2 つのゾーン NEG:vm-us-1とvm-us-2のnic0をus-west1-aゾーンの NEG に接続するvm-eu-1とvm-eu-2のnic0をeurope-west2-aゾーンの NEG に接続する
4 つのネットワーク エンドポイント間で
TCP:80トラフィックを分散する単一のグローバル外部パススルー ネットワーク ロードバランサ。
ネットワークとサブネットを設定する
この例では、2 つの異なるリージョンにサブネットを持つ lb-network という名前のカスタムモード VPC ネットワークを使用します。
グローバル外部パススルー ネットワーク ロードバランサを構成して、スタックタイプが IPv4 のみまたはデュアルスタックのいずれかである VM のネットワーク インターフェースを参照できる GCE_VM_IP ネットワーク エンドポイントを設定できます。
次の表に、ロードバランサのトラフィック タイプ、バックエンド VM ネットワーク インターフェース、VPC サブネット スタック タイプの互換性を示します。グローバル外部パススルー ネットワーク ロードバランサのアーキテクチャ ガイドに記載されている、バックエンド VM のネットワーク インターフェースと VPC サブネットの互換性要件を理解しておきます。
| ロードバランサのトラフィック タイプ | バックエンド VM ネットワーク インターフェースのスタックタイプ | VPC サブネットのスタックタイプ |
|---|---|---|
| IPv4 トラフィックのみ | IPV4_ONLY |
IPV4_ONLY または IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| IPv6 トラフィックのみ | IPV6_ONLY |
IPV6_ONLY または IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| IPv4 トラフィックと IPv6 トラフィック | IPV4_IPV6 |
IPV4_IPV6 |
gcloud
VPC ネットワークを作成します。この例では、VPC ネットワークの名前は
lb-networkです。gcloud compute networks create lb-network --subnet-mode=custom
VPC ネットワーク(
lb-network)内に、2 つのリージョンにサブネットを作成します。us-west1リージョンのネットワーク エンドポイント用にlb-subnet-usという名前のサブネットを作成します。IPv4 専用のサブネットを作成するには、次のコマンドを使用します。
gcloud compute networks subnets create lb-subnet-us \ --stack-type=IPV4_ONLY \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1デュアル スタック サブネットを作成するには、次のコマンドを使用します。
gcloud compute networks subnets create lb-subnet-us \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=EXTERNAL \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1europe-west2リージョンのネットワーク エンドポイント用にlb-subnet-euという名前のサブネットを作成します。IPv4 トラフィックのみの場合は、次のコマンドを使用して IPv4 専用サブネットを作成します。
gcloud compute networks subnets create lb-subnet-eu \ --stack-type=IPV4_ONLY \ --network=lb-network \ --range=10.1.3.0/24 \ --region=europe-west2IPv4 トラフィックと IPv6 トラフィックの場合は、次のコマンドを使用してデュアルスタック サブネットを作成します。
gcloud compute networks subnets create lb-subnet-eu \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=EXTERNAL \ --network=lb-network \ --range=10.1.3.0/24 \ --region=europe-west2
ファイアウォール ルールの作成
本番環境を安全に構成するには、次の 2 つのファイアウォール ルールを個別に作成する必要があります。
ヘルスチェック ファイアウォール ルール。次の範囲からの上り(内向き)トラフィックを許可するように構成されています。
- Google のヘルスチェック IP 範囲。
- ヘルスチェックで構成されている IP プロトコルとポート
ユーザー トラフィック ファイアウォール ルール。上り(内向き)トラフィックを許可するように構成されています。
- ロードバランサにアクセスする必要がある特定のクライアント ソース IP 範囲。
- 転送ルールで構成されている IP プロトコルとポート
次の点にご注意ください。
アプリケーションが制限なしですべてのインターネット ユーザーにサービスを提供している場合は、IPv4 トラフィックに
0.0.0.0/0、IPv6 トラフィックに::/0のソース IP 範囲を構成します。ロード バランシングの IP プロトコルとポートをプローブするようにヘルスチェックを構成した場合は、ヘルスチェックとユーザー トラフィックのファイアウォール ルールを統合して、単一のファイアウォール ルールを構成できます。
gcloud
すべての送信元範囲からの TCP トラフィックがポート 80 でバックエンド VM インスタンスに到達することを許可するファイアウォール ルールを作成します。このポートとプロトコルは、ロード バランシングとヘルスチェックの両方に使用されます。
すべての IPv4 トラフィックを許可するには、次のコマンドを実行します。
gcloud compute firewall-rules create firewall-allow-traffic-ipv4 \ --network=lb-network \ --target-tags=allow-traffic \ --allow=tcp:80 \ --source-ranges=0.0.0.0/0すべての IPv6 トラフィックを許可するには、次のコマンドを実行します。
gcloud compute firewall-rules create firewall-allow-traffic-ipv6 \ --network=lb-network \ --target-tags=allow-traffic \ --allow=tcp:80 \ --source-ranges=::/0
バックエンド VM を作成する
このロード バランシングの例では、設定の概要セクションで説明したように、4 つの VM を作成します。
この例では、VM の nic0 インターフェースは lb-network VPC ネットワークとサブネット(lb-subnet-us または lb-subnet-eu)のいずれかに関連付けられています。GCE_VM_IP エンドポイントで参照されるネットワーク インターフェースは、ゾーン NEG に関連付けられた同じ VPC サブネットに存在する必要があります。
次の表に、ロードバランサのトラフィック タイプ、バックエンド VM ネットワーク インターフェース、VPC サブネット スタック タイプの互換性を示します。グローバル外部パススルー ネットワーク ロードバランサのアーキテクチャ ガイドに記載されている、バックエンド VM のネットワーク インターフェースと VPC サブネットの互換性要件を理解しておきます。
| ロードバランサのトラフィック タイプ | バックエンド VM ネットワーク インターフェースのスタックタイプ | VPC サブネットのスタックタイプ |
|---|---|---|
| IPv4 トラフィックのみ | IPV4_ONLY |
IPV4_ONLY または IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| IPv6 トラフィックのみ | IPV6_ONLY |
IPV6_ONLY または IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| IPv4 トラフィックと IPv6 トラフィック | IPV4_IPV6 |
IPV4_IPV6 |
gcloud
VM_NAME、REGION、ZONE、SUBNET に次の 4 つの組み合わせを使用して、gcloud compute instances create コマンドを 4 回実行して 4 つの VM を作成します。Bash スクリプトは 4 つの VM ですべて同じです。
| VM_NAME | REGION | ZONE | SUBNET |
|---|---|---|---|
vm-us-1 |
us-west1 |
us-west1-a |
lb-subnet-us |
vm-us-2 |
us-west1 |
us-west1-a |
lb-subnet-us |
vm-eu-1 |
europe-west2 |
europe-west2-a |
lb-subnet-eu |
vm-eu-2 |
europe-west2 |
europe-west2-a |
lb-subnet-eu |
IPv4 専用ネットワーク インターフェースを持つバックエンド VM を作成するには、次のコマンドを使用します。
gcloud compute instances create VM_NAME \
--zone=ZONE \
--image-family=debian-12 \
--image-project=debian-cloud \
--tags=allow-traffic \
--network-interface=network=lb-network,subnet=SUBNET,stack-type=IPV4_ONLY \
--metadata=startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
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
systemctl restart apache2'
デュアルスタック ネットワーク インターフェースを持つバックエンド VM を作成するには、次のコマンドを使用します。
gcloud compute instances create VM_NAME \
--zone=ZONE \
--image-family=debian-12 \
--image-project=debian-cloud \
--tags=allow-traffic \
--network-interface=network=lb-network,subnet=SUBNET,stack-type=IPV4_IPV6,ipv6-network-tier=PREMIUM \
--metadata=startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
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
systemctl restart apache2'
GCE_VM_IP エンドポイントを使用してゾーン NEG を作成する
このロード バランシングの例では、GCE_VM_IP エンドポイントを使用して 2 つのゾーン NEG を作成します。
us-west1-aゾーンのゾーン NEGneg-us。ゾーン NEG は、次の 2 つのネットワーク エンドポイントで構成されています。vm-us-1とvm-us-2のnic0をゾーン NEGneg-usに接続する
europe-west2-aのゾーン NEGneg-eu。ゾーン NEG は、次の 2 つのネットワーク エンドポイントで構成されています。vm-eu-1とvm-eu-2のnic0をゾーン NEGneg-euに接続する
GCE_VM_IP エンドポイントを含む新しいゾーン NEG を作成する場合は、NEG にエンドポイントを追加する前に、NEG を VPC サブネットに明示的に関連付ける必要があります。ロードバランサは、NEG に関連付けられた VPC サブネット内のネットワーク インターフェースにパケットを配信します。この例では、ゾーン NEG のエンドポイントは VM の nic0 を指します。
gcloud
us-west1-aゾーンにneg-usという名前のGCE_VM_IPゾーン NEG を作成します。gcloud compute network-endpoint-groups create neg-us \ --network-endpoint-type=gce-vm-ip \ --zone=us-west1-a \ --network=lb-network \ --subnet=lb-subnet-usエンドポイントをゾーン NEG
neg-usに追加します。gcloud compute network-endpoint-groups update neg-us \ --zone=us-west1-a \ --add-endpoint='instance=vm-us-1' \ --add-endpoint='instance=vm-us-2'europe-west2-aゾーンにneg-euというGCE_VM_IPゾーン NEG を作成します。gcloud compute network-endpoint-groups create neg-eu \ --network-endpoint-type=gce-vm-ip \ --zone=europe-west2-a \ --network=lb-network \ --subnet=lb-subnet-euエンドポイントをゾーン NEG
neg-euに追加します。gcloud compute network-endpoint-groups update neg-eu \ --zone=europe-west2-a \ --add-endpoint='instance=vm-eu-1' \ --add-endpoint='instance=vm-eu-2'
グローバル外部 IP アドレスを予約する
グローバル外部パススルー ネットワーク ロードバランサには、2 つのグローバル外部 IP アドレス(各アベイラビリティ グループから 1 つずつ)が必要です。これらの 2 つの IP アドレスは、ロードバランサの転送ルールに関連付けられます。
グローバル外部パススルー ネットワーク ロードバランサの場合、転送ルールの IP アドレスは VPC サブネットから完全に切り離されます。IP アドレスは、Google 所有のグローバル外部 IP アドレス プールまたは BYOIP グローバル外部 IPv4 パブリック委任プレフィックスに属し、VPC サブネットに関連付けられていません。
IPv6 転送ルールを構成すると、転送ルール IP アドレスは /96 プレフィックスとして割り当てられます。
gcloud
IPv4 トラフィックの場合:
可用性グループ 0 で
lb-ipv4-ag0という最初のグローバル外部 IP アドレスを予約します。gcloud beta compute addresses create lb-ipv4-ag0 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \ --ip-version=IPV4可用性グループ 1 で 2 番目のグローバル外部 IP アドレス
lb-ipv4-ag1を予約します。gcloud beta compute addresses create lb-ipv4-ag1 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP1 \ --ip-version=IPV4
IPv6 トラフィックの場合:
可用性グループ 0 で
lb-ipv6-ag0という最初のグローバル外部 IP アドレスを予約します。gcloud beta compute addresses create lb-ipv6-ag0 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \ --ip-version=IPV6可用性グループ 1 で 2 番目のグローバル外部 IP アドレス
lb-ipv6-ag1を予約します。gcloud beta compute addresses create lb-ipv6-ag1 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP1 \ --ip-version=IPV6
ロードバランサを構成する
グローバル外部パススルー ネットワーク ロードバランサを設定するには、ヘルスチェック、バックエンド サービス、転送ルールを作成します。
gcloud
TCP:80プローブを生成するように構成された TCP ヘルスチェックを作成するgcloud compute health-checks create tcp hc-tcp-80 \ --global \ --port=80
EXTERNAL_PASSTHROUGHロード バランシング方式でグローバル バックエンド サービスを作成します。gcloud beta compute backend-services create lb-backend-service \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --health-checks=hc-tcp-80 \ --global
バックエンドとしてゾーン NEG をバックエンド サービスに追加します。
us-west1-aゾーンのゾーン NEG をバックエンド サービスに追加します。gcloud beta compute backend-services add-backend lb-backend-service \ --network-endpoint-group=neg-us \ --network-endpoint-group-zone=us-west1-a \ --balancing-mode=RATE \ --max-rate-per-endpoint=100000 \ --globaleurope-west2-aゾーンのゾーン NEG をバックエンド サービスに追加します。gcloud beta compute backend-services add-backend lb-backend-service \ --network-endpoint-group=neg-eu \ --network-endpoint-group-zone=europe-west2-a \ --balancing-mode=RATE \ --max-rate-per-endpoint=100000 \ --globalTCP:80トラフィックを処理するグローバル転送ルールを作成します。IPv4 トラフィックと IPv6 トラフィックの両方を処理するには、2 つの転送ルールを作成する必要があります。転送ルールの IP バージョンがバックエンド VM ネットワーク インターフェースのスタックタイプと一致していることを確認します。
転送ルールは、各可用性グループの IP アドレスを参照します。
IPv4 トラフィックの場合:
gcloud beta compute forwarding-rules create lb-forwarding-rule-ipv4 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=TCP \ --ports=80 \ --backend-service=lb-backend-service \ --global \ --ip-addresses=lb-ipv4-ag0,lb-ipv4-ag1
IPv6 トラフィックの場合:
gcloud beta compute forwarding-rules create lb-forwarding-rule-ipv6 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=TCP \ --ports=80 \ --backend-service=lb-backend-service \ --global \ --ip-addresses=lb-ipv6-ag0,lb-ipv6-ag1
ロードバランサをテストする
転送ルールにアタッチされている予約済み IP アドレスを取得します。
gcloud beta compute forwarding-rules describe lb-forwarding-rule-ipv4 \ --globalこれにより、可用性グループごとに 1 つずつ、2 つの IP アドレスが返されます。これらの IP アドレスは
IP_ADDRESS_AVAILABILITY_GROUP_0とIP_ADDRESS_AVAILABILITY_GROUP_1と呼ばれます。いずれかの IP アドレスにトラフィックを送信します。
curl http://IP_ADDRESS_AVAILABILITY_GROUP_0
curl http://IP_ADDRESS_AVAILABILITY_GROUP_1
ロケーションとバックエンドの健全性に応じて、異なるリージョンのバックエンド VM からのレスポンスが表示されます。
ロードバランサの IP アドレスについてローカル ルーティング テーブルを確認する
バックエンド VM のローカル ルーティング テーブルには、グローバル外部パススルー ネットワーク ロードバランサの IP アドレスが含まれています。
バックエンド VM のローカルルートを確認するには、SSH を使用してバックエンド VM に接続し、次のコマンドを実行します。
ip route list table local
出力は次のとおりです。
local 10.1.2.5 dev ens4 proto kernel scope host src 10.1.2.5 local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1 local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1 local 136.124.69.214 dev ens4 proto 66 scope host local 136.124.83.205 dev ens4 proto 66 scope host
上記の例では、136.124.69.214 と 136.124.83.205 はロードバランサの転送ルールに割り当てられた IP アドレスです。VM のローカル ルーティング テーブルの local 136.124.69.214 dev ens4 proto 66 scope host と local 136.124.83.205
dev ens4 proto 66 scope host の行エントリにより、ロードバランサの IP アドレス宛てのパケットがバックエンドで受け入れられます。このエントリの追加は、 Cloud de Confiance ゲスト環境が行います。
バックエンド VM のローカル ルーティング テーブル エントリは、ローカルホスト配信用のパケットを受け入れます。ネットワーク スタックは、このパケットをリッスン アプリケーションに配信します。その後、アプリケーションからのレスポンス パケットがクライアントに直接送信されます。
ロードバランサの IP アドレスは、実際には VM のネットワーク インターフェースで構成されていません。これを確認するには、次のコマンドを実行します。
ip addr list
出力は次のとおりです。IP アドレス(136.124.69.214 と 136.124.83.205)はローカル ルーティング テーブルに表示されますが、ネットワーク インターフェースには構成されていません。
1: lo:mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: ens4: mtu 1460 qdisc fq_codel state UP group default qlen 1000 link/ether 42:01:0a:01:02:0d brd ff:ff:ff:ff:ff:ff altname enp0s4 inet 10.1.2.13/32 metric 100 scope global dynamic ens4 valid_lft 84283sec preferred_lft 84283sec inet6 fe80::4001:aff:fe01:20d/64 scope link valid_lft forever preferred_lft forever