VM インスタンス グループのバックエンドを使用して従来のプロキシ ネットワーク ロードバランサ(SSL プロキシ)を設定する

このドキュメントでは、ターゲット SSL プロキシと VM インスタンス グループのバックエンドを使用して従来のプロキシ ネットワーク ロードバランサを設定する方法について説明します。始める前に、外部プロキシ ネットワーク ロードバランサの概要でこれらのロードバランサの仕組みを確認してください。

設定の概要

この例では、リージョン A とリージョン B の 2 つのリージョンに存在するサービスに外部プロキシ ネットワーク ロードバランサを設定する方法を示しています。次の要素を構成します。

  1. 2 つのリージョンに分散している 4 つのインスタンス
  2. インスタンスを保持するインスタンス グループ
  3. バックエンド コンポーネント。次のものが含まれます。
    • ヘルスチェック - インスタンスの正常性をモニタリングします。
    • バックエンド サービス - インスタンス グループをモニタリングし、構成された使用量を超過するのを防止します。
    • バックエンド - インスタンス グループを保持します。
  4. フロントエンド コンポーネント。次のものが含まれます。
    • SSL 証明書のリソース独自の SSL 証明書を指定するセルフマネージド証明書、またはすべてのドメインに有効な Google が発行する Google マネージド証明書を使用できます。詳しくは、SSL 証明書のタイプをご覧ください。
    • SSL 証明書を使用する SSL プロキシ自体
    • ユーザーのトラフィックをプロキシに送信する外部静的 IPv4 アドレスと転送ルール
    • ユーザーのトラフィックをプロキシに送信する外部静的 IPv6 アドレスと転送ルール
  5. ロードバランサおよびヘルス チェッカーからインスタンスへのトラフィックを許可するファイアウォール ルール
  6. SSL ポリシー(省略可)。SSL プロキシのロードバランサとクライアント間でネゴシエートされる SSL の機能を制御します。

構成が完了したら、その構成をテストします。

権限

このガイドに進むには、プロジェクト内でインスタンスを作成してネットワークを変更できる必要があります。そのためにはプロジェクトのオーナーまたは編集者であるか、または次の Compute Engine IAM のロールをすべて持っている必要があります。

タスク 必要なロール
ネットワーク、サブネット、ロードバランサ コンポーネントの作成 ネットワーク管理者
ファイアウォール ルールの追加と削除 セキュリティ管理者
インスタンスの作成 Compute インスタンス管理者

詳細については、次のガイドをご覧ください。

ネットワークとサブネットを構成する

サンプルのネットワークとサブネットを作成する手順は次のとおりです。

コンソール

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

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

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

  3. ネットワークの名前を入力します。

  4. [サブネット作成モード] で [カスタム] を選択します。

  5. [新しいサブネット] セクションで、サブネットに次の構成パラメータを指定します。

    1. [名前] フィールドに、サブネットの名前を入力します。
    2. [リージョン] フィールドにリージョン名を入力します。
    3. [IP スタックタイプ] で [IPv4(シングルスタック)] を選択します。
    4. [IP アドレス範囲] フィールドに IP アドレス範囲を入力します。これはサブネットのプライマリ IPv4 範囲です。
  6. [完了] をクリックします。

  7. 別のリージョンにサブネットを追加するには、[サブネットを追加] をクリックして、前の手順を繰り返します。

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

gcloud

gcloud compute networks subnets update SUBNET \
    --network=NETWORK \
    --stack-type=IPV4_ONLY \
    --range=10.1.2.0/24 \
    --region=REGION_A

次のように置き換えます。

  • NETWORK: VPC ネットワークの名前

  • SUBNET: サブネットの名前

  • REGION_A: リージョンの名前

インスタンスとインスタンス グループの構成

このセクションでは、インスタンスおよびインスタンス グループを作成し、インスタンス グループにインスタンスを追加する方法を説明します。本番環境システムであれば、通常はインスタンス テンプレートに基づくマネージド インスタンス グループが使用されますが、初期テストを行う場合にはこの設定を使用した方が迅速に行えます。

インスタンスを作成する

これらのインスタンスを作成する際にタグ ssl-lb を指定してください。タグは、後でファイアウォール ルールを定義するときに使用します。

Console

