Google Cloud Load Balancing 用の TCP プロキシの設定

Google Cloud Platform(GCP)TCP プロキシの負荷分散により、世界中のすべてのユーザーに対して単一の IP アドレスを使用できます。GCP TCP プロキシの負荷分散では、ユーザーに最も近いインスタンスにトラフィックが自動的にルーティングされます。

Cloud TCP プロキシ負荷分散は、HTTP 以外のトラフィックを対象としています。HTTP トラフィックの場合は、代わりに HTTP(S) 負荷分散を使用することをおすすめします。プロキシが使用される SSL トラフィックの場合は、SSL プロキシの負荷分散を使用してください。

TCP 負荷分散は、IPv4 アドレスと IPv6 アドレスのクライアント トラフィックに対応しています。クライアントの IPv6 リクエストはグローバル負荷分散層で終了し、IPv4 経由でバックエンドに送信されます。

目次

概要

TCP トラフィックに TCP プロキシを使用すると、グローバル負荷分散層で顧客の TCP セッションを停止し、TCP または SSL を使用して仮想マシン インスタンスにトラフィックを転送できます。

TCP プロキシ負荷分散は、グローバル負荷分散サービスです。複数のリージョンにインスタンスをデプロイできます。また、グローバル負荷分散によってユーザーに最も近いリージョンにトラフィックが自動的に転送されます。リージョンの容量に達すると、ロードバランサは使用可能な容量を持つ別のリージョンに新しい接続を自動的に転送します。既存のユーザー接続は現在のリージョンにそのまま残ります。

TCP プロキシ負荷分散の利点:

  • 高度なルーティング機能 - ロードバランサによって、容量のあるバックエンドのロケーションにリクエストをルーティングできます。それに対して、L3/L4 ロードバランサは容量に注意を払わずにリージョンのバックエンドにルーティングする必要があります。より高度なルーティングを使用すると、x*N ではなく、N+1 または N+2 でプロビジョニングできるようになります。
  • セキュリティ パッチ - TCP スタックで脆弱性が生じると、インスタンスの安全が確保されるように、ロードバランサで自動的にパッチが適用されます。
  • TCP プロキシ負荷分散では、次のポートがサポートされています: 25、43、110、143、195、443、465、587、700、993、995、1883、5222

注:

  • TCP プロキシ負荷分散で HTTP を処理することもできますが、おすすめしません。HTTP トラフィックの場合は、代わりに HTTP 負荷分散を使用してください。

次に、TCP プロキシ負荷分散の仕組みを説明し、複数のインスタンスにトラフィックが負荷分散されるように TCP プロキシを構成する方法について詳しく説明します。

TCP プロキシ負荷分散の例

グローバル負荷分散層に TCP プロキシを設定すると、TCP 接続で受信するトラフィックはグローバル層で停止され、使用可能な最も近いインスタンス グループにプロキシ処理されます。

この例では、Iowa と Boston のユーザーからのトラフィックはグローバル負荷分散層で停止され、分割された接続は選択されたバックエンド サービスに向かうように設定されます。

TCP ターミネーションを使用した Google Cloud Load Balancing(クリックして拡大)
TCP ターミネーションを使用した Google Cloud Load Balancing(クリックして拡大)

TCP プロキシ負荷分散の設定

この例では、us-central1us-east1 という 2 つのリージョンに存在する簡単なサービスに対してグローバル TCP プロキシ負荷分散を設定する方法を示します。この例のサービスは、ポート 110 で応答するように構成された Apache サーバーのセットです。多くのブラウザではポート 110 は許可されないため、curl を使用する最終テストを行います。

以下を構成します。

  1. 2 つのリージョンに分散している 4 つのインスタンス
  2. インスタンスを保持するインスタンス グループ
  3. インスタンスの正常性をチェックするヘルスチェック
  4. グループ内のインスタンスをモニタリングし、構成された使用量を超過しないようにするバックエンド サービス
  5. TCP プロキシ自体
  6. ユーザーのトラフィックをプロキシに送信する外部静的 IPv4 アドレスと転送ルール
  7. ユーザーのトラフィックをプロキシに送信する外部静的 IPv6 アドレスと転送ルール
  8. ロードバランサおよびヘルス チェッカーからの、インスタンスへのトラフィックを許可するファイアウォール ルール

その後、構成をテストします。

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

