ゾーン NEG バックエンドを使用してリージョン外部プロキシ ネットワーク ロードバランサを設定する

リージョン外部プロキシ ネットワーク ロードバランサは、プロキシベースのリージョン レイヤ 4 ロードバランサであり、外部リージョン IP アドレスの背後にある単一のリージョンで TCP サービス トラフィックを実行し、スケーリングできます。これらのロードバランサは、インターネットから同じリージョンのバックエンドに外部 TCP トラフィックを分散します。

このガイドでは、ゾーン ネットワーク エンドポイント グループ(NEG)バックエンドを使用してリージョン外部プロキシ ネットワーク ロードバランサを設定する手順について説明します。

始める前に、以下のドキュメントを確認してください。

この例では、ロードバランサを使用して、リージョン A の 2 つのゾーン NEG 内のバックエンド VM に TCP トラフィックを分散させます。この例のサービスは、ポート 80 で応答するように構成された Apache サーバーのセットです。

この例では、次の図に示すデプロイメントを構成します。

ゾーン NEG バックエンドを使用したリージョン外部プロキシ ネットワーク ロードバランサの構成例
ゾーン NEG バックエンドを使用したリージョン外部プロキシ ネットワーク ロードバランサの構成例

これはリージョン ロードバランサです。すべてのロードバランサ コンポーネント(バックエンド インスタンス グループ、バックエンド サービス、ターゲット プロキシ、転送ルール)は、同じリージョンに配置されている必要があります。

権限

このガイドに進むには、プロジェクト内でインスタンスを作成してネットワークを変更できる必要があります。そのためにはプロジェクトのオーナーまたは編集者であるか、または次の 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 を使用します。

バックエンドのネットワークとサブネットを作成する

コンソール

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. [VPC ネットワークを作成] をクリックします。

  3. [名前] に「lb-network」と入力します。

  4. [サブネット] セクションで、次の操作を行います。

    1. [サブネット作成モード] を [カスタム] に設定します。
    2. [新しいサブネット] セクションに、次の情報を入力します。
      • 名前: backend-subnet
      • リージョン: REGION_A
      • IP アドレス範囲: 10.1.2.0/24
    3. [完了] をクリックします。
  5. [作成] をクリックします。

gcloud

  1. カスタム VPC ネットワークを作成するには、gcloud compute networks create コマンドを使用します。

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. 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 コンソールを使用している場合は、しばらく待ってから、[ロード バランシング] ページでプロキシ専用サブネットを作成できます。

プロキシ専用サブネットを今すぐ作成する場合は、次の操作を行います。

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. 共有 VPC ネットワークの名前 lb-network をクリックします。

  3. [サブネットを追加] をクリックします。

  4. [名前] に「proxy-only-subnet」と入力します。

  5. [リージョン] で、REGION_A を選択します。

  6. [目的] を [リージョン マネージド プロキシ] に設定します。

  7. [IP アドレス範囲] に「10.129.0.0/23」と入力します。

  8. [追加] をクリックします。

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/2235.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 を識別させています。

コンソール

  1. Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。

    [ファイアウォール ポリシー] に移動

  2. [ファイアウォール ルールを作成] をクリックして、次のフィールドに入力します。

    • 名前: fw-allow-health-check
    • ネットワーク: lb-network
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: allow-health-check
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 130.211.0.0/2235.191.0.0/16
    • プロトコルとポート:
      • 指定されたプロトコルとポートを選択します。
      • [TCP] チェックボックスをオンにして、ポート番号に「80」と入力します。
  3. [作成] をクリックします。

  4. [ファイアウォール ルールを作成] をもう一度クリックして、受信 SSH 接続を許可するルールを作成します。

    • 名前: fw-allow-ssh
    • ネットワーク: lb-network
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: allow-ssh
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 0.0.0.0/0
    • プロトコルとポート:
      • 指定されたプロトコルとポートを選択します。
      • [TCP] チェックボックスをオンにして、ポート番号に「22」と入力します。
  5. [作成] をクリックします。

  6. [ファイアウォール ルールを作成] をもう一度クリックして、プロキシ専用サブネットから Google Cloud バックエンドへの受信接続を許可するルールを作成します。

    • 名前: fw-allow-proxy-only-subnet
    • ネットワーク: lb-network
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: allow-proxy-only-subnet
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 10.129.0.0/23
    • プロトコルとポート:
      • 指定されたプロトコルとポートを選択します。
      • [TCP] チェックボックスをオンにして、ポート番号に「80」と入力します。
  7. [作成] をクリックします。