インスタンスの作成

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

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

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

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

  4. [ゾーン] を ZONE_A に設定します。

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

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

    • [ネットワーク タグ] フィールドに「ssl-lb」と「allow-health-check-ipv6」を入力します。
  7. [ネットワーク インターフェース] セクションで、[編集] をクリックして、次の変更を行います。

    • ネットワークを選択します。
    • サブネットを選択します。

    • [完了] をクリックします。

  8. [管理] をクリックします。[起動スクリプト] フィールドに次のスクリプトを入力します。

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>vm-a1</h1></body></html>' | sudo tee /var/www/html/index.html
  9. 残りのフィールドはデフォルト値のままにします。

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

  11. 同じ設定で vm-a2 を作成します。ただし、[起動スクリプト] は次のように設定します。

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>vm-a2</h1></body></html>' | sudo tee /var/www/html/index.html
  12. 同じ設定で vm-b1 を作成します。ただし、[ゾーン] には ZONE_B を設定し、[起動スクリプト] は次のように設定します。

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>vm-b1</h1></body></html>' | sudo tee /var/www/html/index.html
  13. 同じ設定で vm-b2 を作成します。ただし、[ゾーン] には ZONE_B を設定し、[起動スクリプト] は次のように設定します。

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>vm-b2</h1></body></html>' | sudo tee /var/www/html/index.html

gcloud

  1. ゾーン ZONE_Avm-a1 を作成します。

    gcloud compute instances create vm-a1 \
       --image-family debian-12 \
       --image-project debian-cloud \
       --tags ssl-lb \
       --zone ZONE_A \
       --metadata startup-script="#! /bin/bash
         sudo apt-get update
         sudo apt-get install apache2 -y
         sudo a2ensite default-ssl
         sudo a2enmod ssl
         sudo service apache2 restart
         echo '<!doctype html><html><body><h1>vm-a1</h1></body></html>' | sudo tee /var/www/html/index.html
         EOF"
    
  2. ゾーン ZONE_Avm-a2 を作成します。

    gcloud compute instances create vm-a2 \
      --image-family=debian-12 \
      --image-project=debian-cloud \
      --tags=ssl-lb \
      --zone=ZONE_A \
      --metadata=startup-script="#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>vm-a2</h1></body></html>' | sudo tee /var/www/html/index.html
         EOF"
    
  3. ゾーン ZONE_Bvm-b1 を作成します。

    gcloud compute instances create vm-b1 \
      --image-family=debian-12 \
      --image-project=debian-cloud \
      --tags=ssl-lb \
      --zone=ZONE_B \
      --metadata=startup-script="#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>vm-b1</h1></body></html>' | sudo tee /var/www/html/index.html
        EOF"
    
  4. ゾーン ZONE_Bvm-b2 を作成します。

    gcloud compute instances create vm-b2 \
      --image-family=debian-12 \
      --image-project=debian-cloud \
      --tags=ssl-lb \
      --zone=ZONE_B \
      --metadata=startup-script="#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>vm-b2</h1></body></html>' | sudo tee /var/www/html/index.html
        EOF"
    

各ゾーンでのインスタンス グループの作成とインスタンスの追加

コンソール

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

    [インスタンス グループ] に移動

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

  3. [名前] を instance-group-a に設定します。

  4. [ゾーン] を ZONE_A に設定します。

  5. [ポート マッピング] で、[ポートを追加] をクリックします。ロードバランサは、名前付きポートを介してインスタンス グループにトラフィックを送信します。名前付きポートを作成し、受信トラフィックを特定のポート番号にマッピングします。

    1. [ポート名] に「ssl-lb」を入力し、[ポート番号] に「443」を入力します。
  6. [インスタンスの定義] で [既存のインスタンスを選択] をクリックします。

  7. [VM インスタンス] で、vm-a1vm-a2 を選択します。

  8. その他の設定はそのまま使用します。

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

  10. 上記のステップを繰り返します(次のように設定します)。

    • 名前: instance-group-b
    • ゾーン: ZONE_B
    • ポート名: ssl-lbポート番号: 443
    • インスタンス: vm-b1vm-b2
  11. 2 つのインスタンス グループが作成され、各インスタンス グループに 2 つのインスタンスが含まれることを確認します。

