リージョン外部プロキシ ネットワーク ロードバランサは、プロキシベースのリージョン レイヤ 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:22
Google Cloud ヘルスチェックを許可する
fw-allow-health-check
ルールを作成します。この例では、ヘルスチェック プローブからのすべての 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=STANDARD
ADDRESS_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 10 (stretch) などの 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-template
ZONE_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
」と入力します。 - 最初のバックエンドを構成します。
- [新しいバックエンド] で、インスタンス グループ
mig-a
を選択します。 - [ポート番号] に「
80
」と入力します。 - 残りのデフォルト値は変更せずに、[完了] をクリックします。
- [新しいバックエンド] で、インスタンス グループ
- 2 番目のバックエンドを構成します。
- [バックエンドを追加] をクリックします。
- [新しいバックエンド] で、インスタンス グループ
mig-b
を選択します。 - [ポート番号] に「
80
」と入力します。 - 残りのデフォルト値は変更せずに、[完了] をクリックします。
- ヘルスチェックを構成します。
- [ヘルスチェック] で [ヘルスチェックを作成] を選択します。
- ヘルスチェックの名前を
tcp-health-check
に設定します。 - [プロトコル] で、[TCP] を選択します。
- [ポート] を
80
に設定します。
- 残りのデフォルト値は変更せずに、[保存] をクリックします。
- Google Cloud コンソールで、[バックエンドの構成] の横にチェックマークが表示されていることを確認します。チェックマークがない場合は、すべての手順を完了したことを再度確認します。
フロントエンドを構成する
- [フロントエンドの構成] をクリックします。
- [名前] に「
ext-reg-tcp-forwarding-rule
」と入力します。 - [サブネットワーク] で、[
backend-subnet
] を選択します。 - [IP アドレス] で、以前に予約した IP アドレスを選択します。 LB_IP_ADDRESS
- [ポート番号] に「
110
」と入力します。転送ルールは、宛先ポートが一致するパケットのみを転送します。 - PROXY プロトコルは Apache HTTP Server ソフトウェアでは動作しないため、[プロキシのプロトコル] で [オフ] を選択します。詳細については、PROXY プロトコルをご覧ください。
- [完了] をクリックします。
- Google Cloud Console で、[フロントエンドの構成] の横にチェックマークがあることを確認します。チェックマークがない場合には、前のすべてのステップが完了していることを再度確認してください。
確認と完了
- [確認と完了] をクリックします。
- ロードバランサの構成を確認します。
- 省略可: [同等のコード] をクリックして、ロードバランサの作成に使用する 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.8
gcloud 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=lb-network \ --subnet=backend-subnet \ --region=REGION_A \ --target-tcp-proxy=ext-reg-tcp-target-proxy \ --target-tcp-proxy-region=REGION_A \ --address=ext-reg-tcp-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 に変換する
- 外部プロキシ ネットワーク ロードバランサの概要
- プロキシ ネットワーク ロードバランサのロギングとモニタリング
- ロードバランサの設定をクリーンアップする。