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

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

このガイドでは、TCP プロキシ負荷分散の設定手順について説明します。始める前に、TCP プロキシ負荷分散のコンセプトで TCP プロキシ負荷分散の仕組みについて確認してください。

概要

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

この例では、以下の構成を行います。

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

ロードバランサが構成されたら、構成をテストします。

権限

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

タスク 必要な役割
ネットワーク、サブネット、負荷分散コンポーネントの作成 ネットワーク管理者
ファイアウォール ルールの追加と削除 セキュリティ管理者
インスタンスの作成 インスタンス管理者

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

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

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

インスタンスの構成

テスト目的で、4 つのインスタンスに Apache をインストールしてから、2 つのインスタンス グループを作成して各グループにインスタンスを 2 つずつ含めます。通常、TCP プロキシ負荷分散は HTTP トラフィックには使用されませんが、Apache はよく使用されるソフトウェアで、テスト用の設定が簡単です。

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

Console


インスタンスの作成

  1. Google Cloud Console の [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. [インスタンスを作成] をクリックします。
  3. [名前] を ig-us-central1-1 に設定します。
  4. [リージョン] を us-central1 に設定します。
  5. [ゾーン] を us-central1-b に設定します。
  6. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックして、詳細設定を表示します。
  7. [管理] で、[ネットワーキング] をクリックして [タグ] フィールドに tcp-lb を入力します。
  8. [管理] をクリックして、[起動スクリプト] フィールドに次のスクリプトを入力します。
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.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
  9. 残りのフィールドはデフォルト値のままにします。
  10. [作成] をクリックします。
  11. 同じ設定で 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 service apache2 restart
        echo '<!doctype html><html><body><h1>ig-us-central1-2</h1></body></html>' | sudo tee /var/www/html/index.html
  12. 同じ設定で ig-us-east1-1 を作成します。ただし [リージョン] は us-east1 に設定し、[ゾーン] は 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 service apache2 restart
        echo '<!doctype html><html><body><h1>ig-us-east1-1</h1></body></html>' | sudo tee /var/www/html/index.html
  13. 同じ設定で ig-us-east1-2 を作成します。ただし [リージョン] は us-east1 に設定し、[ゾーン] は 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 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-9 \
            --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 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-9 \
            --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 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-9 \
            --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 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-9 \
            --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 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. Cloud 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
    • ゾーン: us-east1-b
    • ポート名: tcp110
    • ポート番号: 110
    • インスタンス: ig-us-east1-1ig-us-east1-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].

リージョンごとに 1 つのインスタンス グループが作成されました。各インスタンス グループには 2 つの VM インスタンスがあります。

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

Console


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

  1. Google Cloud Console で [負荷分散] ページに移動します。
    [負荷分散] ページに移動
  2. [ロードバランサを作成] をクリックします。
  3. [TCP 負荷分散] で [設定を開始] をクリックします。
  4. [インターネット接続または内部専用] を [インターネットから自分の VM へ] に設定します。
  5. [マルチリージョンまたはシングル リージョン] を [マルチリージョン] に設定します。
  6. [続行] をクリックします。
  7. [名前] を my-tcp-lb に設定します。
  8. [バックエンドの設定] をクリックします。
  9. バックエンド サービスの名前my-tcp-lb として表示されます。
  10. [プロトコル] を TCP に設定します。
  11. [新しいバックエンド] で、インスタンス グループ us-ig1 を選択します。
  12. [インスタンス グループは名前付きポートを所有済み] ダイアログで [既存のポート名を使用] をクリックします。
  13. その他の設定はそのまま使用します。
  14. [バックエンドを追加] をクリックします。
  15. インスタンス グループ us-ig2 を選択します。
  16. [ポート番号] を 110 に設定します。
  17. [ヘルスチェック] で [ヘルスチェックを作成] を選択します。
    1. ヘルスチェックの名前my-tcp-health-check に設定します。
    2. [プロトコル] を TCP に設定します。
    3. [ポート] を 110 に設定します。
    4. 他の設定はそのままにします。
    5. [保存して次へ] をクリックします。
  18. Google Cloud 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 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 Console の [ファイアウォール ルール] ページに移動します。
    [ファイアウォール ルール] ページに移動
  2. [ファイアウォール ルールを作成] をクリックします。
  3. [名前] に「allow-tcp-lb-and-health」を入力します。
  4. [ネットワーク] で、[default] を選択します。
  5. [ターゲット] で [指定されたターゲットタグ] を選択します。
  6. [ターゲットタグ] を tcp-lb に設定します。
  7. [ソースフィルタ] を IP ranges に設定します。
  8. [ソース IP の範囲] を 130.211.0.0/2235.191.0.0/16 に設定します。
  9. [許可対象プロトコル / ポート] を tcp:110 に設定します。
  10. [作成] をクリックします。

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

ロードバランサのテスト

lb_ip を [IP:ポート] フィールドのロードバランサの IPv4 または IPv6 のアドレスに置き換えると、次のコマンドを実行してロードバランサにアクセスできます。

    curl lb_ip:110
    

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

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

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

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

一般に、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 がロードバランサの設定と一致するように設定できます。このチュートリアルでは、ヘルスチェックとコンテンツの処理にポート 110 を使用します。別のポートを使用している場合は、必要に応じてそのポートをヘルスチェックに設定することもできます。

ヘルスチェックの作成

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

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

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

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

Google Cloud Platform では広範囲の IP アドレスが使用され、このアドレスは時間の経過とともに変化します。ある特定の時点での外部 IP アドレスを判別する必要がある場合は、Google Compute Engine のよくある質問の手順に従ってください。

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

接続ドレイン

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

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

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

モニタリング

TCP プロキシ負荷分散のモニタリングについては、TCP / SSL プロキシ モニタリングをご覧ください。

トラブルシューティング

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

ポート 110 を制限するブラウザが数多く存在するため、curl のようなツールを使用してロードバランサをテストする必要があります。curl を使用してページにアクセスできない場合は、このセクションでいくつかのトラブルシューティング手順を説明しています。

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

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

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. ファイアウォールを開いて、任意のソースからタグ付けされたインスタンスへのトラフィックを許可します。これを行うには、tcp-lb タグの付いたインスタンスのポート 110 への TCP トラフィックに対して、送信元 IP 範囲を 0.0.0.0/0 に設定するソースフィルタを作成します。

        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 アドレスを調べてください。

        gcloud compute instances list
        
        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 つ以上のインスタンスにアクセスします。

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

        gcloud compute firewall-rules describe allow-tcp-lb-and-health
        
        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/22
          35.191.0.0/16
        targetTags:
          tcp-lb
  5. インスタンスが機能していることを確認したら、「from anywhere」ファイアウォールを削除します。

        gcloud compute firewall-rules delete allow-tcp110-0-0-0-0
        
        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].

次のステップ