このセクションでは、簡単なインスタンス グループを作成し、それらにインスタンスを追加して、ヘルスチェックを行ってからそれらのインスタンスをバックエンド サービスに追加する方法を説明します。本番環境システムであれば、通常はインスタンス テンプレートに基づくマネージド インスタンス グループが使用されますが、初期テストにはここで説明する設定のほうが簡単です。

インスタンスの構成

テストの目的で、4 つのインスタンス、2 つのインスタンスのグループのそれぞれ 2 つに Apache をインストールしてください。通常、HTTP トラフィックには TCP プロキシ負荷分散を使用しませんが、Apache は広く使用されており、テスト用に簡単に設定できます。

これらのインスタンスはすべて tcp-lb のタグで作成されます。このタグは後でファイアウォール ルールによって使用されます。

Console


インスタンスの作成

  1. Google Cloud Platform Console の [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. [インスタンスを作成] をクリックします。
  3. [名前] を ig-us-central1-1 に設定します。
  4. [ゾーン] を us-central1-b に設定します。
  5. [管理、ディスク、ネットワーキング、SSH キー] をクリックすると、拡張設定が表示されます。
  6. [管理] の [ネットワーキング] をクリックし、[タグ] フィールドに「tcp-lb」と入力します。
  7. [管理] をクリックし、[起動スクリプト] を次のとおりに設定します。
       sudo apt-get update
       sudo apt-get install apache2 -y
       sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
       sudo sed -i '/\<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.conf
       sudo service apache2 restart
       echo '<!doctype html><html><body><h1>ig-us-central1-1</h1></body></html>' | sudo tee /var/www/html/index.html
  8. 残りのフィールドはデフォルト値をそのまま使用します。
  9. [作成] をクリックします。
  10. ig-us-central1-2 を同じ設定で作成します。ただし、[起動スクリプト] は次のとおりに設定します。
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
        sudo sed -i '/\<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.conf
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>ig-us-central1-2</h1></body></html>' | sudo tee /var/www/html/index.html
  11. ig-us-east1-1 を同じ設定で作成します。ただし、[ゾーン] は us-east1-b に設定し、[起動スクリプト] は次のとおりに設定します。
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
        sudo sed -i '/\<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.conf
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>ig-us-east1-1</h1></body></html>' | sudo tee /var/www/html/index.html
  12. ig-us-east1-2 を同じ設定で作成します。ただし、[ゾーン] は us-east1-b に設定し、[起動スクリプト] は次のとおりに設定します。
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
        sudo sed -i '/\<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.conf
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>ig-us-east1-2</h1></body></html>' | sudo tee /var/www/html/index.html

gcloud


  1. ゾーン us-central1-big-us-central1-1 を作成します。

    gcloud compute instances create ig-us-central1-1 \
        --image-family debian-8 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-central1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo sed -i '/\<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-central1-1</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    

    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/ig-us-central1-1].
    NAME             ZONE          MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-1 us-central1-b n1-standard-1             10.240.0.8  23.251.150.133 RUNNING
    

  2. ゾーン us-central1-big-us-central1-2 を作成します。

    gcloud compute instances create ig-us-central1-2 \
        --image-family debian-8 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-central1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo sed -i '/\<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-central1-2</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    

    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/ig-us-central1-2].
    NAME             ZONE          MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-2 us-central1-b n1-standard-1             10.240.0.11 23.251.148.160 RUNNING
    

  3. ゾーン us-east1-big-us-east1-1 を作成します。

    gcloud compute instances create ig-us-east1-1 \
        --image-family debian-8 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-east1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo sed -i '/\<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-east1-1</h1></body></html>' | tee /var/www/html/index.html
              EOF"
    

    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instances/ig-us-east1-1].
    NAME          ZONE       MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-east1-1 us-east1-b n1-standard-1             10.240.0.12 104.196.31.214 RUNNING
    

  4. ゾーン us-east1-big-us-east1-2 を作成します。

    gcloud compute instances create ig-us-east1-2 \
        --image-family debian-8 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-east1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo sed -i '/\<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-east1-2</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    

    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instances/ig-us-east1-2].
    NAME          ZONE       MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-east1-2 us-east1-b n1-standard-1             10.240.0.13 104.196.25.101 RUNNING
    

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