gcloud

  1. instance-group-a インスタンス グループを作成します。

    gcloud compute instance-groups unmanaged create instance-group-a --zone ZONE_A
    
  2. インスタンス グループの名前付きポートを設定します。

    gcloud compute instance-groups set-named-ports instance-group-a \
        --named-ports=ssl-lb:443 \
        --zone=ZONE_A
    
  3. instance-group-a に vm-a1vm-a2 を追加します。

    gcloud compute instance-groups unmanaged add-instances instance-group-a \
        --instances=vm-a1,vm-a2 \
        --zone=ZONE_A
    
  4. instance-group-b インスタンス グループを作成します。

    gcloud compute instance-groups unmanaged create instance-group-b --zone ZONE_B
    
  5. インスタンス グループの名前付きポートを設定します。

    gcloud compute instance-groups set-named-ports instance-group-b \
        --named-ports=ssl-lb:443 \
        --zone=ZONE_B
    
  6. instance-group-b に vm-b1vm-b2 を追加します。

    gcloud compute instance-groups unmanaged add-instances instance-group-b \
        --instances=vm-b1,vm-b2 \
        --zone=ZONE_B
    

これで、それぞれが 2 つのインスタンスを持つ 2 つのリージョンに 1 つのインスタンス グループができました。

SSL ロードバランサのファイアウォール ルールの作成

ロードバランサとヘルス チェッカーからインスタンスへのトラフィックを許可するファイアウォール ルールを構成します。

コンソール

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

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

  2. [ファイアウォール ルールを作成] をクリックします。

  3. [名前] フィールドに「allow-ssl-lb-and-health」と入力します。

  4. ネットワークを選択します。

  5. [ターゲット] で [指定されたターゲットタグ] を選択します。

  6. [ターゲットタグ] を ssl-lb に設定します。

  7. [ソースフィルタ] を [IPv4 範囲] に設定します。

  8. [送信元 IPv4 範囲] を 130.211.0.0/2235.191.0.0/16 に設定します。

  9. [プロトコルとポート] で、[指定したプロトコルとポート] を tcp:443 に設定します。

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

gcloud

gcloud compute firewall-rules create allow-ssl-lb-and-health \
  --source-ranges=130.211.0.0/22,35.191.0.0/16 \
  --target-tags=ssl-lb \
  --allow=tcp:443

Google マネージド証明書を使用している場合は、証明書リソースのステータスが ACTIVE であることを確認します。詳しくは、Google マネージド SSL 証明書リソースのステータスをご覧ください。

gcloud compute ssl-certificates list

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

コンソール

構成を開始する

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

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

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

基本構成

[名前] を my-ssl-lb に設定します。

バックエンドの構成

  1. [バックエンドの構成] をクリックします。
  2. [バックエンド タイプ] で [インスタンス グループ] を選択します。
  3. [プロトコル] を [SSL] に設定します。
  4. [名前付きポート] に「ssl-lb」と入力します。
  5. [タイムアウト] のデフォルト値を受け入れます。
  6. [バックエンド タイプ] を [インスタンス グループ] に設定したままにします。
  7. 最初のバックエンドを構成します。
    1. [新しいバックエンド] で、インスタンス グループ instance-group-a を選択します。
    2. [ポート番号] を 443 に設定します。
    3. 残りの値はデフォルト値を使用します。
  8. 2 番目のバックエンドを構成します。
    1. [バックエンドを追加] をクリックします。
    2. インスタンス グループ instance-group-b を選択します。
    3. [ポート番号] を 443 に設定します。
    4. [完了] をクリックします。
  9. ヘルスチェックを構成します。
    1. [ヘルスチェック] で [ヘルスチェックを作成] を選択します。
    2. ヘルスチェックの名前my-ssl-health-check に設定します。
    3. [プロトコル] で [SSL] を選択します。
    4. 残りの値はデフォルト値を使用します。
    5. [保存して次へ] をクリックします。
  10. Google Cloud コンソールで、[バックエンドの構成] の横にチェックマークが表示されていることを確認します。チェックマークがない場合は、すべての手順を完了したことを再度確認します。