gcloud

  1. 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
    
  2. ネットワーク タグ 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
    
  3. ロードバランサが 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 アドレスを予約する

コンソール

  1. Google Cloud コンソールで [静的アドレスの予約] ページに移動します。

    [静的アドレスの予約] に移動

  2. 新しいアドレスの名前を指定します。

  3. [ネットワーク サービス ティア] で [スタンダード] を選択します。

  4. [IP バージョン] で [IPv4] を選択します。IPv6 アドレスはサポートされません。

  5. [タイプ] で [リージョン] を選択します。

  6. [リージョン] で REGION_A を選択します。

  7. [接続先] オプションは [なし] のままにします。ロードバランサを作成すると、この IP アドレスがロードバランサの転送ルールに関連付けられます。

  8. [予約] をクリックして IP アドレスを予約します。

gcloud

  1. 静的外部 IP アドレスを予約するには、gcloud compute addresses create コマンドを使用します。

    gcloud compute addresses create ADDRESS_NAME  \
       --region=REGION_A \
       --network-tier=STANDARD
    

    ADDRESS_NAME は、このアドレスに付ける名前に置き換えます。

  2. 結果を表示するには、gcloud compute addresses describe コマンドを使用します。

    gcloud compute addresses describe ADDRESS_NAME
    

ゾーン NEG を設定する

リージョン A に GCE_VM_IP_PORT タイプのエンドポイントを含むゾーン NEG を設定します。まず、VM を作成してからゾーン NEG を作成し、VM のネットワーク エンドポイントを NEG に追加します。

VM を作成する

コンソール

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. [インスタンスを作成] をクリックします。

  3. [名前] を vm-a1 に設定します。

  4. [リージョン] で REGION_A を選択します。

  5. [ゾーン] で [ZONE_A] を選択します。

  6. [ブートディスク] セクションで、ブートディスク オプションに Debian オペレーティング システムと 10 (buster) バージョンが選択されていることを確認します。必要に応じてイメージを変更するには、[選択] をクリックします。

  7. [詳細オプション] をクリックします。

  8. [ネットワーキング] をクリックして次のフィールドを構成します。

    1. [ネットワーク タグ] に「allow-ssh」、「allow-health-check、「allow-proxy-only-subnet」を入力します。
    2. [ネットワーク インターフェース] で、次のように選択します。
      • ネットワーク: lb-network
      • サブネット: backend-subnet
  9. [管理] をクリックします。[起動スクリプト] フィールドに次のスクリプトを入力します。

    #! /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
    
  10. [作成] をクリックします。

  11. 上記の手順を繰り返して、さらに 3 台の VM を作成します。次の名前とゾーンの組み合わせを使用します。

    • 名前: vm-a2、ゾーン: ZONE_A
    • 名前: vm-b1、ゾーン: ZONE_B
    • 名前: vm-b2、ゾーン: ZONE_B

gcloud

VM を作成するには、gcloud compute instances create コマンドを 2 回使用します。VM_NAMEZONE には、次の組み合わせを使用します。スクリプトの内容は両方の VM で同じです。

  • VM_NAME: vm-a1ZONE: ZONE_A
  • VM_NAME: vm-a2ZONE: ZONE_A
  • VM_NAME: vm-b1ZONE: ZONE_B
  • VM_NAME: vm-b2ZONE: ZONE_B
 gcloud compute instances create VM_NAME \
     --zone=ZONE \
     --image-family=debian-10 \
     --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 を作成する