Console


  1. GCP Console の [インスタンス グループ] ページに移動します。
    [インスタンス グループ] ページに移動
  2. [インスタンス グループを作成] をクリックします。
  3. [名前] を us-ig1 に設定します。
  4. [ゾーン] を us-central1-b に設定します。
  5. [ポート名のマッピングを指定する] をクリックします。
    1. [ポート名] を tcp110 に設定します。
    2. [ポート番号] を 110 に設定します。
  6. [グループタイプ] で、[非マネージド インスタンス グループ] を選択します。
  7. [VM インスタンス] の下で、ig-us-central1-1ig-us-central1-2 を選択します。
  8. その他の設定はそのままにします。
  9. [作成] をクリックします。
  10. 以上のステップをもう一度行いますが、設定は次のとおりとします。
    • 名前: us-ig2
    • ゾーン: us-east1-b
    • ポート名: tcp110
    • ポート番号: 110
    • インスタンス: ig-us-east1-1ig-us-east1-2
  11. 2 つのインスタンスにそれぞれ 2 つのインスタンス グループが作成されたことを確認してください。

gcloud


  1. us-ig1 インスタンス グループを作成します。

    gcloud compute instance-groups unmanaged create us-ig1 \
        --zone us-central1-b
    

    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instanceGroups/us-ig1].
    NAME    LOCATION       SCOPE  NETWORK  MANAGED  INSTANCES
    us-ig1  us-central1-b  zone                     0
    

  2. インスタンス グループの名前付きポートを作成します。

    gcloud compute instance-groups set-named-ports us-ig1 \
        --named-ports tcp110:110 \
        --zone us-central1-b
    

    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].

  3. ig-us-central1-1ig-us-central1-2us-ig1 に追加します。

    gcloud compute instance-groups unmanaged add-instances us-ig1 \
        --instances ig-us-central1-1,ig-us-central1-2 \
        --zone us-central1-b
    

    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instanceGroups/us-ig1].

  4. us-ig2 インスタンス グループを作成します。

    gcloud compute instance-groups unmanaged create us-ig2 \
        --zone us-east1-b
    

    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].
    NAME    LOCATION    SCOPE  NETWORK  MANAGED  INSTANCES
    us-ig2  us-east1-b  zone                     0
    

  5. インスタンス グループの名前付きポートを作成します。

    gcloud compute instance-groups set-named-ports us-ig2 \
        --named-ports tcp110:110 \
        --zone us-east1-b
    

    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].

  6. ig-us-east1-1ig-us-east1-2us-ig2 に追加します。

    gcloud compute instance-groups unmanaged add-instances us-ig2 \
        --instances ig-us-east1-1,ig-us-east1-2 \
        --zone us-east1-b
    

    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].

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

ロードバランサの構成

Console


ロードバランサの作成とバックエンド サービスの構成

  1. Google Cloud Platform Console の [負荷分散] ページに移動します。
    [負荷分散] ページに移動
  2. [ロードバランサを作成] をクリックします。
  3. [TCP 負荷分散] で [設定を開始] をクリックします。
  4. [インターネット接続または内部専用] を [インターネットから自分の VM へ] に設定します。
  5. [マルチリージョンまたはシングル リージョン] を [マルチリージョン] に設定します。

  6. [接続終了] で [はい(TCP プロキシまたは SSL プロキシ - 推奨)] を選択します。

  7. [続行] をクリックします。
  8. [名前] を my-tcp-lb に設定します。
  9. [バックエンドの設定] をクリックします。
  10. バックエンド サービスの [名前] が my-tcp-lb と表示されます。
  11. [プロトコル] を TCP に設定します。
  12. [新しいバックエンド] の下で、インスタンス グループ us-ig1 を選択します。
  13. [インスタンス グループは名前付きポートを所有済み] ダイアログで [既存のポート名を使用] をクリックします。
  14. その他の設定はそのまま使用します。
  15. [バックエンドを追加] をクリックします。
  16. インスタンス グループ us-ig2 を選択します。
  17. [ポート番号] を 110 に設定します。
  18. [ヘルスチェック] で [ヘルスチェックを作成] を選択します。
    1. ヘルスチェックの [名前] を my-tcp-health-check に設定します。
    2. [プロトコル] を TCP に設定します。
    3. [ポート] を 110 に設定します。
    4. 他の設定はそのままにします。
    5. [保存して次へ] をクリックします。
  19. Google Cloud Platform Console で、[バックエンドの設定] の横に緑色のチェックマークが表示されていることを確認します。表示されていない場合には、上のすべてのステップが完了していることを再度確認してください。