フロントエンドの構成

  1. [フロントエンドの構成] をクリックします。
    1. 最初の転送ルールを追加します。
    2. [名前] に「my-ssl-lb-forwarding-rule」と入力します。
    3. [プロトコル] で [SSL] を選択します。
    4. [IP アドレス] で [IP アドレスを作成] を選択します。
      1. [名前] に「ssl-lb-static-ipv4」と入力します。
      2. [予約] をクリックします。
    5. [証明書] の下で、[新しい証明書の作成] を選択します。
    6. [名前] に「my-ssl-cert」と入力します。
    7. [証明書をアップロードする] を選択した場合は、次の操作を行います。
      1. 証明書を貼り付けるか、[アップロード] をクリックして証明書ファイルに移動します。
      2. 秘密鍵を貼り付けるか、[アップロード] をクリックして秘密鍵ファイルに移動します。
    8. [Google マネージドの証明書を作成する] を選択した場合は、ドメインを入力します。
      1. 追加のドメインを入力するには、[ドメインの追加] をクリックします。
      2. [作成] をクリックします。
    9. プライマリ SSL 証明書リソースに加えて証明書リソースを追加するには、[その他の証明書] をクリックします。次に、[証明書] メニューから別の証明書を選択するか、[新しい証明書の作成] をクリックし、前述の操作を行います。
      1. (省略可)SSL ポリシーを作成するには:
      2. [SSL ポリシー] で、[ポリシーを作成] を選択します。
      3. [名前] に「my-ssl-policy」と入力します。
      4. [TLS の最小バージョン] で [TLS 1.0] を選択します。
      5. [プロファイル] で [モダン] を選択します。[有効な機能] と [無効な機能] が表示されます。
      6. [保存] をクリックします。
    10. 省略可: [プロキシのプロトコル] をオンにします。
    11. [完了] をクリックします。
      2 番目の転送ルールを追加します。
    1. [フロントエンド IP とポートの追加] をクリックします。
    2. [名前] に「my-ssl-lb-ipv6-forwarding-rule」と入力します。
    3. [IP バージョン] を IPv6 に設定します。
    4. [IP アドレス] で、[IP アドレスを作成] をクリックします。
      1. [名前] に「ssl-lb-static-ipv6」と入力します。
      2. [予約] をクリックします。
    5. [証明書] の下で my-ssl-cert を選択します。
    6. プライマリ SSL 証明書リソースに加えて証明書リソースを追加するには、[証明書] リストから証明書を選択するか、[新しい証明書を作成] をクリックします。
    7. 省略可: SSL ポリシーを使用するか、プロキシのプロトコルを有効にします。
    8. [完了] をクリックします。
    9. Google Cloud コンソールで、[フロントエンドの構成] の横に緑色のチェックマークが表示されていることを確認します。チェックマークがない場合には、前のすべてのステップが完了していることを再度確認してください。
    10. [完了] をクリックします。

確認と完了

  1. [確認と完了] をクリックします。
  2. ロードバランサの構成を確認します。
  3. 省略可: [同等のコード] をクリックして、ロードバランサの作成に使用する REST API リクエストを表示します。
  4. [作成] をクリックします。

