リージョン外部プロキシ ネットワーク ロードバランサは、プロキシベースのリージョン レイヤ 4 ロードバランサであり、外部リージョン IP アドレスの背後にある単一のリージョンで TCP サービス トラフィックを実行し、スケーリングできます。これらのロードバランサは、インターネットから同じリージョンのバックエンドに外部 TCP トラフィックを分散します。
このガイドでは、マネージド インスタンス グループ(MIG)バックエンドを使用してリージョン外部プロキシ ネットワーク ロードバランサを設定する手順について説明します。
開始する前に、外部プロキシ ネットワーク ロードバランサの概要をご覧ください。
この例では、ロードバランサを使用して、リージョン A の 2 つのゾーン マネージド インスタンス グループ内のバックエンド VM に TCP トラフィックを分散させます。この例のサービスは、ポート 110 で応答するように構成された Apache サーバーのセットです。多くのブラウザではポート 110 を使用できないため、テスト セクションでは curl を使用します。
この例では、次の図に示すデプロイメントを構成します。
リージョン外部プロキシ ネットワーク ロードバランサは、リージョン ロードバランサです。すべてのロードバランサ コンポーネント(バックエンド インスタンス グループ、バックエンド サービス、ターゲット プロキシ、転送ルール)は、同じリージョンに配置されている必要があります。
権限
このガイドに進むには、プロジェクト内でインスタンスを作成してネットワークを変更できる必要があります。そのためにはプロジェクトのオーナーまたは編集者であるか、または次の 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を使用します。プロキシのサブネット: リージョン B の
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-ssh。ロードバランスされたインスタンスに適用される上り(内向き)ルール。任意のアドレスから TCP ポート22への SSH 接続を許可します。このルールには、送信元 IP 範囲をより限定的に指定できます。たとえば、SSH セッションを開始するシステムの IP 範囲のみを許可するように指定できます。この例では、ターゲットタグallow-sshを使用しています。fw-allow-health-check。ロードバランスされているインスタンスに適用される上り(内向き)ルール。 Google Cloudヘルスチェック システム(130.211.0.0/22と35.191.0.0/16)からのすべての TCP トラフィックを許可します。この例では、ターゲットタグallow-health-checkを使用しています。fw-allow-proxy-only-subnet。バックエンドにプロキシ専用サブネットからの接続を許可する上り(内向き)ルール。
これらのファイアウォール ルールがない場合は、デフォルトの上り(内向き)拒否ルールによってバックエンド インスタンスへの受信トラフィックがブロックされます。
ターゲットタグは、バックエンド インスタンスを定義します。ターゲットタグがない場合、ファイアウォール ルールは VPC ネットワーク内のすべてのバックエンド インスタンスに適用されます。バックエンド VM を作成する場合は、マネージド インスタンス グループを作成するの説明に沿って、指定したターゲットタグを忘れずに含めてください。
コンソール
Google Cloud コンソールで、[ファイアウォール ポリシー] ページに移動します。
[ファイアウォール ルールを作成] をクリックして、SSH 接続の受信を許可するルールを作成します。次のフィールドに値を入力します。
- 名前:
fw-allow-ssh - ネットワーク:
lb-network - トラフィックの方向: 上り(内向き)
- 一致したときのアクション: 許可
- ターゲット: 指定されたターゲットタグ
- ターゲットタグ:
allow-ssh - ソースフィルタ: IPv4 の範囲
- 送信元 IPv4 範囲:
0.0.0.0/0 - プロトコルとポート:
- 指定されたプロトコルとポートを選択します。
- [TCP] チェックボックスをオンにして、ポート番号に「
22」と入力します。
- 名前:
[作成] をクリックします。
[ファイアウォール ルールを作成] をもう一度クリックして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」と入力します。
このルールは、ヘルスチェックに使用されているプロトコルとポートのみに制限することをおすすめします。プロトコルとポートに
tcp:80を使用すると、 Google Cloud は、ポート80で HTTP を使用して VM に接続できますが、ポート443で HTTPS を使用して VM に接続することはできません。
- 名前:
[作成] をクリックします。
[ファイアウォール ルールを作成] をもう一度クリックをして、ロードバランサのプロキシ サーバーがバックエンドに接続できるようにするルールを作成します。
- 名前:
fw-allow-proxy-only-subnet - ネットワーク:
lb-network - トラフィックの方向: 上り(内向き)
- 一致したときのアクション: 許可
- ターゲット: 指定されたターゲットタグ
- ターゲットタグ:
allow-proxy-only-subnet - ソースフィルタ: IPv4 の範囲
- 送信元 IPv4 範囲:
10.129.0.0/23 - プロトコルとポート:
- 指定されたプロトコルとポートを選択します。
- [TCP] チェックボックスをオンにして、ポート番号に「
80」と入力します。
- 名前:
[作成] をクリックします。
gcloud
ネットワーク タグ
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:22fw-allow-health-checkルールを作成して Google Cloudヘルスチェックを許可します。この例では、ヘルスチェック プローブからのすべての TCP トラフィックを許可します。ただし、必要に応じてポートの範囲を狭く構成することもできます。gcloud compute firewall-rules create fw-allow-health-check \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=allow-health-check \ --rules=tcp:80リージョンの Envoy プロキシがバックエンドに接続できるように
fw-allow-proxy-only-subnetルールを作成します。--source-rangesをプロキシ専用サブネットの割り振り範囲に設定します(この例では10.129.0.0/23)。gcloud compute firewall-rules create fw-allow-proxy-only-subnet \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=10.129.0.0/23 \ --target-tags=allow-proxy-only-subnet \ --rules=tcp:80
ロードバランサの IP アドレスを予約する
ロードバランサに静的 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=STANDARDADDRESS_NAMEは、このアドレスに付ける名前に置き換えます。結果を表示するには、
gcloud compute addresses describeコマンドを使用します。gcloud compute addresses describe ADDRESS_NAME
マネージド インスタンス グループを作成する
このセクションでは、ロードバランサのリージョン A に 2 つのマネージド インスタンス グループ(MIG)バックエンドを作成する方法について説明します。MIG は、この例のバックエンド Apache サーバーを実行する VM インスタンスを提供しています。通常、リージョン外部プロキシ ネットワーク ロードバランサは HTTP トラフィックには使用されませんが、Apache ソフトウェアはテストによく使用されます。
コンソール
インスタンス テンプレートを作成する
Google Cloud コンソールで、[インスタンス テンプレート] ページに移動します。
[インスタンス テンプレートを作成] をクリックします。
[名前] に「
ext-reg-tcp-proxy-backend-template」と入力します。[ブートディスク] が Debian GNU/Linux 12 (bookworm) などの Debian イメージに設定されていることを確認します。以降の手順では、
apt-getなどの Debian でのみ使用できるコマンドを使用します。[詳細オプション] をクリックします。
[ネットワーキング] をクリックして次のフィールドを構成します。
- [ネットワーク タグ] に、
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
[作成] をクリックします。
マネージド インスタンス グループを作成する
Google Cloud コンソールで、[インスタンス グループ] ページに移動します。
[インスタンス グループを作成] をクリックします。
[新しいマネージド インスタンス グループ(ステートレス)] を選択します。詳細については、ステートフル ディスクで MIG を作成するをご覧ください。
[名前] に「
mig-a」と入力します。[ロケーション] で [シングルゾーン] を選択します。
[リージョン] で、
REGION_Aを選択します。[ゾーン] で、[
ZONE_A] を選択します。[インスタンス テンプレート] で [
ext-reg-tcp-proxy-backend-template] を選択します。グループ内に作成するインスタンスの数を指定します。
この例では、[自動スケーリング] で次のオプションを指定します。
- [自動スケーリング モード] で [
Off:do not autoscale] を選択します。 - [インスタンスの最大数] に「
2」と入力します。
- [自動スケーリング モード] で [
[ポート マッピング] で、[ポートを追加] をクリックします。
- [ポート名] に「
tcp80」と入力します。 - [ポート番号] に「
80」と入力します。
- [ポート名] に「
[作成] をクリックします。
2 番目のマネージド インスタンス グループを作成するには、マネージド インスタンス グループを作成するの手順を繰り返して、次の設定を使用します。
- 名前:
mig-b - ゾーン:
ZONE_B
その他のすべての設定は同じままにします。
- 名前:
gcloud
このガイドの Google Cloud CLI の手順は、Cloud Shell を使用するか、bash がインストールされている別の環境を使用していることを前提としています。
HTTP サーバーで VM インスタンス テンプレートを作成するには、
gcloud compute instance-templates createコマンドを使用します。gcloud compute instance-templates create ext-reg-tcp-proxy-backend-template \ --region=REGION_A \ --network=lb-network \ --subnet=backend-subnet \ --tags=allow-ssh,allow-health-check,allow-proxy-only-subnet \ --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'ZONE_Aゾーンにマネージド インスタンス グループを作成します。gcloud compute instance-groups managed create mig-a \ --zone=ZONE_A \ --size=2 \ --template=ext-reg-tcp-proxy-backend-templateZONE_Bゾーンにマネージド インスタンス グループを作成します。gcloud compute instance-groups managed create mig-b \ --zone=ZONE_B \ --size=2 \ --template=ext-reg-tcp-proxy-backend-template
ロードバランサを構成する
コンソール
構成を開始する
Google Cloud コンソールで、[ロード バランシング] ページに移動します。
- [ロードバランサを作成] をクリックします。
- [ロードバランサの種類] で [ネットワーク ロードバランサ(TCP / UDP / SSL)] を選択し、[次へ] をクリックします。
- [プロキシまたはパススルー] で [プロキシ ロードバランサ] を選択し、[次へ] をクリックします。
- [インターネット接続または内部] で [インターネット接続(外部)] を選択し、[次へ] をクリックします。
- [グローバルまたはシングル リージョンのデプロイ] で [リージョン ワークロードに最適] を選択し、[次へ] をクリックします。
- [構成] をクリックします。
基本構成
- [名前] に「
my-ext-tcp-lb」と入力します。 - [リージョン] で
REGION_Aを選択します。 - [ネットワーク] で
lb-networkを選択します。
プロキシ専用サブネットを予約する
- [予約] をクリックします。
- [名前] フィールドに「
proxy-only-subnet」と入力します。 - [IP アドレス範囲] フィールドに「
10.129.0.0/23」と入力します。 - [追加] をクリックします。
バックエンドを構成する
- [バックエンドの構成] をクリックします。
- [バックエンド タイプ] リストで、[インスタンス グループ] を選択します。
- [プロトコル] リストで [TCP] を選択します。
- [名前付きポート] フィールドに「
tcp80」と入力します。 - ヘルスチェックを構成します。
- [ヘルスチェック] リストで [ヘルスチェックを作成] を選択します。
- [名前] フィールドに「
tcp-health-check」と入力します。 - [プロトコル] リストで [TCP] を選択します。
- [ポート] フィールドに「
80」と入力します。 - [作成] をクリックします。
- 最初のバックエンドを構成します。
- [新しいバックエンド] で、インスタンス グループ
mig-aを選択します。 - [ポート番号] に「
80」と入力します。 - 残りのデフォルト値は変更せずに、[完了] をクリックします。
- [新しいバックエンド] で、インスタンス グループ
- 2 番目のバックエンドを構成します。
- [バックエンドを追加] をクリックします。
- [新しいバックエンド] で、インスタンス グループ
mig-bを選択します。 - [ポート番号] に「
80」と入力します。 - 残りのデフォルト値は変更せずに、[完了] をクリックします。
- 残りのデフォルト値は変更せずに、[保存] をクリックします。
- Google Cloud コンソールで、[バックエンドの構成] の横にチェックマークが表示されていることを確認します。チェックマークがない場合は、すべての手順を完了したことを再度確認します。
フロントエンドを構成する
- [フロントエンドの構成] をクリックします。
- [名前] に「
ext-reg-tcp-forwarding-rule」と入力します。 - [ネットワーク サービス ティア] で [スタンダード] を選択します。
- [IP アドレス] で、以前に予約した IP アドレスを選択します。 LB_IP_ADDRESS
- [ポート番号] に「
110」と入力します。転送ルールは、宛先ポートが一致するパケットのみを転送します。 - PROXY プロトコルは Apache HTTP Server ソフトウェアでは動作しないため、[プロキシのプロトコル] で [オフ] を選択します。詳細については、PROXY プロトコルをご覧ください。
- [完了] をクリックします。
- Google Cloud コンソールで、[フロントエンドの構成] の横にチェックマークが表示されていることを確認します。チェックマークがない場合には、前のすべての手順を完了したことを再度確認します。
確認と完了
- [確認と完了] をクリックします。
- ロードバランサの構成を確認します。
- 省略可: [同等のコード] をクリックして、ロードバランサの作成に使用する REST API リクエストを表示します。
- [作成] をクリックします。
gcloud
リージョン ヘルスチェックを作成します。
gcloud compute health-checks create tcp tcp-health-check \ --region=REGION_A \ --use-serving-portバックエンド サービスを作成します。
gcloud compute backend-services create ext-reg-tcp-proxy-bs \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=TCP \ --port-name=tcp80 \ --region=REGION_A \ --health-checks=tcp-health-check \ --health-checks-region=REGION_Aバックエンド サービスにインスタンス グループを追加します。
gcloud compute backend-services add-backend ext-reg-tcp-proxy-bs \ --region=REGION_A \ --instance-group=mig-a \ --instance-group-zone=ZONE_A \ --balancing-mode=UTILIZATION \ --max-utilization=0.8gcloud compute backend-services add-backend ext-reg-tcp-proxy-bs \ --region=REGION_A \ --instance-group=mig-b \ --instance-group-zone=ZONE_B \ --balancing-mode=UTILIZATION \ --max-utilization=0.8ターゲット TCP プロキシを作成します。
gcloud compute target-tcp-proxies create ext-reg-tcp-target-proxy \ --backend-service=ext-reg-tcp-proxy-bs \ --proxy-header=NONE \ --region=REGION_Aプロキシ ヘッダーをオンにする場合は、
NONEではなくPROXY_V1に設定します。PROXY プロトコルは Apache HTTP Server ソフトウェアでは動作しないため、この例では有効にしないでください。詳細については、PROXY プロトコルをご覧ください。転送ルールを作成します。
--portsには、1~65535 から単一のポート番号を指定します。この例では、ポート110を使用します。転送ルールは、宛先ポートが一致するパケットのみを転送します。gcloud compute forwarding-rules create ext-reg-tcp-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=STANDARD \ --network=lb-network \ --region=REGION_A \ --target-tcp-proxy=ext-reg-tcp-target-proxy \ --target-tcp-proxy-region=REGION_A \ --address=LB_IP_ADDRESS \ --ports=110
ロードバランサをテストする
ロードバランサを構成したので、ロードバランサの IP アドレスにトラフィックを送信してテストできるようになりました。
ロードバランサの IP アドレスを取得します。
IPv4 アドレスを取得するには、次のコマンドを実行します。
gcloud compute addresses describe ADDRESS_NAME
次のコマンドを実行して、トラフィックをロードバランサに送信します。
LB_IP_ADDRESSは、ロードバランサの IPv4 アドレスに置き換えます。curl -m1 LB_IP_ADDRESS:9090
追加の構成オプション
このセクションでは、代替および追加の構成オプションを提供する構成例を示します。これらのタスクはすべて省略可です。また、任意の順序で行うことができます。
セッション アフィニティを有効にする
構成例では、バックエンド サービスをセッション アフィニティなしで作成しています。
これらの手順は、バックエンド サービスがクライアント IP アフィニティまたは生成された Cookie アフィニティを使用するように、サンプルのロードバランサのバックエンド サービスを更新する方法を示しています。
クライアント IP アフィニティが有効になっている場合、ロードバランサは、クライアントの IP アドレスとロードバランサの IP アドレス(内部転送ルールの内部 IP アドレス)から作成されたハッシュに基づいて、特定のクライアントのリクエストを同じバックエンド VM に送信します。
クライアント IP セッション アフィニティを有効にするには、次の手順を完了します。
コンソール
Google Cloud コンソールで、[ロード バランシング] ページに移動します。
[バックエンド] をクリックします。
ext-reg-tcp-proxy-bs(この例で作成したバックエンド サービスの名前)をクリックして、[編集] をクリックします。[バックエンド サービスの詳細] ページで、[詳細構成] をクリックします。
[セッション アフィニティ] で [クライアント IP] を選択します。
[更新] をクリックします。
gcloud
ext-reg-tcp-proxy-bs バックエンド サービスを更新してクライアント IP セッション アフィニティを指定するには、gcloud compute backend-services update ext-reg-tcp-proxy-bs コマンドを使用します。
gcloud compute backend-services update ext-reg-tcp-proxy-bs \
--region=REGION_A \
--session-affinity=CLIENT_IP
次のステップ
- プロキシ ネットワーク ロードバランサを IPv6 に変換する
- 外部プロキシ ネットワーク ロードバランサの概要
- プロキシ ネットワーク ロードバランサのロギングとモニタリング
- ロードバランサの設定をクリーンアップする。