フロントエンド サービスの構成

  1. [フロントエンドの設定] をクリックします。
  2. [名前] に「my-tcp-lb-forwarding-rule」と入力します。
  3. [プロトコル] を TCP に設定します。
  4. [IP] の下で、[IP アドレスの作成] を選択します。
    1. [名前] に「tcp-lb-static-ip」と入力します。
    2. [予約] をクリックします。
  5. [ポート] を 110 に設定します。
  6. 必要に応じてプロキシ プロトコルをオンにします。
  7. [完了] をクリックします。
  8. [フロントエンド IP とポートの追加] をクリックします。
  9. [名前] に「my-tcp-lb-ipv6-forwarding-rule」と入力します。
  10. プロトコルとして TCP を選択します。
  11. [IP バージョン] を IPv6 に設定します。
  12. [IP アドレス] で、[IP アドレスを作成] をクリックします。
    1. 名前に「tcp-lb-ipv6-static-ip」を入力します。
    2. [予約] をクリックします。
  13. [ポート] を 110 に設定します。
  14. 必要に応じてプロキシ プロトコルをオンにします。
  15. [完了] をクリックします。
  16. Google Cloud Platform Console で、[フロントエンドの設定] の横に緑色のチェックマークが表示されていることを確認します。表示されていない場合には、上のすべてのステップが完了していることを再度確認してください。

確認と完了

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

gcloud


ヘルスチェックの作成

gcloud compute health-checks create tcp my-tcp-health-check --port 110

Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks/my-tcp-health-check].
NAME                PROTOCOL
my-tcp-health-check TCP

バックエンド サービスの作成

gcloud compute backend-services create my-tcp-lb \
    --global \
    --protocol TCP \
    --health-checks my-tcp-health-check \
    --timeout 5m \
    --port-name tcp110

Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-tcp-lb].
NAME      BACKENDS PROTOCOL
my-tcp-lb          TCP

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

バックエンド サービスへのインスタンス グループの追加

gcloud compute backend-services add-backend my-tcp-lb \
    --global \
    --instance-group us-ig1 \
    --instance-group-zone us-central1-b \
    --balancing-mode UTILIZATION \
    --max-utilization 0.8

Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-tcp-lb].

gcloud compute backend-services add-backend my-tcp-lb \
    --global \
    --instance-group us-ig2 \
    --instance-group-zone us-east1-b \
    --balancing-mode UTILIZATION \
    --max-utilization 0.8

Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-tcp-lb].

ターゲット TCP プロキシの構成

プロキシ ヘッダーをオンにする場合は、none ではなく PROXY_V1 に設定します。

gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy \
    --backend-service my-tcp-lb \
    --proxy-header NONE

Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetTcpProxies/my-tcp-lb-target-proxy].
NAME                   PROXY_HEADER SERVICE
my-tcp-lb-target-proxy NONE         my-tcp-lb

グローバル静的 IPv4 アドレスと IPv6 アドレスの予約

ユーザーは、これらの IP アドレスを使用して負荷分散サービスにアクセスできます。

gcloud compute addresses create tcp-lb-static-ipv4 \
    --ip-version=IPV4 \
    --global

Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses/tcp-lb-static-ipv4].
NAME                 REGION ADDRESS                 STATUS
tcp-lb-static-ip            [LB_STATIC_IPV4]        RESERVED

gcloud compute addresses create tcp-lb-static-ipv6 \
    --ip-version=IPV6 \
    --global

Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses/tcp-lb-static-ipv6].
NAME                   REGION ADDRESS                 STATUS
tcp-lb-static-ip-ipv6         [LB_STATIC_IPV6]        RESERVED

2 つのアドレスに対するグローバル転送ルールの構成

[LB_STATIC_IPV4] と [LB_STATIC_IPV4] の代わりに、関連する IP アドレスを入力します。該当するアドレスを見つけるには、gcloud compute addresses list を使用します。

gcloud beta compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \
    --global \
    --target-tcp-proxy my-tcp-lb-target-proxy \
    --address [LB_STATIC_IPV4] \
    --ports 110

Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-tcp-lb-ipv4-forwarding-rule].
NAME                           REGION IP_ADDRESS       IP_PROTOCOL TARGET
my-tcp-lb-ipv4-forwarding-rule        [LB_STATIC_IPV4] TCP         my-tcp-lb-target-proxy

