リージョン外部プロキシ ネットワーク ロードバランサは、プロキシベースのリージョン レイヤ 4 ロードバランサであり、外部リージョン IP アドレスの背後にある単一のリージョンで TCP サービス トラフィックを実行し、スケーリングできます。これらのロードバランサは、インターネットから同じリージョンのバックエンドに外部 TCP トラフィックを分散します。
このガイドでは、ゾーン ネットワーク エンドポイント グループ(NEG)バックエンドを使用してリージョン外部プロキシ ネットワーク ロードバランサを設定する手順について説明します。
始める前に、以下のドキュメントを確認してください。
この例では、ロードバランサを使用して、リージョン A の 2 つのゾーン NEG 内のバックエンド VM に TCP トラフィックを分散させます。この例のサービスは、ポート 80 で応答するように構成された Apache サーバーのセットです。
この例では、次の図に示すデプロイメントを構成します。
これはリージョン ロードバランサです。すべてのロードバランサ コンポーネント(バックエンド インスタンス グループ、バックエンド サービス、ターゲット プロキシ、転送ルール)は、同じリージョンに配置されている必要があります。
権限
このガイドに進むには、プロジェクト内でインスタンスを作成してネットワークを変更できる必要があります。そのためにはプロジェクトのオーナーまたは編集者であるか、または次の Compute Engine IAM のロールがすべて必要です。
| タスク | 必要なロール |
|---|---|
| ネットワーク、サブネット、負荷分散コンポーネントの作成 | Compute ネットワーク管理者(roles/compute.networkAdmin) |
| ファイアウォール ルールの追加と削除 | Compute セキュリティ管理者(roles/compute.securityAdmin) |
| インスタンスの作成 | Compute インスタンス管理者(roles/compute.instanceAdmin) |
詳細については、次のガイドをご覧ください。
ネットワークとサブネットを構成する
ロードバランサのバックエンド用とロードバランサのプロキシ用の 2 つのサブネットが存在する VPC ネットワークが必要です。これはリージョン ロードバランサです。VPC ネットワーク内のトラフィックは、送信元がロードバランサと同じリージョンのサブネット内にある場合、ロードバランサに転送されます。
この例では、次の VPC ネットワーク、リージョン、サブネットを使用します。
ネットワーク:
lb-networkという名前のカスタムモードの VPC ネットワーク。バックエンドのサブネット: リージョン A の
backend-subnetという名前のサブネット。プライマリ IP アドレス範囲として10.1.2.0/24を使用します。プロキシのサブネット: リージョン A の
proxy-only-subnetという名前のサブネット。プライマリ IP アドレス範囲として10.129.0.0/23を使用します。
バックエンドのネットワークとサブネットを作成する
コンソール
Google Cloud コンソールで、[VPC ネットワーク] ページに移動します。
[VPC ネットワークを作成] をクリックします。
[名前] に「
lb-network」と入力します。[サブネット] セクションで、次の操作を行います。
- [サブネット作成モード] を [カスタム] に設定します。
- [新しいサブネット] セクションに、次の情報を入力します。
- 名前:
backend-subnet - リージョン:
REGION_A - IP アドレス範囲:
10.1.2.0/24
- 名前:
- [完了] をクリックします。
[作成] をクリックします。
gcloud
カスタム VPC ネットワークを作成するには、
gcloud compute networks createコマンドを使用します。gcloud compute networks create lb-network --subnet-mode=custom
REGION_Aリージョンのlb-networkネットワークにサブネットを作成するには、gcloud compute networks subnets createコマンドを使用します。gcloud compute networks subnets create backend-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=REGION_A
プロキシ専用サブネットを作成する
プロキシ専用サブネットには、Google がユーザーに代わって Envoy プロキシを実行する際に使用する一連の IP アドレスが用意されています。このプロキシは、クライアントからの接続を終端し、バックエンドへの新しい接続を作成します。
このプロキシ専用サブネットは、lb-network VPC ネットワークのリージョン A のすべての Envoy ベースのロードバランサで使用されます。
コンソール
Google Cloud コンソールを使用している場合は、後ほど [ロード バランシング] ページでプロキシ専用サブネットを作成することもできます。
プロキシ専用サブネットを今すぐ作成する場合は、次の操作を行います。
Google Cloud コンソールで、[VPC ネットワーク] ページに移動します。
共有 VPC ネットワークの名前
lb-networkをクリックします。[サブネットを追加] をクリックします。
[名前] に「
proxy-only-subnet」と入力します。[リージョン] で、
REGION_Aを選択します。[目的] を [リージョン マネージド プロキシ] に設定します。
[IP アドレス範囲] に「
10.129.0.0/23」と入力します。[追加] をクリックします。
gcloud
プロキシ専用サブネットを作成するには、gcloud compute networks subnets
create コマンドを使用します。
gcloud compute networks subnets create proxy-only-subnet \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=REGION_A \
--network=lb-network \
--range=10.129.0.0/23
ファイアウォール ルールの作成
この例では、次のファイアウォール ルールを作成します。
fw-allow-health-check: ロードバランサおよびGoogle Cloud ヘルスチェック システム(130.211.0.0/22および35.191.0.0/16)からのトラフィックを許可する負荷分散されているインスタンスに適用される上りルール。この例では、ターゲットタグallow-health-checkを使用して適用するバックエンド VM を識別しています。fw-allow-ssh。任意のアドレスから TCP ポート22への SSH 受信接続を許可する上り(内向き)ルール。このルールには、送信元の IP 範囲をより限定的に指定できます。たとえば、SSH セッションを開始するシステムの IP 範囲を指定できます。この例では、ターゲットタグallow-sshを使用して、適用する VM を識別させています。fw-allow-proxy-only-subnet。ロードバランサが TCP ポート80でバックエンド インスタンスと通信することを許可するプロキシ専用サブネットの上り(内向き)allowファイアウォール ルール。この例では、ターゲットタグallow-proxy-only-subnetを使用して、適用するバックエンド VM を識別させています。
コンソール
Google Cloud コンソールで、[ファイアウォール ポリシー] ページに移動します。
[ファイアウォール ルールを作成] をクリックして、次のフィールドに入力します。
- 名前:
fw-allow-health-check - ネットワーク:
lb-network - ターゲット: 指定されたターゲットタグ
- ターゲットタグ:
allow-health-check - ソースフィルタ: IPv4 の範囲
- 送信元 IPv4 範囲:
130.211.0.0/22と35.191.0.0/16 - プロトコルとポート:
- 指定されたプロトコルとポートを選択します。
- [TCP] チェックボックスをオンにして、ポート番号に「
80」と入力します。
- 名前:
[作成] をクリックします。
[ファイアウォール ルールを作成] をもう一度クリックして、受信 SSH 接続を許可するルールを作成します。
- 名前:
fw-allow-ssh - ネットワーク:
lb-network - 優先度:
1000 - トラフィックの方向: 上り(内向き)
- 一致したときのアクション: 許可
- ターゲット: 指定されたターゲットタグ
- ターゲットタグ:
allow-ssh - ソースフィルタ: IPv4 の範囲
- 送信元 IPv4 範囲:
0.0.0.0/0 - プロトコルとポート:
- 指定されたプロトコルとポートを選択します。
- [TCP] チェックボックスをオンにして、ポート番号に「
22」と入力します。
- 名前:
[作成] をクリックします。
[ファイアウォール ルールを作成] をもう一度クリックして、プロキシ専用サブネットから Google Cloudバックエンドへの受信接続を許可するルールを作成します。
- 名前:
fw-allow-proxy-only-subnet - ネットワーク:
lb-network - 優先度:
1000 - トラフィックの方向: 上り(内向き)
- 一致したときのアクション: 許可
- ターゲット: 指定されたターゲットタグ
- ターゲットタグ:
allow-proxy-only-subnet - ソースフィルタ: IPv4 の範囲
- 送信元 IPv4 範囲:
10.129.0.0/23 - プロトコルとポート:
- 指定されたプロトコルとポートを選択します。
- [TCP] チェックボックスをオンにして、ポート番号に「
80」と入力します。
- 名前:
[作成] をクリックします。
gcloud
Google Cloud ヘルスチェックが TCP ポート
80でバックエンド インスタンスに到達できるように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:80ネットワーク タグ
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ロードバランサが TCP ポート
80でバックエンド インスタンスと通信することを許可するプロキシ専用サブネットの上り(内向き)許可ファイアウォール ルールを作成します。gcloud compute firewall-rules create fw-allow-proxy-only-subnet \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-proxy-only-subnet \ --source-ranges=10.129.0.0/23 \ --rules=tcp:80
ロードバランサの IP アドレスを予約する
コンソール
Google Cloud コンソールで、[静的アドレスの予約] ページに移動します。
新しいアドレスの名前を指定します。
[ネットワーク サービス ティア] で [スタンダード] を選択します。
[IP バージョン] で [IPv4] を選択します。IPv6 アドレスはサポートされません。
[タイプ] で [リージョン] を選択します。
[リージョン] で
REGION_Aを選択します。[接続先] オプションは [なし] のままにします。ロードバランサを作成すると、この IP アドレスがロードバランサの転送ルールに関連付けられます。
[予約] をクリックして IP アドレスを予約します。
gcloud
静的外部 IP アドレスを予約するには、
gcloud compute addresses createコマンドを使用します。gcloud compute addresses create ADDRESS_NAME \ --region=REGION_A \ --network-tier=STANDARD
ADDRESS_NAMEは、このアドレスに付ける名前に置き換えます。結果を表示するには、
gcloud compute addresses describeコマンドを使用します。gcloud compute addresses describe ADDRESS_NAME
ゾーン NEG を設定する
リージョン A に GCE_VM_IP_PORT タイプのエンドポイントを含むゾーン NEG を設定します。まず、VM を作成してからゾーン NEG を作成し、VM のネットワーク エンドポイントを NEG に追加します。
VM を作成する
コンソール
Google Cloud コンソールで、[VM インスタンス] ページに移動します。
[インスタンスを作成] をクリックします。
[名前] を
vm-a1に設定します。[リージョン] で
REGION_Aを選択します。[ゾーン] で、[
ZONE_A] を選択します。[ブートディスク] セクションで、ブートディスク オプションとして Debian GNU/Linux 12 (bookworm) が選択されていることを確認します。必要に応じて [選択] をクリックし、イメージを変更します。
[詳細オプション] をクリックします。
[ネットワーキング] をクリックして次のフィールドを構成します。
- [ネットワーク タグ] に「
allow-ssh」、「allow-health-check、「allow-proxy-only-subnet」を入力します。 - [ネットワーク インターフェース] で、次のように選択します。
- ネットワーク:
lb-network - サブネット:
backend-subnet
- ネットワーク:
- [ネットワーク タグ] に「
[管理] をクリックします。[起動スクリプト] フィールドに次のスクリプトを入力します。
#! /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
[作成] をクリックします。
上記の手順を繰り返して、さらに 3 台の VM を作成します。次の名前とゾーンの組み合わせを使用します。
- 名前:
vm-a2、ゾーン:ZONE_A - 名前:
vm-b1、ゾーン:ZONE_B - 名前:
vm-b2、ゾーン:ZONE_B
- 名前:
gcloud
VM を作成するには、gcloud compute instances create コマンドを 2 回使用します。VM_NAME と ZONE には、次の組み合わせを使用します。スクリプトの内容は両方の VM で同じです。
VM_NAME:vm-a1、ZONE:ZONE_AVM_NAME:vm-a2、ZONE:ZONE_AVM_NAME:vm-b1、ZONE:ZONE_BVM_NAME:vm-b2、ZONE:ZONE_B
gcloud compute instances create VM_NAME \
--zone=ZONE \
--image-family=debian-12 \
--image-project=debian-cloud \
--tags=allow-ssh,allow-health-check,allow-proxy-only-subnet \
--subnet=backend-subnet \
--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'
ゾーン NEG を作成する
コンソール
ゾーン ネットワーク エンドポイント グループを作成する
Google Cloud コンソールで、[ネットワーク エンドポイント グループ] ページに移動します。
[ネットワーク エンドポイント グループを作成] をクリックします。
[名前] に「
zonal-neg-a」と入力します。[ネットワーク エンドポイント グループの種類] で、[ネットワーク エンドポイント グループ(ゾーン)] を選択します。
[ネットワーク] で
lb-networkを選択します。[サブネット] で
backend-subnetを選択します。[ゾーン] で、[
ZONE_A] を選択します。[デフォルト ポート] に「
80」と入力します。[作成] をクリックします。
このセクションのすべての手順を繰り返して 2 番目のゾーン NEG を作成します。ただし、設定は次のように変更します。
- 名前:
zonal-neg-b - ゾーン:
ZONE_B
- 名前:
エンドポイントをゾーン NEG に追加する
Google Cloud コンソールで、[ネットワーク エンドポイント グループ] ページに移動します。
前の手順で作成したネットワーク エンドポイント グループの名前をクリックします(
zonal-neg-aなど)。[ネットワーク エンドポイント グループの詳細] ページの [このグループのネットワーク エンドポイント] セクションで、[ネットワーク エンドポイントを追加] をクリックします。
VM インスタンスを選択します(例:
vm-a1)。[ネットワーク インターフェース] に、VM 名、ゾーン、サブネットが表示されます。
- [IP アドレス] に、新しいネットワーク エンドポイントの IP アドレスを入力します。IP アドレスを取得するには、[nic0 のプライマリ IP アドレスとエイリアス IP 範囲を確認します] をクリックします。
- [ポートタイプ] で、[デフォルト] を選択します。エンドポイントは、ネットワーク エンドポイント グループのすべてのエンドポイントにデフォルト ポート
80を使用します。この例では、Apache サーバーがポート80でリクエストを配信しているため、これで十分です。 - [作成] をクリックします。
[ネットワーク エンドポイントを追加] をクリックします。2 番目の VM インスタンス
vm-a2を選択し、前の手順を繰り返してエンドポイントをzonal-neg-aに追加します。このセクションのすべての手順を繰り返して、
vm-b1とvm-b2のエンドポイントをzonal-neg-bに追加します。
gcloud
GCE_VM_IP_PORTエンドポイントを使用してZONE_Aゾーンにゾーン NEG を作成します。gcloud compute network-endpoint-groups create zonal-neg-a \ --network-endpoint-type=GCE_VM_IP_PORT \ --zone=ZONE_A \ --network=lb-network \ --subnet=backend-subnet次のステップで説明するように、NEG の作成時に
--default-portを指定するか、各エンドポイントのポート番号を指定します。エンドポイントをゾーン NEG に追加します。
gcloud compute network-endpoint-groups update zonal-neg-a \ --zone=ZONE_A \ --add-endpoint='instance=vm-a1,port=80' \ --add-endpoint='instance=vm-a2,port=80'GCE_VM_IP_PORTエンドポイントを使用してZONE_Bゾーンにゾーン NEG を作成します。gcloud compute network-endpoint-groups create zonal-neg-b \ --network-endpoint-type=GCE_VM_IP_PORT \ --zone=ZONE_B \ --network=lb-network \ --subnet=backend-subnet次のステップで説明するように、NEG の作成時に
--default-portを指定するか、各エンドポイントのポート番号を指定します。エンドポイントをゾーン NEG に追加します。
gcloud compute network-endpoint-groups update zonal-neg-b \ --zone=ZONE_B \ --add-endpoint='instance=vm-b1,port=80' \ --add-endpoint='instance=vm-b2,port=80'
ロードバランサを構成する
コンソール
構成を開始する
Google Cloud コンソールで、[ロード バランシング] ページに移動します。
- [ロードバランサを作成] をクリックします。
- [ロードバランサの種類] で [ネットワーク ロードバランサ(TCP / UDP / SSL)] を選択し、[次へ] をクリックします。
- [プロキシまたはパススルー] で [プロキシ ロードバランサ] を選択し、[次へ] をクリックします。
- [インターネット接続または内部] で [インターネット接続(外部)] を選択し、[次へ] をクリックします。
- [グローバルまたはシングル リージョンのデプロイ] で [リージョン ワークロードに最適] を選択し、[次へ] をクリックします。
- [構成] をクリックします。
基本構成
- [名前] に「
my-ext-tcp-lb」と入力します。 - [リージョン] で
REGION_Aを選択します。 - [ネットワーク] で
lb-networkを選択します。
プロキシ専用サブネットを予約する
- [サブネットを予約] をクリックします。
- [名前] に「
proxy-only-subnet」と入力します。 - [IP アドレス範囲] に「
10.129.0.0/23」と入力します。 - [追加] をクリックします。
バックエンドを構成する
- [バックエンドの構成] をクリックします。
- [バックエンド タイプ] リストで、[インターネット ネットワーク エンドポイント グループ] を選択します。
- [プロトコル] リストで [TCP] を選択します。
- ヘルスチェックを構成します。
- [ヘルスチェック] リストで [ヘルスチェックを作成] を選択します。
- [名前] フィールドに「
tcp-health-check」と入力します。 - [プロトコル] リストで [TCP] を選択します。
- [Port] フィールドに、「
80」と入力します。 - [作成] をクリックします。
- 最初のバックエンドを構成します。
- [新しいバックエンド] で、ゾーン NEG
zonal-neg-aを選択します。 - 残りのデフォルト値は変更せずに、[完了] をクリックします。
- [新しいバックエンド] で、ゾーン NEG
- 2 番目のバックエンドを構成します。
- [バックエンドを追加] をクリックします。
- [新しいバックエンド] で、インスタンス グループ
zonal-neg-bを選択します。 - 残りのデフォルト値は変更せずに、[完了] をクリックします。
- 残りのデフォルト値は変更せずに、[保存] をクリックします。
- Google Cloud コンソールで、[バックエンドの構成] の横にチェックマークが表示されていることを確認します。チェックマークがない場合は、すべての手順を完了したことを再度確認します。
フロントエンドを構成する
- [フロントエンドの構成] をクリックします。
- [名前] に「
ext-tcp-forwarding-rule」と入力します。 - [ネットワーク サービス ティア] で [スタンダード] を選択します。
- [IP アドレス] で [
ext-tcp-ip-address] を選択します。 - [ポート番号] に「
9090」と入力します。転送ルールは、宛先ポートが一致するパケットのみを転送します。 - PROXY プロトコルは Apache HTTP Server ソフトウェアでは動作しないため、[プロキシのプロトコル] で [オフ] を選択します。詳細については、PROXY プロトコルをご覧ください。
- [完了] をクリックします。
- Google Cloud コンソールで、[フロントエンドの構成] の横にチェックマークが表示されていることを確認します。チェックマークがない場合には、前のすべての手順を完了したことを再度確認します。
確認と完了
- [確認と完了] をクリックします。
- 設定を再度確認します。
- [作成] をクリックします。
gcloud
バックエンドのリージョン ヘルスチェックを作成します。
gcloud compute health-checks create tcp tcp-health-check \ --region=REGION_A \ --use-serving-portバックエンド サービスを作成します。
gcloud compute backend-services create external-tcp-proxy-bs \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=TCP \ --region=REGION_A \ --health-checks=tcp-health-check \ --health-checks-region=REGION_A
ZONE_Aゾーンのゾーン NEG をバックエンド サービスに追加します。gcloud compute backend-services add-backend external-tcp-proxy-bs \ --network-endpoint-group=zonal-neg-a \ --network-endpoint-group-zone=ZONE_A \ --balancing-mode=CONNECTION \ --max-connections-per-endpoint=50 \ --region=REGION_A
ZONE_Bゾーンのゾーン NEG をバックエンド サービスに追加します。gcloud compute backend-services add-backend external-tcp-proxy-bs \ --network-endpoint-group=zonal-neg-b \ --network-endpoint-group-zone=ZONE_B \ --balancing-mode=CONNECTION \ --max-connections-per-endpoint=50 \ --region=REGION_A
ターゲット TCP プロキシを作成します。
gcloud compute target-tcp-proxies create ext-tcp-target-proxy \ --backend-service=external-tcp-proxy-bs \ --region=REGION_A
転送ルールを作成します。
--portsには、1~65535 から単一のポート番号を指定します。この例では、ポート9090を使用します。転送ルールは、宛先ポートが一致するパケットのみを転送します。gcloud compute forwarding-rules create ext-tcp-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network=lb-network \ --network-tier=STANDARD \ --address=ext-tcp-ip-address \ --ports=9090 \ --region=REGION_A \ --target-tcp-proxy=ext-tcp-target-proxy \ --target-tcp-proxy-region=REGION_A
ロードバランサのテスト
ロードバランサを構成したので、ロードバランサの IP アドレスにトラフィックを送信してテストできるようになりました。
ロードバランサの IP アドレスを取得します。
IPv4 アドレスを取得するには、次のコマンドを実行します。
gcloud compute addresses describe ADDRESS_NAME
次のコマンドを実行して、トラフィックをロードバランサに送信します。
LB_IP_ADDRESSは、ロードバランサの IPv4 アドレスに置き換えます。curl -m1 LB_IP_ADDRESS:9090
次のステップ
- プロキシ ネットワーク ロードバランサを IPv6 に変換する
- 外部プロキシ ネットワーク ロードバランサの概要
- プロキシ ネットワーク ロードバランサのロギングとモニタリング
- Private Service Connect を追加する。
- ロードバランサの設定をクリーンアップする。