コンソール

ゾーン ネットワーク エンドポイント グループを作成する

  1. Google Cloud コンソールで、[ネットワーク エンドポイント グループ] ページに移動します。

    [ネットワーク エンドポイント グループ] に移動

  2. [ネットワーク エンドポイント グループを作成] をクリックします。

  3. [名前] に「zonal-neg-a」と入力します。

  4. [ネットワーク エンドポイント グループの種類] で、[ネットワーク エンドポイント グループ(ゾーン)] を選択します。

  5. [ネットワーク] で lb-network を選択します。

  6. [サブネット] で backend-subnet を選択します。

  7. [ゾーン] で [ZONE_A] を選択します。

  8. [デフォルト ポート] に「80」と入力します。

  9. [作成] をクリックします。

  10. このセクションのすべての手順を繰り返して 2 番目のゾーン NEG を作成します。ただし、設定は次のように変更します。

    • 名前: zonal-neg-b
    • ゾーン: ZONE_B

エンドポイントをゾーン NEG に追加する

  1. Google Cloud コンソールで、[ネットワーク エンドポイント グループ] ページに移動します。

    [ネットワーク エンドポイント グループ] に移動

  2. 前の手順で作成したネットワーク エンドポイント グループの名前をクリックします(zonal-neg-a など)。

  3. [ネットワーク エンドポイント グループの詳細] ページの [このグループのネットワーク エンドポイント] セクションで、[ネットワーク エンドポイントを追加] をクリックします。

  4. VM インスタンスを選択します(例: vm-a1)。

  5. [ネットワーク インターフェース] に、VM 名、ゾーン、サブネットが表示されます。

    1. [IP アドレス] に、新しいネットワーク エンドポイントの IP アドレスを入力します。IP アドレスを取得するには、[nic0 のプライマリ IP アドレスとエイリアス IP 範囲を確認します] をクリックします。
    2. [ポートタイプ] で、[デフォルト] を選択します。エンドポイントは、ネットワーク エンドポイント グループのすべてのエンドポイントにデフォルト ポート 80 を使用します。この例では、Apache サーバーがポート 80 でリクエストを配信しているため、これで十分です。
    3. [作成] をクリックします。
  6. [ネットワーク エンドポイントを追加] をクリックします。2 番目の VM インスタンス vm-a2 を選択し、前の手順を繰り返してエンドポイントを zonal-neg-a に追加します。

  7. このセクションのすべての手順を繰り返して、vm-b1vm-b2 のエンドポイントを zonal-neg-b に追加します。

gcloud

  1. 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 を指定するか、各エンドポイントのポート番号を指定します。

  2. エンドポイントをゾーン 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'
    
  3. 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 を指定するか、各エンドポイントのポート番号を指定します。

  4. エンドポイントをゾーン 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'
    

ロードバランサを構成する

コンソール

構成を開始する

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. [ロードバランサを作成] をクリックします。
  3. [ロードバランサの種類] で [ネットワーク ロードバランサ(TCP / UDP / SSL)] を選択し、[次へ] をクリックします。
  4. [プロキシまたはパススルー] で [プロキシ ロードバランサ] を選択し、[次へ] をクリックします。
  5. [インターネット接続または内部] で [インターネット接続(外部)] を選択し、[次へ] をクリックします。
  6. [グローバルまたはシングル リージョンのデプロイ] で [リージョン ワークロードに最適] を選択し、[次へ] をクリックします。
  7. [構成] をクリックします。

基本構成

  1. [名前] に「my-ext-tcp-lb」と入力します。
  2. [リージョン] で REGION_A を選択します。
  3. [ネットワーク] で lb-network を選択します。

プロキシ専用サブネットを予約する

  1. [サブネットを予約] をクリックします。
  2. [名前] に「proxy-only-subnet」と入力します。
  3. [IP アドレス範囲] に「10.129.0.0/23」と入力します。
  4. [追加] をクリックします。

