このドキュメントでは、TCP、UDP、ESP、GRE、ICMP、ICMPv6 のトラフィックのバランスを取るグローバル外部パススルー ネットワーク ロードバランサを作成する方法について説明します。
このような構成を使用すると、次のことができます。
TCP または UDP 以外の IP プロトコルを使用するトラフィックをロード バランシングする。
1 つのロードバランサで複数のプロトコルを処理します。たとえば、IPsec サービスは通常、ESP と UDP ベースの IKE、NAT-T のトラフィックの組み合わせを処理します。
始める前に
設定が次の前提条件を満たしていることを確認します。
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 条件をご覧ください。
設定の概要
次の図は、同じ IP アドレス ペアに対して 2 つのグローバル外部パススルー ネットワーク ロードバランサを示しています。各ロードバランサは、異なる IP プロトコルとポートのセットを処理します。グローバル外部パススルー ネットワーク ロードバランサの仕組みについては、概要ガイドのアーキテクチャ セクションをご覧ください。
ポート 80 の
TCPロードバランサこのロードバランサの転送ルールは、ポート
80に到着するTCPトラフィックのみをキャプチャするように構成されています。- パケットが転送ルールの IP アドレスに到達すると、Google Cloud は、まず、それが
TCPパケットであるかどうか、宛先ポートが80であるかどうかを確認します。 - これらの条件が満たされると、このパケットは特定の
TCP転送ルールによってキャプチャされ、参照されたバックエンド サービスに基づいてバックエンドに転送されます。
- パケットが転送ルールの IP アドレスに到達すると、Google Cloud は、まず、それが
TCP:8080とUDPのトラフィック用のL3_DEFAULTロードバランサこのロードバランサの転送ルールは
L3_DEFAULTプロトコルを使用し、すべてのポートでトラフィックを受け入れるように構成されています。この設定では、最初の転送ルールで処理されないトラフィック(UDP、ICMP、ポート 80 以外のすべての TCP トラフィックなど)を処理するキャッチオール ルールとして機能します。- ポート 80 に到達する特定の TCP トラフィック ルールと一致しないパケットが転送ルール IP アドレスに到達した場合(たとえば、UDP トラフィック、ICMP ping、ポート 8080 または 443 の TCP トラフィックの場合)、このパケットは
L3_DEFAULT転送ルールによってキャプチャされます。 TCP:8080トラフィックとUDPトラフィックのみがバックエンド VM インスタンスに到達できるようにファイアウォール ルールを追加します。したがって、L3_DEFAULT転送ルールはすべてのポートのすべての IP プロトコル トラフィックをキャプチャしますが、ファイアウォール ルールはロード バランシングされたトラフィックをTCP:8080トラフィックとUDPトラフィックに制限します。- その後、パケットは参照されたバックエンド サービスに基づいてバックエンドに転送されます。
Google Cloud は、残りのトラフィックが同じ IP アドレスの
L3_DEFAULTルールに流れる前に、ポート80のより具体的なTCPルールを優先します。- ポート 80 に到達する特定の TCP トラフィック ルールと一致しないパケットが転送ルール IP アドレスに到達した場合(たとえば、UDP トラフィック、ICMP ping、ポート 8080 または 443 の TCP トラフィックの場合)、このパケットは
ネットワークとサブネットを設定する
この例では、2 つの異なるリージョンにサブネットを持つ lb-network という名前のカスタムモード 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 |
この例で使用されているバックエンドは、次のリージョンとサブネットにあります。サブネットに構成する IPv4 アドレス範囲は選択できますが、 Google Cloud は /64 IPv6 アドレス範囲をサブネット全体に自動的に割り当てます。
リージョン:
us-west1- サブネット:
lb-subnet-us(プライマリ IPv4 アドレス範囲は 10.1.2.0/24)。
- サブネット:
リージョン:
europe-west2- サブネット:
lb-subnet-eu(プライマリ IPv4 アドレス範囲は 10.1.3.0/24)。
- サブネット:
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-west1IPv6 専用サブネットを作成するには、次のコマンドを使用します。
gcloud compute networks subnets create lb-subnet-us \ --stack-type=IPV6_ONLY \ --ipv6-access-type=EXTERNAL \ --network=lb-network \ --region=us-west1europe-west2リージョンのバックエンド用にlb-subnet-euという名前のサブネットを作成します。IPv4 専用のサブネットを作成するには、次のコマンドを使用します。
gcloud compute networks subnets create lb-subnet-eu \ --stack-type=IPV4_ONLY \ --network=lb-network \ --range=10.1.3.0/24 \ --region=europe-west2デュアルスタック サブネットを作成するには、次のコマンドを使用します。
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-west2IPv6 専用サブネットを作成するには、次のコマンドを使用します。
gcloud compute networks subnets create lb-subnet-eu \ --stack-type=IPV6_ONLY \ --ipv6-access-type=EXTERNAL \ --network=lb-network \ --range=10.1.3.0/24 \ --region=europe-west2
グローバル外部 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
ポート 80 の TCP トラフィック用にロードバランサを構成する
このセクションの手順に沿って、ポート 80 で TCP トラフィックをキャプチャするグローバル外部パススルー ネットワーク ロードバランサを構成します。
TCP:80 トラフィックのみを許可するファイアウォール ルールを作成する
本番環境を安全に構成するには、次の 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 allow-traffic-tcp-80-ipv4 \ --network=lb-network \ --target-tags=allow-traffic-tcp-80 \ --allow=tcp:80 \ --source-ranges=0.0.0.0/0すべての IPv6 トラフィックを許可するには、次のコマンドを実行します。
gcloud compute firewall-rules create allow-traffic-tcp-80-ipv6 \ --network=lb-network \ --target-tags=allow-traffic-tcp-80 \ --allow=tcp:80 \ --source-ranges=::/0
バックエンド VM インスタンスを作成する
このロード バランシングの例では、us-west1-a ゾーンと europe-west2-a ゾーンにマネージド インスタンス グループを作成します。マネージド インスタンス グループは、ロードバランサのバックエンド サーバーをホストする VM インスタンスで構成されます。デモンストレーションのため、バックエンドはポート 80 で Apache サーバーを実行しています。クライアント リクエストに応じて、独自のホスト名を提供します。
インスタンス グループは、バックエンド VM の作成に使用されるインスタンス テンプレートを参照します。
次の表に、ロードバランサのトラフィック タイプ、バックエンド 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 |
インスタンス テンプレートの作成
この例では、us-west1 リージョンと europe-west2 リージョンにリージョン インスタンス テンプレートを作成します。
gcloud
us-west1リージョンにインスタンス テンプレートを作成します。IPv4 専用ネットワーク インターフェースを持つバックエンド VM を作成するには、次のコマンドを使用します。
gcloud compute instance-templates create ig-template-us-tcp-80 \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet-us \ --stack-type=IPV4_ONLY \ --tags=allow-traffic-tcp-80 \ --image-family=debian-12 \ --image-project=debian-cloud \ --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 instance-templates create ig-template-us-tcp-80 \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet-us \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV4_IPV6 \ --tags=allow-traffic-tcp-80 \ --image-family=debian-12 \ --image-project=debian-cloud \ --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'IPv6 専用ネットワーク インターフェースを持つバックエンド VM を作成するには、次のコマンドを使用します。
gcloud compute instance-templates create ig-template-us-tcp-80 \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet-us \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV6_ONLY \ --tags=allow-traffic-tcp-80 \ --image-family=debian-12 \ --image-project=debian-cloud \ --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'europe-west2リージョンにインスタンス テンプレートを作成します。IPv4 専用ネットワーク インターフェースを持つバックエンド VM を作成するには、次のコマンドを使用します。
gcloud compute instance-templates create ig-template-eu-tcp-80 \ --region=europe-west2 \ --network=lb-network \ --subnet=lb-subnet-eu \ --stack-type=IPV4_ONLY \ --tags=allow-traffic-tcp-80 \ --image-family=debian-12 \ --image-project=debian-cloud \ --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 instance-templates create ig-template-eu-tcp-80 \ --region=europe-west2 \ --network=lb-network \ --subnet=lb-subnet-eu \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV4_IPV6 \ --tags=allow-traffic-tcp-80 \ --image-family=debian-12 \ --image-project=debian-cloud \ --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'IPv6 専用ネットワーク インターフェースを持つバックエンド VM を作成するには、次のコマンドを使用します。
gcloud compute instance-templates create ig-template-eu-tcp-80 \ --region=europe-west2 \ --network=lb-network \ --subnet=lb-subnet-eu \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV6_ONLY \ --tags=allow-traffic-tcp-80 \ --image-family=debian-12 \ --image-project=debian-cloud \ --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'
ゾーン マネージド インスタンス グループを作成する
この例では、2 つのゾーン マネージド インスタンス グループ(1 つは us-west1-a ゾーン、もう 1 つは europe-west2-a ゾーン)を作成します。
gcloud
us-west1-aゾーンにマネージド インスタンス グループを作成します。gcloud compute instance-groups managed create ig-us-tcp-80 \ --template=ig-template-us-tcp-80 \ --size=2 \ --zone=us-west1-a
europe-west2-aゾーンにマネージド インスタンス グループを作成します。gcloud compute instance-groups managed create ig-eu-tcp-80 \ --template=ig-template-eu-tcp-80 \ --size=2 \ --zone=europe-west2-a
Cloud Load Balancing コンポーネントを作成する
グローバル外部パススルー ネットワーク ロードバランサの Cloud Load Balancing コンポーネントを作成する手順は次のとおりです。
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-tcp-80 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --health-checks=hc-tcp-80 \ --global
インスタンス グループをバックエンドとしてバックエンド サービスに追加します。
us-west1-aゾーンのインスタンス グループをバックエンド サービスに追加します。gcloud beta compute backend-services add-backend lb-backend-service-tcp-80 \ --instance-group=ig-us-tcp-80 \ --instance-group-zone=us-west1-a \ --balancing-mode=UTILIZATION \ --max-utilization=0.7 \ --globaleurope-west2-aゾーンのインスタンス グループをバックエンド サービスに追加します。gcloud beta compute backend-services add-backend lb-backend-service-tcp-80 \ --instance-group=ig-eu-tcp-80 \ --instance-group-zone=europe-west2-a \ --balancing-mode=UTILIZATION \ --max-utilization=0.7 \ --globalTCP:80トラフィックを処理するグローバル転送ルールを作成します。転送ルールの IP バージョンがバックエンド VM ネットワーク インターフェースのスタックタイプと一致していることを確認します。
転送ルールは、各可用性グループの IP アドレスを参照します。
IPv4 トラフィックの場合:
gcloud beta compute forwarding-rules create lb-forwarding-rule-tcp-80-ipv4 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=TCP \ --ports=80 \ --backend-service=lb-backend-service-tcp-80 \ --global \ --ip-addresses=lb-ipv4-ag0,lb-ipv4-ag1
IPv6 トラフィックの場合:
gcloud beta compute forwarding-rules create lb-forwarding-rule-tcp-80-ipv6 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=TCP \ --ports=80 \ --backend-service=lb-backend-service-tcp-80 \ --global \ --ip-addresses=lb-ipv6-ag0,lb-ipv6-ag1
TCP:8080 トラフィックと UDP トラフィックのロードバランサを構成する
このセクションの手順に沿って、TCP:8080 トラフィックと UDP トラフィックを処理するようにグローバル外部パススルー ネットワーク ロードバランサを構成します。
TCP:8080 トラフィックと UDP トラフィックのみを許可するファイアウォール ルールを作成する
本番環境を安全に構成するには、次の 2 つのファイアウォール ルールを個別に作成する必要があります。
ヘルスチェック ファイアウォール ルール。次の範囲からの上り(内向き)トラフィックを許可するように構成されています。
- Google のヘルスチェック IP 範囲。
- ヘルスチェックで構成されている IP プロトコルとポート
ユーザー トラフィック ファイアウォール ルール。上り(内向き)トラフィックを許可するように構成されています。
- ロードバランサにアクセスする必要がある特定のクライアント ソース IP 範囲。
- 転送ルールで構成されている IP プロトコルとポート
次の点にご注意ください。
アプリケーションが制限なしですべてのインターネット ユーザーにサービスを提供している場合は、IPv4 トラフィックに
0.0.0.0/0、IPv6 トラフィックに::/0のソース IP 範囲を構成します。ロード バランシングの IP プロトコルとポートをプローブするようにヘルスチェックを構成した場合は、ヘルスチェックとユーザー トラフィックのファイアウォール ルールを統合して、単一のファイアウォール ルールを構成できます。
gcloud
すべての送信元範囲からの TCP:8080 トラフィックと UDP トラフィックがバックエンド VM インスタンスに到達できるようにするファイアウォール ルールを作成します。これらのプロトコルはロード バランシングに使用され、TCP ポート 8080 はヘルスチェックにも使用されます。
IPv4 トラフィックが
ig-us-l3-defaultインスタンス グループとig-eu-l3-defaultインスタンス グループのバックエンドに到達できるようにするには、次のファイアウォール ルールを作成します。gcloud compute firewall-rules create allow-traffic-l3-default-ipv4 \ --network=lb-network \ --target-tags=allow-traffic-l3-default \ --allow=tcp:8080,udp \ --source-ranges=0.0.0.0/0IPv6 トラフィックが
ig-us-l3-defaultインスタンス グループとig-eu-l3-defaultインスタンス グループのバックエンドに到達できるようにするには、次のファイアウォール ルールを作成します。gcloud compute firewall-rules create allow-traffic-l3-default-ipv6 \ --network=lb-network \ --target-tags=allow-traffic-l3-default \ --allow=tcp:8080,udp \ --source-ranges=::/0
バックエンド VM インスタンスを作成する
このロード バランシングの例では、us-west1-a ゾーンと europe-west2-a ゾーンにマネージド インスタンス グループを作成します。マネージド インスタンス グループは、ロードバランサのバックエンド サーバーをホストする VM インスタンスで構成されます。わかりやすく説明するために、バックエンド サーバーはそれぞれのホスト名をコンテンツとして提供します。この起動スクリプトは、Apache サーバーがポート 80 ではなく、ポート 8080 をリッスンするようにします。
インスタンス グループは、バックエンド VM の作成に使用されるインスタンス テンプレートを参照します。
次の表に、ロードバランサのトラフィック タイプ、バックエンド 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 |
インスタンス テンプレートの作成
この例では、us-west1 リージョンと europe-west2 リージョンにリージョン インスタンス テンプレートを作成します。
gcloud
us-west1リージョンにインスタンス テンプレートを作成します。IPv4 専用ネットワーク インターフェースを持つバックエンド VM を作成するには、次のコマンドを使用します。
gcloud compute instance-templates create ig-template-us-l3-default \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet-us \ --stack-type=IPV4_ONLY \ --tags=allow-traffic-l3-default \ --image-family=debian-12 \ --image-project=debian-cloud \ --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 sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'デュアルスタック ネットワーク インターフェースを持つバックエンド VM を作成するには、次のコマンドを使用します。
gcloud compute instance-templates create ig-template-us-l3-default \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet-us \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV4_IPV6 \ --tags=allow-traffic-l3-default \ --image-family=debian-12 \ --image-project=debian-cloud \ --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 sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'IPv6 専用ネットワーク インターフェースを持つバックエンド VM を作成するには、次のコマンドを使用します。
gcloud compute instance-templates create ig-template-us-l3-default \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet-us \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV6_ONLY \ --tags=allow-traffic-l3-default \ --image-family=debian-12 \ --image-project=debian-cloud \ --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 sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'europe-west2リージョンにインスタンス テンプレートを作成します。IPv4 専用ネットワーク インターフェースを持つバックエンド VM を作成するには、次のコマンドを使用します。
gcloud compute instance-templates create ig-template-eu-l3-default \ --region=europe-west2 \ --network=lb-network \ --subnet=lb-subnet-eu \ --stack-type=IPV4_ONLY \ --tags=allow-traffic-l3-default \ --image-family=debian-12 \ --image-project=debian-cloud \ --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 sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'デュアルスタック ネットワーク インターフェースを持つバックエンド VM を作成するには、次のコマンドを使用します。
gcloud compute instance-templates create ig-template-eu-l3-default \ --region=europe-west2 \ --network=lb-network \ --subnet=lb-subnet-eu \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV4_IPV6 \ --tags=allow-traffic-l3-default \ --image-family=debian-12 \ --image-project=debian-cloud \ --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 sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'IPv6 専用ネットワーク インターフェースを持つバックエンド VM を作成するには、次のコマンドを使用します。
gcloud compute instance-templates create ig-template-eu-l3-default \ --region=europe-west2 \ --network=lb-network \ --subnet=lb-subnet-eu \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV6_ONLY \ --tags=allow-traffic-l3-default \ --image-family=debian-12 \ --image-project=debian-cloud \ --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 sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'
ゾーン マネージド インスタンス グループを作成する
この例では、2 つのゾーン マネージド インスタンス グループ(1 つは us-west1-a ゾーン、もう 1 つは europe-west2-a ゾーン)を作成します。
gcloud
us-west1-aゾーンにマネージド インスタンス グループを作成します。gcloud compute instance-groups managed create ig-us-l3-default \ --template=ig-template-us-l3-default \ --size=2 \ --zone=us-west1-a
europe-west2-aゾーンにマネージド インスタンス グループを作成します。gcloud compute instance-groups managed create ig-eu-l3-default \ --template=ig-template-eu-l3-default \ --size=2 \ --zone=europe-west2-a
Cloud Load Balancing コンポーネントを作成する
グローバル外部パススルー ネットワーク ロードバランサの Cloud Load Balancing コンポーネントを作成する手順は次のとおりです。
gcloud
TCP:8080プローブを生成するように構成された TCP ヘルスチェックを作成します。gcloud compute health-checks create tcp hc-tcp-8080 \ --global \ --port=8080
EXTERNAL_PASSTHROUGHロード バランシング方式でグローバル バックエンド サービスを作成します。gcloud beta compute backend-services create lb-backend-service-l3-default \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --health-checks=hc-tcp-8080 \ --global
インスタンス グループをバックエンドとしてバックエンド サービスに追加します。
us-west1-aゾーンのインスタンス グループをバックエンド サービスに追加します。gcloud beta compute backend-services add-backend lb-backend-service-l3-default \ --instance-group=ig-us-l3-default \ --instance-group-zone=us-west1-a \ --balancing-mode=UTILIZATION \ --max-utilization=0.7 \ --globaleurope-west2-aゾーンのインスタンス グループをバックエンド サービスに追加します。gcloud beta compute backend-services add-backend lb-backend-service-l3-default \ --instance-group=ig-eu-l3-default \ --instance-group-zone=europe-west2-a \ --balancing-mode=UTILIZATION \ --max-utilization=0.7 \ --globalip-protocolフィールドをL3_DEFAULTに設定したグローバル転送ルールを作成して、すべての IP プロトコル トラフィック(ポート 80 以外の TCP トラフィック、UDP、ESP、ICMP)を処理します。IPv4 トラフィックと IPv6 トラフィックの両方を処理するには、2 つの転送ルールを作成する必要があります。転送ルールの IP バージョンがバックエンド VM ネットワーク インターフェースのスタックタイプと一致していることを確認します。
転送ルールは、各可用性グループの IP アドレスを参照します。
IPv4 トラフィックの場合:
gcloud beta compute forwarding-rules create lb-forwarding-rule-l3-default-ipv4 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=L3_DEFAULT \ --ports=all \ --backend-service=lb-backend-service-l3-default \ --global \ --ip-addresses=lb-ipv4-ag0,lb-ipv4-ag1
IPv6 トラフィックの場合:
gcloud beta compute forwarding-rules create lb-forwarding-rule-l3-default-ipv6 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=L3_DEFAULT \ --ports=all \ --backend-service=lb-backend-service-l3-default \ --global \ --ip-addresses=lb-ipv6-ag0,lb-ipv6-ag1
ロードバランサをテストする
ロード バランシング サービスの構成が完了したので、ロードバランサの外部 IP アドレスにトラフィックの送信を開始できます。また、バックエンド インスタンスに分散されるトラフィックを監視できます。
ロードバランサの外部 IP アドレスを取得する
転送ルールにアタッチされている予約済み IP アドレスを取得します。両方のロードバランサの転送ルールで同じ IP アドレスのペアが使用されているため、
lb-forwarding-rule-tcp-80-ipv4またはlb-forwarding-rule-l3-default-ipv4のいずれかを使用して外部 IP アドレスを表示できます。gcloud compute forwarding-rules describe lb-forwarding-rule-tcp-80-ipv4 \ --globalこれにより、可用性グループごとに 1 つずつ、2 つの IP アドレスが返されます。次の手順では、これらの IP アドレスを
IP_ADDRESS_AVAILABILITY_GROUP_0とIP_ADDRESS_AVAILABILITY_GROUP_1として参照します。
ロードバランサにトラフィックを送信する
こちらのステップでは、ロードバランサに外部トラフィックを送信します。次のテストを行い、ポート 80 の TCP トラフィックが ig-us-tcp-80 または ig-eu-tcp-80 インスタンス グループによってロードバランスされ、その他すべてのトラフィック(TCP:8080 と UDP)が ig-us-l3-default または ig-eu-l3-default インスタンス グループによってロードバランスされていることを確認します。
ポート 80 の TCP リクエストの動作を確認する
curlを使用して IP アドレスに接続し、ロードバランサにウェブ リクエストを送信します(ポート 80 の TCP 経由)。IPv4 接続のクライアントから、次のコマンドを実行します。
while true; do curl -m1 IP_ADDRESS_AVAILABILITY_GROUP_0; done
curlコマンドによって返されたテキストを確認します。テキストには、レスポンスを生成するバックエンド VM の名前(Page served from: VM_NAMEなど)が表示されます。レスポンスはig-us-tcp-80またはig-eu-tcp-80インスタンス グループのインスタンスからのみ返されます。これは、ポート 80 のロードバランサの IP アドレスに送信された TCP トラフィックが
TCP転送ルールによって処理されることを示しています。
ポート 8080 の TCP リクエストの動作を確認する
curl を使用してロードバランサへのウェブ リクエストを作成し(ポート 8080 の TCP 経由)、IP アドレスに接続します。
IPv4 接続のクライアントから、次のコマンドを実行します。
while true; do curl -m1 IP_ADDRESS_AVAILABILITY_GROUP_0:8080; done
curlコマンドによって返されたテキストを確認します。レスポンスはig-us-l3-defaultまたはig-eu-l3-defaultインスタンス グループのインスタンスからのみ返されます。これは、ポート 8080 のロードバランサの IP アドレスに送信された TCP トラフィックが
L3_DEFAULT転送ルールによって処理されていることを示しています。
ロードバランサの 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 アドレス宛てのパケットがバックエンドで受け入れられます。このエントリの追加は、 Google Cloud ゲスト環境が行います。
バックエンド 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