gcloud beta compute forwarding-rules create my-tcp-lb-ipv6-forwarding-rule \
    --global \
    --target-tcp-proxy my-tcp-lb-target-proxy \
    --address [LB_STATIC_IPV6] \
    --ports 110

Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-tcp-lb-ipv6-forwarding-rule].
NAME                           REGION IP_ADDRESS       IP_PROTOCOL TARGET
my-tcp-lb-ipv6-forwarding-rule        [LB_STATIC_IPV6] TCP         my-tcp-lb-target-proxy

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

ロードバランサとヘルス チェッカーからインスタンスへのトラフィックを許可するファイアウォール ルールを構成します。ここでは、TCP ポート 110 を開きます。ヘルスチェックでも同じポートが使用されます。ロードバランサとインスタンスの間のトラフィックでは IPv4 が使用されるため、IPv4 範囲のみ開く必要があります。

Console


  1. Google Cloud Platform Console で [ファイアウォール ルール] ページに移動します。
    [ファイアウォール ルール] ページに移動
  2. [ファイアウォール ルールの作成] をクリックします。
  3. [名前] に「allow-tcp-lb-and-health」と入力します。
  4. [VPC ネットワーク] では default を選択します。
  5. [ソースフィルタ] を IP ranges に設定します。
  6. [ソース IP 範囲] を 130.211.0.0/2235.191.0.0/16 に設定します。
  7. [許可対象プロトコル / ポート] を tcp:110 に設定します。
  8. [ターゲットタグ] を tcp-lb に設定します。
  9. [作成] をクリックします。

gcloud


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

Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp110-130-211-0-0-22].
NAME                     NETWORK SRC_RANGES                   RULES      SRC_TAGS TARGET_TAGS
allow-tcplb-and-health   default 130.211.0.0/22,35.191.0.0/16 tcp:110             tcp-lb

ロードバランサのテスト

ポート 110 は多くのブラウザでブロックされているため、curl などを使用して、ロードバランサが稼働していることを確認する必要があります。

  1. [アドレス] フィールドの IPv4 または IPv6 アドレスを curl コマンドに入力します。[IP_ADDRESS] は、作成した IPv4 または IPv6 アドレスに置き換えます。

    curl [IP_ADDRESS]:110

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

TCP プロキシ負荷分散では、クライアントからの TCP 接続が停止され、インスタンスへの新しい接続が作成されるため、デフォルトで元のクライアント IP とポート情報が保持されません。

この情報を保持し、インスタンスに送信する必要がある場合、PROXY プロトコル(バージョン 1)を有効にする必要があります。この場合、ソース IP アドレス、宛先 IP アドレス、ポート番号などの元の接続情報を含むヘッダーがさらに追加され、リクエストの一部としてインスタンスに送信されます。

ユーザー トラフィックにこのパラメータを設定する場合、同じポートでトラフィックを処理し、ヘルスチェックを行うときは、ヘルスチェックに対しても設定する必要があります。

一般に、PROXY プロトコル ヘッダーはユーザーが読み取れる単一の行であり、次のような形式になります。

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-header を設定できます。別のポートを使用している場合、必要に応じて、これをヘルスチェック用に設定しても、しなくてもかまいません。

ヘルスチェック

ヘルスチェックでは、どのインスタンスが新しい接続を受け取れるかが判別されます。インスタンスの正常性を判別するために、TCP、SSL、HTTP、HTTP ヘルスチェックを構成できます。

  • バックエンド インスタンスで実行されているサービスが HTTP に基づく場合は、HTTP ヘルスチェックを使用します
  • バックエンド インスタンスで実行されているサービスが HTTPS に基づく場合は、HTTPS ヘルスチェックを使用します
  • バックエンド インスタンスで実行されているサービスが SSL を使用している場合は、SSL ヘルスチェックを使用します
  • 別の種類のヘルスチェックを使用する明白な理由がない限り、TCP ヘルスチェックを使用します

ヘルスチェックのファイアウォール ルール

負荷分散対象インスタンスへのヘルスチェック プローブは、範囲 130.211.0.0/2235.191.0.0/16 のアドレスから発信されます。これらの IP アドレス範囲は、ロードバランサがバックエンド インスタンスに接続するために使用されます。これらの接続が関連ポートで許可されるように、ファイアウォール ルールを設定する必要があります。

手順については、TCP ロードバランサのファイアウォール ルールの作成をご覧ください。

