リージョン内部プロキシ ネットワーク ロードバランサは、プロキシベースのリージョン レイヤ 4 ロードバランサです。これにより、同じ VPC ネットワーク内のクライアントまたは VPC ネットワークに接続されているクライアントのみがアクセスできる内部 IP アドレスの背後で TCP サービス トラフィックを実行し、スケールできます。
このガイドでは、ゾーン ネットワーク エンドポイント グループ(NEG)バックエンドを使用してリージョン内部プロキシ ネットワーク ロードバランサを設定する手順について説明します。始める前に
- リージョン内部プロキシ ネットワーク ロードバランサの概要を確認する
- ゾーン NEG の概要を確認する
概要
この例では、ロードバランサを使用して、REGION_A
リージョンの 2 つのゾーン NEG 内のバックエンド VM に TCP トラフィックを分散させます。この例のサービスは、ポート 80
で応答するように構成された Apache サーバーのセットです。
この例では、以下のデプロイを構成します。
リージョン内部プロキシのネットワーク ロードバランサは、リージョン ロードバランサです。すべてのロードバランサ コンポーネント(バックエンド インスタンス グループ、バックエンド サービス、ターゲット プロキシ、転送ルール)は、同じリージョンに配置されている必要があります。
権限
このガイドに進むには、プロジェクト内でインスタンスを作成してネットワークを変更できる必要があります。そのためにはプロジェクトのオーナーまたは編集者であるか、または次の Compute Engine IAM のロールをすべて持っている必要があります。
タスク | 必要なロール |
---|---|
ネットワーク、サブネット、ロードバランサ コンポーネントの作成 | ネットワーク管理者 |
ファイアウォール ルールの追加と削除 | セキュリティ管理者 |
インスタンスの作成 | Compute インスタンス管理者 |
詳細については、次のガイドをご覧ください。
ネットワークとサブネットを構成する
ロードバランサのバックエンド用とロードバランサのプロキシ用の 2 つのサブネットが存在する VPC ネットワークが必要です。リージョン内部プロキシ ネットワーク ロードバランサはリージョン リソースです。VPC ネットワーク内のトラフィックは、送信元がロードバランサと同じリージョンのサブネット内にある場合、ロードバランサに転送されます。
この例では、次の VPC ネットワーク、リージョン、サブネットを使用します。
ネットワーク。ネットワークは、
lb-network
という名前のカスタムモードの VPC ネットワークです。バックエンドのサブネット。
REGION_A
リージョンのbackend-subnet
という名前のサブネット。プライマリ IP 範囲として10.1.2.0/24
を使用します。プロキシのサブネット。
REGION_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
gcloud compute networks create
コマンドを使用してカスタム VPC ネットワークを作成します。gcloud compute networks create lb-network --subnet-mode=custom
gcloud compute networks subnets create
コマンドを使用して、REGION_A
リージョンのlb-network
ネットワークにサブネットを作成します。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 ネットワークの REGION_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-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 アドレスを予約する
ロードバランサに静的内部 IP アドレスを予約するには、新しい静的内部 IPv4 または IPv6 アドレスを予約するをご覧ください。
ゾーン NEG を設定する
REGION_A
リージョンにゾーン NEG を設定します(GCE_VM_IP_PORT
タイプのエンドポイントを含む)。まず、VM を作成します。次に、ゾーン NEG を作成し、VM のネットワーク エンドポイントを NEG に追加します。
VM を作成する
コンソール
Google Cloud コンソールで [VM インスタンス] ページに移動します。
[インスタンスを作成] をクリックします。
[名前] を
vm-a1
に設定します。[リージョン] で
REGION_A
を選択します。ゾーンについては、
ZONE_A1
をご覧ください。[ブートディスク] セクションで、ブートディスク オプションとして 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_A1
- 名前:
vm-c1
、ゾーン:ZONE_A2
- 名前:
vm-c2
、ゾーン:ZONE_A2
- 名前:
gcloud
VM_NAME と ZONE の組み合わせを使用して、次のコマンドを 2 回実行して VM を作成します。スクリプトの内容は両方の VM で同じです。
- VM_NAME:
vm-a1
、ZONE:ZONE_A1
- VM_NAME:
vm-a2
、ZONE:ZONE_A1
- VM_NAME:
vm-c1
、ZONE:ZONE_A2
VM_NAME:
vm-c2
、ZONE:ZONE_A2
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_A1
] を選択します。[デフォルト ポート] で「
80
」と入力します。[作成] をクリックします。
このセクションのすべての手順を繰り返して 2 番目のゾーン NEG を作成します。ただし、設定は次のように変更します。
- 名前:
zonal-neg-c
- ゾーン:
ZONE_A2
- 名前:
エンドポイントをゾーン NEG に追加します。
Google Cloud コンソールで、[ネットワーク エンドポイント グループ] ページに移動します。
前の手順で作成したネットワーク エンドポイント グループの名前(たとえば
zonal-neg-a
)をクリックします。[ネットワーク エンドポイント グループの詳細] ページが表示されます。[このグループのネットワーク エンドポイント] セクションで [ネットワーク エンドポイントを追加] をクリックします。[ネットワーク エンドポイントの追加] ページが表示されます。
VM インスタンス(たとえば
vm-a1
)を選択します。[ネットワーク インターフェース] セクションに、VM 名、ゾーン、サブネットが表示されます。- 新しいネットワーク エンドポイントの IP アドレスを入力します。IP アドレスを確認するには、[「nic0」のプライマリ IP アドレスとエイリアス IP 範囲を確認します] をクリックします。
- [ポートタイプ] で [デフォルト] を選択します。エンドポイントは、ネットワーク エンドポイント グループのすべてのエンドポイントにデフォルト ポート
80
を使用します。この例では、Apache サーバーがポート80
でリクエストを配信しているため、これで十分です。 - [作成] をクリックします。
もう一度 [ネットワーク エンドポイントを追加] をクリックします。2 番目の VM インスタンス
vm-a2
を選択し、これらの手順を繰り返してエンドポイントをzonal-neg-a
に追加します。このセクションのすべての手順を繰り返して、
vm-c1
とvm-c2
のエンドポイントをzonal-neg-c
に追加します。
gcloud
GCE_VM_IP_PORT
エンドポイントを使用してZONE_A1
ゾーンにゾーン NEG を作成します。gcloud compute network-endpoint-groups create zonal-neg-a \ --network-endpoint-type=GCE_VM_IP_PORT \ --zone=ZONE_A1 \ --network=lb-network \ --subnet=backend-subnet
次のステップで説明するように、NEG の作成時に
--default-port
を指定するか、各エンドポイントのポート番号を指定します。エンドポイントをゾーン NEG に追加します。
gcloud compute network-endpoint-groups update zonal-neg-a \ --zone=ZONE_A1 \ --add-endpoint='instance=vm-a1,port=80' \ --add-endpoint='instance=vm-a2,port=80'
GCE_VM_IP_PORT
エンドポイントを使用してZONE_A2
ゾーンにゾーン NEG を作成します。gcloud compute network-endpoint-groups create zonal-neg-c \ --network-endpoint-type=GCE_VM_IP_PORT \ --zone=ZONE_A2 \ --network=lb-network \ --subnet=backend-subnet
次のステップで説明するように、NEG の作成時に
--default-port
を指定するか、各エンドポイントのポート番号を指定します。エンドポイントをゾーン NEG に追加します。
gcloud compute network-endpoint-groups update zonal-neg-c \ --zone=ZONE_A2 \ --add-endpoint='instance=vm-c1,port=80' \ --add-endpoint='instance=vm-c2,port=80'
ロードバランサを構成する
コンソール
構成を開始する
Google Cloud コンソールで、[ロード バランシング] ページに移動します。
- [ロードバランサを作成] をクリックします。
- [ロードバランサの種類] で [ネットワーク ロードバランサ(TCP / UDP / SSL)] を選択し、[次へ] をクリックします。
- [プロキシまたはパススルー] で [プロキシ ロードバランサ] を選択し、[次へ] をクリックします。
- [インターネット接続または内部] で [内部] を選択し、[次へ] をクリックします。
- [クロスリージョンまたはシングル リージョンのデプロイ] で [リージョン ワークロードに最適] を選択し、[次へ] をクリックします。
- [構成] をクリックします。
基本構成
- [名前] に「
my-int-tcp-lb
」と入力します。 - [リージョン] で
REGION_A
を選択します。 - [ネットワーク] で
lb-network
を選択します。
プロキシ専用サブネットを予約する
プロキシ専用サブネットを予約するには:
- [サブネットを予約] をクリックします。
- [名前] に「
proxy-only-subnet
」と入力します。 - [IP アドレス範囲] に「
10.129.0.0/23
」と入力します。 - [追加] をクリックします。
バックエンドの構成
- [バックエンドの構成] をクリックします。
- [バックエンド タイプ] で [インターネット ネットワーク エンドポイント グループ] を選択します。
- [プロトコル] で、[TCP] を選択します。
- 最初のバックエンドを構成します。
- [新しいバックエンド] で、ゾーン NEG
zonal-neg-a
を選択します。 - 残りのデフォルト値は変更せずに、[完了] をクリックします。
- [新しいバックエンド] で、ゾーン NEG
- 2 番目のバックエンドを構成します。
- [ADD BACKEND] をクリックします。
- [新しいバックエンド] で、インスタンス グループ
zonal-neg-c
を選択します。 - 残りのデフォルト値は変更せずに、[完了] をクリックします。
- ヘルスチェックを構成します。
- [ヘルスチェック] で [ヘルスチェックを作成] を選択します。
- ヘルスチェックの名前を
tcp-health-check
に設定します。 - [プロトコル] で、[TCP] を選択します。
- [ポート] に「
80
」と入力します。
- 残りのデフォルト値は変更せずに、[保存] をクリックします。
- Google Cloud コンソールで、[バックエンドの構成] の横にチェックマークが表示されていることを確認します。チェックマークがない場合は、すべての手順を完了したことを再度確認します。
フロントエンドの構成
- [フロントエンドの構成] をクリックします。
- [名前] に「
int-tcp-forwarding-rule
」と入力します。 - [サブネットワーク] で [backend-subnet] を選択します。
- [IP アドレス] で [int-tcp-ip-address] を選択します。
- [ポート番号] に「
9090
」と入力します。転送ルールは、宛先ポートが一致するパケットのみを転送します。 - [プロキシのプロトコル] は Apache HTTP Server ソフトウェアでは動作しないため、この例では有効にしないでください。詳細については、プロキシのプロトコルをご覧ください。
- [完了] をクリックします。
- Google Cloud コンソールで、[フロントエンドの構成] の横にチェックマークがあることを確認します。チェックマークがない場合には、前のすべてのステップが完了していることを再度確認してください。
確認と完了
- [確認と完了] をクリックします。
- 設定を再度確認します。
- [作成] をクリックします。
gcloud
バックエンドのリージョン ヘルスチェックを作成します。
gcloud compute health-checks create tcp tcp-health-check \ --region=REGION_A \ --use-serving-port
バックエンド サービスを作成します。
gcloud compute backend-services create internal-tcp-proxy-bs \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=TCP \ --region=REGION_A \ --health-checks=tcp-health-check \ --health-checks-region=REGION_A
ZONE_A1
ゾーンのゾーン NEG をバックエンド サービスに追加します。gcloud compute backend-services add-backend internal-tcp-proxy-bs \ --network-endpoint-group=zonal-neg-a \ --network-endpoint-group-zone=ZONE_A1 \ --balancing-mode=CONNECTION \ --max-connections-per-endpoint=50 \ --region=REGION_A
ZONE_A2
ゾーンのゾーン NEG をバックエンド サービスに追加します。gcloud compute backend-services add-backend internal-tcp-proxy-bs \ --network-endpoint-group=zonal-neg-c \ --network-endpoint-group-zone=ZONE_A2 \ --balancing-mode=CONNECTION \ --max-connections-per-endpoint=50 \ --region=REGION_A
ターゲット TCP プロキシを作成します。
gcloud compute target-tcp-proxies create int-tcp-target-proxy \ --backend-service=internal-tcp-proxy-bs \ --region=REGION_A
転送ルールを作成します。
--ports
には、1~65535 から単一のポート番号を指定します。この例では、ポート9090
を使用します。転送ルールは、宛先ポートが一致するパケットのみを転送します。gcloud compute forwarding-rules create int-tcp-forwarding-rule \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=backend-subnet \ --address=int-tcp-ip-address \ --ports=9090 \ --region=REGION_A \ --target-tcp-proxy=int-tcp-target-proxy \ --target-tcp-proxy-region=REGION_A
ロードバランサをテストする
ロードバランサをテストするには、ロードバランサと同じリージョンにクライアント VM を作成します。次に、クライアントからロードバランサにトラフィックを送信します。
クライアント VM を作成する
ロードバランサと同じリージョンにクライアント VM(client-vm
)を作成します。
コンソール
Google Cloud コンソールで [VM インスタンス] ページに移動します。
[インスタンスを作成] をクリックします。
[名前] を
client-vm
に設定します。[ゾーン] を
ZONE_A1
に設定します。[詳細オプション] をクリックします。
[ネットワーキング] をクリックして次のフィールドを構成します。
- [ネットワーク タグ] に「
allow-ssh
」と入力します。 - [ネットワーク インターフェース] で、次のように選択します。
- ネットワーク:
lb-network
- サブネット:
backend-subnet
- ネットワーク:
- [ネットワーク タグ] に「
[作成] をクリックします。
gcloud
クライアント VM は、ロードバランサと同じ VPC ネットワークとリージョンに存在する必要があります。同じサブネットまたはゾーンに存在する必要はありません。クライアントは、バックエンド VM と同じサブネットを使用します。
gcloud compute instances create client-vm \ --zone=ZONE_A1 \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh \ --subnet=backend-subnet
ロードバランサにトラフィックを送信する
ロードバランサを構成したので、ロードバランサの IP アドレスにトラフィックを送信してテストできるようになりました。
SSH を使用してクライアント インスタンスに接続します。
gcloud compute ssh client-vm \ --zone=ZONE_A1
ロードバランサがバックエンドのホスト名を想定どおりに処理していることを確認します。
ロードバランサの IP アドレスを表示するには、
compute addresses describe
コマンドを使用します。gcloud compute addresses describe int-tcp-ip-address \ --region=REGION_A
IP アドレスをメモしておきます。
ロードバランサにトラフィックを送信します。IP_ADDRESS は、ロードバランサの IP アドレスに置き換えます。
curl IP_ADDRESS:9090
次のステップ
- プロキシ ネットワーク ロードバランサを IPv6 に変換する
- リージョン内部プロキシ ネットワーク ロードバランサの概要
- リージョン内部プロキシ ネットワーク ロードバランサのモニタリングを設定する。モニタリングの使用をご覧ください。
- ロードバランサの設定をクリーンアップする。