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. ロードバランサとヘルスチェッカーからインスタンスへのトラフィックの到達を許可するファイアウォール ルール

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

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

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

インスタンスの設定

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

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

Console


インスタンスの作成

  1. Google Cloud Platform 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 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
  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 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
  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 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
  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 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-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 sed -i '/\/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-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 sed -i '/\/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-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 sed -i '/\/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-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 sed -i '/\/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
    • ゾーン: us-east1-b
    • ポート名: tcp110
    • ポート番号: 110
    • インスタンス: ig-us-east1-1 と ig-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 Platform 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 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. [ネットワーク] で、[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. ファイアウォールを開いて、任意のソースからタグ付けされたインスタンスへのトラフィックを許可します。

    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].

次のステップ

このページは役立ちましたか?評価をお願いいたします。

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