ヘルスチェックの詳細については、ヘルスチェックのページをご覧ください。

特定の時点での外部 IP アドレスを特定する必要がある場合は、Google Compute Engine のよくある質問の手順を使用してください。

接続ドレイン

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

TCP プロキシ負荷分散と GCP ファイアウォール

ネットワーク負荷分散とは異なり、TCP プロキシ負荷分散へのアクセスはファイアウォール ルールで制御できません。これは、TCP プロキシ負荷分散が Google Cloud のエッジで実装されるのに対し、GCP ファイアウォール ルールはデータセンター内のインスタンス上に実装されているためです。

モニタリング

TCP / SSL モニタリングの詳細については、SSL プロキシに関するページの「モニタリング」セクションをご覧ください。

トラブルシューティング

ロードバランサの IP からページをロードできない

多くのブラウザでポート 110 は制限されたポートであるため、curl などのツールを使用してロードバランサをテストする必要があります。curl を介してページに到達できない場合、このセクションの残りの部分でトラブルシューティングの手順を確認してください。

インスタンスの正常性の確認

インスタンスが HEALTHY であることを確認します。

gcloud compute backend-services get-health [BACKEND-SERVICE]

ファイアウォール ルールが正しいことの確認

  • ヘルス チェッカーとロードバランサの両方で 130.211.0.0/2235.191.0.0/16 が開いている必要があります。
  • インスタンス タグを使用している場合、ファイアウォール ルールでそのタグが TARGET_TAGS としてリストにあることを確認し、すべてのインスタンスにそのタグがあることを確認します。この例では、インスタンスには tcp-lb のタグが付けられています。
gcloud compute firewall-rules list
NAME                      NETWORK SRC_RANGES                    RULES          SRC_TAGS TARGET_TAGS
allow-tcplb-and-health    default 130.211.0.0/22,35.191.0.0/16  tcp:110                 tcp-lb

各インスタンスに到達可能なことの確認

インスタンスに個別にアクセスできるファイアウォール ルールを一時的に設定し、特定のインスタンスからページをロードできるか試してみます。

  1. ファイアウォールを開いて、ソースからタグ付けされたインスタンスへのトラフィックを許可します。

    gcloud compute firewall-rules create allow-tcp110-0-0-0-0   \
        --source-ranges 0.0.0.0/0   \
        --target-tags tcp-lb    \
        --allow tcp:110
    

    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp110-0-0-0-0].
    NAME                 NETWORK SRC_RANGES RULES   SRC_TAGS TARGET_TAGS
    allow-tcp110-0-0-0-0 default 0.0.0.0/0  tcp:110          tcp-lb
    

  2. いずれかのインスタンスの EXTERNAL_IP アドレスを見つけます。

    
    
    

    NAME             ZONE           MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-1 us-central1-b  n1-standard-1             10.240.0.8  EXTERNAL_IP RUNNING
    ig-us-central1-2 us-central1-b  n1-standard-1             10.240.0.11 EXTERNAL_IP RUNNING
    ig-us-east1-1    us-east1-b     n1-standard-1             10.240.0.12 EXTERNAL_IP RUNNING
    ig-us-east1-2    us-east1-b     n1-standard-1             10.240.0.13 EXTERNAL_IP RUNNING

  3. 次に、ブラウザから直接 1 つ以上のインスタンスにアクセスします。

    
    
    
  4. この方法でインスタンスにアクセスできない場合、ソフトウェアが正しく実行されているか確認します。インスタンスに個別にアクセスできる場合には、ロードバランサのファイアウォール ルールが正しいかどうか確認します。

    
    
    

    allowed:
    - IPProtocol: tcp
      ports:
      - '110'
    creationTimestamp: '2017-03-16T15:21:34.119-07:00'
    description: ''
    id: '8144207668574597377'
    kind: compute#firewall
    name: allow-tcp-lb-and-health
    network: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default
    selfLink: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp-lb-and-health
    sourceRanges:
    - 130.211.0.0/110
    - 35.191.0.0/16
    targetTags:
    - tcp-lb

  5. インスタンスが機能していることを確認したら、「from anywhere」ファイアウォールを削除します。

    
    
    

    The following firewalls will be deleted:
     - [allow-tcp110-0-0-0-0]

    Do you want to continue (Y/n)? y

    Deleted [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp110-0-0-0-0].

フィードバックを送信...

Compute Engine ドキュメント