リージョン外部プロキシ ネットワーク ロードバランサは、プロキシベースのリージョン レイヤ 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 インスタンスに適用される上り(内向き)ルール。ロードバランサと 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_A
VM_NAME
:vm-a2
、ZONE
:ZONE_A
VM_NAME
:vm-b1
、ZONE
:ZONE_B
VM_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] を選択します。
- 最初のバックエンドを構成します。
- [新しいバックエンド] で、ゾーン NEG
zonal-neg-a
を選択します。 - 残りのデフォルト値は変更せずに、[完了] をクリックします。
- [新しいバックエンド] で、ゾーン NEG
- 2 番目のバックエンドを構成します。
- [バックエンドを追加] をクリックします。
- [新しいバックエンド] で、インスタンス グループ
zonal-neg-b
を選択します。 - 残りのデフォルト値は変更せずに、[完了] をクリックします。
- ヘルスチェックを構成します。
- [ヘルスチェック] で [ヘルスチェックを作成] を選択します。
- ヘルスチェックの名前を
tcp-health-check
に設定します。 - [プロトコル] で、[TCP] を選択します。
- [ポート] に「
80
」と入力します。
- 残りのデフォルト値は変更せずに、[保存] をクリックします。
- 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 を追加する。
- ロードバランサの設定をクリーンアップする。