gcloud

  1. ヘルスチェックを作成します。
       gcloud compute health-checks create ssl my-ssl-health-check --port=443
       
  2. バックエンド サービスを作成します。
       gcloud compute backend-services create my-ssl-lb \
           --load-balancing-scheme EXTERNAL \
           --global-health-checks \
           --protocol=SSL \
           --port-name=ssl-lb \
           --health-checks=my-ssl-health-check \
           --timeout=5m \
           --global
       

    あるいは、--protocol=TCP を使用して、ロードバランサからインスタンスへの通信の暗号化を構成することもできます。

  3. バックエンド サービスにインスタンス グループを追加します。
       gcloud compute backend-services add-backend my-ssl-lb \
           --instance-group=instance-group-a \
           --instance-group-zone=ZONE_A \
           --balancing-mode=UTILIZATION \
           --max-utilization=0.8 \
           --global
       
       gcloud compute backend-services add-backend my-ssl-lb \
           --instance-group=instance-group-b \
           --instance-group-zone=ZONE_B \
           --balancing-mode=UTILIZATION \
           --max-utilization=0.8 \
           --global
       
  4. SSL 証明書リソースを構成します。

    セルフマネージド証明書を使用する場合は、少なくともアップロードする SSL 証明書が 1 つ存在している必要があります。存在しない場合は、SSL 証明書の概要をご覧ください。複数の SSL 証明書を使用する場合は、一度に 1 つずつ作成する必要があります。

    セルフマネージド SSL 証明書を使用していて、秘密鍵と署名済み証明書がない場合は、テスト用に自己署名証明書を作成して使用できます。

    セルフマネージド SSL 証明書リソースを作成するには、次のコマンドを実行します。

       gcloud compute ssl-certificates create my-ssl-cert \
           --certificate=CRT_FILE_PATH \
           --private-key=KEY_FILE_PATH
       

    Google マネージド SSL 証明書リソースを作成するには、次のコマンドを実行します。

       gcloud compute ssl-certificates create www-ssl-cert \
           --domains=DOMAIN_1,DOMAIN_2
       
  5. ターゲット SSL プロキシを構成します。

    外部プロキシ ネットワーク ロードバランサは、1~15 件の SSL 証明書を持つターゲット SSL プロキシの作成をサポートしています。次のコマンドを実行する前に、SSL 証明書ごとにそのリソースを作成する必要があります。

    プロキシ ヘッダーをオンにする場合は、none ではなく PROXY_V1 に設定します。ターゲット プロキシに SSL ポリシーを関連付けることもできます。その場合、先にポリシーを作成します。

       gcloud compute ssl-policies create my-ssl-policy \
           --profile=MODERN \
           --min-tls-version=1.0
       

    次に、ポリシーをターゲット プロキシに接続します。

       gcloud compute target-ssl-proxies create my-ssl-lb-target-proxy \
           --backend-service=my-ssl-lb \
           --ssl-certificates=[SSL_CERT_1][,[SSL_CERT_2],...] \
           --ssl-policy=my-ssl-policy \
           --proxy-header=NONE
       
  6. グローバル静的 IP アドレスを予約します。

    お客様がロード バランシングされたサービスにアクセスする際には、これらの IP アドレスを使用します。

       gcloud compute addresses create ssl-lb-static-ipv4 \
           --ip-version=IPV4 \
           --global
       
       gcloud compute addresses create ssl-lb-static-ipv6 \
           --ip-version=IPV6 \
           --global
       
  7. グローバル転送ルールを構成します。

    ターゲット プロキシに関連付けるグローバル転送ルールを作成します。LB_STATIC_IPLB_STATIC_IPV6 は、グローバル静的 IP アドレスの予約で生成した IP アドレスに置き換えます。

       gcloud compute forwarding-rules create my-ssl-lb-forwarding-rule \
           --load-balancing-scheme EXTERNAL \
           --global \
           --target-ssl-proxy=my-ssl-lb-target-proxy \
           --address=LB_STATIC_IP \
           --ports=443
       
       gcloud compute forwarding-rules create my-ssl-lb-ipv6-forwarding-rule \
           --load-balancing-scheme EXTERNAL \
           --global \
           --target-ssl-proxy=my-ssl-lb-target-proxy \
           --address=LB_STATIC_IPV6 \
           --ports=443
       

ドメインをロードバランサに接続する

ロードバランサが作成されたら、ロードバランサに関連付けられた IP アドレスをメモします(例: 30.90.80.100)。ドメイン登録サービスを使用して A レコードを作成し、ドメインがロードバランサを参照するようにします。SSL 証明書に複数のドメインを追加する場合は、それぞれについて A レコードを追加して、すべてがロードバランサの IP アドレスを指すようにする必要があります。たとえば、www.example.comexample.comA レコードを作成するには、次のようにします。

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

DNS プロバイダとして Cloud DNS を使用する場合は、レコードの追加、変更、削除をご覧ください。

ロードバランサをテストする

ウェブブラウザで、HTTPS を使用して静的 IP アドレスに接続します。このテスト設定では、インスタンスは自己署名証明書を使用しています。このため、ページに初めてアクセスしたときに、ブラウザに警告が表示されます。警告は無視してクリックし、実際のページを表示してください。IP_ADDRESS は、作成した IPv4 または IPv6 アドレスに置き換えます。

https://IP_ADDRESS

ユーザーに最も近いリージョンからいずれかのホストが表示されます。そのリージョンの他のインスタンスが表示されるまでページをリロードします。他のリージョンからインスタンスを表示するには、最も近いリージョンでインスタンスを停止します。

また、ローカルマシンのコマンドラインから curl を実行できます。SSL プロキシで自己署名証明書を使用する場合は、-k も指定する必要があります。curl -k オプションを使用すれば、自己署名証明書を使用する場合や証明書がまったくない場合でも curl が機能します。通常の証明書がある場合はこのパラメータを削除してもかまいません。独自のサイトをテストする場合にのみ、-k パラメータを使用してください。通常の状況下では有効な証明書が重要なセキュリティ手段です。証明書の警告は無視しないでください。

IP_ADDRESS は、作成した IPv4 または IPv6 アドレスに置き換えます。

curl -k https://IP_ADDRESS

ロードバランサにアクセスできない場合は、設定のトラブルシューティングに記載されている手順をお試しください。

追加の構成オプション

このセクションでは、代替および追加の構成オプションを提供する構成例を示します。これらのタスクはすべて省略可です。また、任意の順序で行うことができます。