バックエンドを構成する

  1. [バックエンドの構成] をクリックします。
  2. [バックエンド タイプ] で [インターネット ネットワーク エンドポイント グループ] を選択します。
  3. [プロトコル] で、[TCP] を選択します。
  4. 最初のバックエンドを構成します。
    1. [新しいバックエンド] で、ゾーン NEG zonal-neg-a を選択します。
    2. 残りのデフォルト値は変更せずに、[完了] をクリックします。
  5. 2 番目のバックエンドを構成します。
    1. [バックエンドを追加] をクリックします。
    2. [新しいバックエンド] で、インスタンス グループ zonal-neg-b を選択します。
    3. 残りのデフォルト値は変更せずに、[完了] をクリックします。
  6. ヘルスチェックを構成します。
    1. [ヘルスチェック] で [ヘルスチェックを作成] を選択します。
    2. ヘルスチェックの名前を tcp-health-check に設定します。
    3. [プロトコル] で、[TCP] を選択します。
    4. [ポート] に「80」と入力します。
  7. 残りのデフォルト値は変更せずに、[保存] をクリックします。
  8. Google Cloud コンソールで、[バックエンドの構成] の横にチェックマークが表示されていることを確認します。チェックマークがない場合は、すべての手順を完了したことを再度確認します。

フロントエンドを構成する

  1. [フロントエンドの構成] をクリックします。
  2. [名前] に「ext-tcp-forwarding-rule」と入力します。
  3. [サブネットワーク] で、[backend-subnet] を選択します。
  4. [IP アドレス] で [ext-tcp-ip-address] を選択します。
  5. [ポート番号] に「9090」と入力します。転送ルールは、宛先ポートが一致するパケットのみを転送します。
  6. PROXY プロトコルは Apache HTTP Server ソフトウェアでは動作しないため、[プロキシのプロトコル] で [オフ] を選択します。詳細については、PROXY プロトコルをご覧ください。
  7. [完了] をクリックします。
  8. Google Cloud Console で、[フロントエンドの構成] の横にチェックマークがあることを確認します。チェックマークがない場合には、前のすべてのステップが完了していることを再度確認してください。

確認と完了

  1. [確認と完了] をクリックします。
  2. 設定を再度確認します。
  3. [作成] をクリックします。

gcloud

  1. バックエンドのリージョン ヘルスチェックを作成します。

    gcloud compute health-checks create tcp tcp-health-check \
        --region=REGION_A \
        --use-serving-port
    
  2. バックエンド サービスを作成します。

    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
    
  3. 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
    
  4. 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
    
  5. ターゲット TCP プロキシを作成します。

    gcloud compute target-tcp-proxies create ext-tcp-target-proxy \
       --backend-service=external-tcp-proxy-bs \
       --region=REGION_A
    
  6. 転送ルールを作成します。--ports には、1~65535 から単一のポート番号を指定します。この例では、ポート 9090 を使用します。転送ルールは、宛先ポートが一致するパケットのみを転送します。

    gcloud compute forwarding-rules create ext-tcp-forwarding-rule \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --network=lb-network \
      --subnet=backend-subnet \
      --address=ext-tcp-ip-address \
      --ports=9090 \
      --region=REGION_A \
      --target-tcp-proxy=ext-tcp-target-proxy \
      --target-tcp-proxy-region=REGION_A
    

ロードバランサのテスト

ロードバランサを構成したので、ロードバランサの IP アドレスにトラフィックを送信してテストできるようになりました。

  1. ロードバランサの IP アドレスを取得します。

    IPv4 アドレスを取得するには、次のコマンドを実行します。

    gcloud compute addresses describe ADDRESS_NAME
    
  2. 次のコマンドを実行して、トラフィックをロードバランサに送信します。LB_IP_ADDRESS は、ロードバランサの IPv4 アドレスに置き換えます。

    curl -m1 LB_IP_ADDRESS:9090
    

次のステップ