クライアント接続情報を保持するための PROXY プロトコル

プロキシ ネットワーク ロードバランサは、クライアントからの TCP 接続を終了して、インスタンスへの新しい接続を作成します。デフォルトでは、元のクライアント IP とポート情報は保持されません。

元の接続情報を保持してインスタンスに送信するには、PROXY プロトコル バージョン 1 を有効にします。このプロトコルは、送信元 IP アドレス、宛先 IP アドレス、ポート番号を含む追加ヘッダーをインスタンスへリクエストの構成部分として送信します。

プロキシ ネットワーク ロードバランサのバックエンド インスタンスが PROXY プロトコル ヘッダーをサポートするサーバーを実行していることを確認します。サーバーが PROXY プロトコル ヘッダーをサポートするように構成されていない場合、バックエンド インスタンスは空のレスポンスを返します。

ユーザー トラフィックに PROXY プロトコルを設定する場合は、ヘルスチェックにも設定します。同じポートでヘルスチェックとコンテンツの処理を行う場合は、ヘルスチェックの --proxy-header がロードバランサの設定と一致するように設定します。

通常、PROXY プロトコルのヘッダーは、ユーザーが読み取り可能な次の形式の 1 行のテキストです。

PROXY TCP4 <client IP> <load balancing IP> <source port> <dest port>\r\n

次の例は、PROXY プロトコルを示しています。

PROXY TCP4 192.0.2.1 198.51.100.1 15221 110\r\n

上の例では、クライアント IP は 192.0.2.1、ロード バランシング IP は 198.51.100.1、クライアント ポートは 15221、宛先ポートは 110 です。

クライアント IP が不明の場合、ロードバランサは PROXY プロトコルのヘッダーを次の形式で生成します。

PROXY UNKNOWN\r\n

ターゲット プロキシの PROXY プロトコル ヘッダーを更新する

このページのロードバランサの設定例では、プロキシ ネットワーク ロードバランサの作成中に PROXY プロトコル ヘッダーを有効にする方法について説明します。既存のターゲット プロキシの PROXY プロトコル ヘッダーを変更するには、次の操作を行います。

コンソール

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

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

  2. ロードバランサの [編集] をクリックします。
  3. [フロントエンドの構成] をクリックします。
  4. [プロキシのプロトコル] フィールドの値を [オン] に変更します。
  5. [更新] をクリックして、変更を保存します。

gcloud

次のコマンドで、--proxy-header フィールドを編集し、必要に応じて NONE または PROXY_V1 に設定します。

gcloud compute target-ssl-proxies update TARGET_PROXY_NAME \
    --proxy-header=[NONE | PROXY_V1]

セッション アフィニティを構成する

以下の手順は、サンプルの SSL プロキシ ロードバランサのバックエンド サービスを更新して、バックエンド サービスがクライアント IP アフィニティを使用できるようにする方法を示しています。

クライアント IP アフィニティが有効になっている場合、ロードバランサは、クライアントの IP アドレスとロードバランサの IP アドレス(外部転送ルールの外部 IP アドレス)から作成されたハッシュに基づいて、特定のクライアントのリクエストを同じバックエンド VM に送信します。

Console

クライアント IP セッション アフィニティを有効にするには:

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

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

  2. [バックエンド] をクリックします。

  3. [my-ssl-lb](この例で作成したバックエンド サービスの名前)をクリックし、[編集] をクリックします。

  4. [バックエンド サービスの詳細] ページで、[詳細構成] をクリックします。

  5. [セッション アフィニティ] で、メニューから [クライアント IP] を選択します。

  6. [更新] をクリックします。

gcloud

クライアント IP セッション アフィニティを指定して、my-ssl-lb バックエンド サービスを更新するには、次のコマンドを使用します。

gcloud compute backend-services update my-ssl-lb \
    --global \
    --session-affinity=CLIENT_IP

API

クライアント IP セッション アフィニティを設定するには、backendServices/patch メソッドに PATCH リクエストを送信します。

PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/us-west1/backendServices/my-ssl-lb
{
  "sessionAffinity": "CLIENT_IP"
}

コネクション ドレインを有効にする

バックエンド サービスでコネクション ドレインを有効にすると、トラフィックを処理しているインスタンスの停止、手動削除、オートスケーラーによる削除が発生した場合に、ユーザーに対する中断を最小限に抑えることができます。コネクション ドレインについて詳しくは、コネクション ドレインの有効化のドキュメントをご覧ください。

次のステップ