VM インスタンス グループのバックエンドを使用する外部 TCP プロキシ ロードバランサを設定する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

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

このガイドでは、外部 TCP プロキシ ロード バランシングの設定手順について説明します。始める前に、外部 TCP プロキシ ロード バランシングの概要で外部 TCP プロキシ ロード バランシングの仕組みを確認してください。

設定の概要

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

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

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

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

権限

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

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

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

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

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

インスタンスの構成

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

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

コンソール

インスタンスの作成

  1. Google Cloud コンソールの [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-10 \
        --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"
    
  2. ゾーン us-central1-big-us-central1-2 を作成します

    gcloud compute instances create ig-us-central1-2 \
        --image-family debian-10 \
        --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"
    
  3. ゾーン us-east1-big-us-east1-1 を作成します

    gcloud compute instances create ig-us-east1-1 \
        --image-family debian-10 \
        --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"
    
  4. ゾーン us-east1-big-us-east1-2 を作成します

    gcloud compute instances create ig-us-east1-2 \
        --image-family debian-10 \
        --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"
    

ゾーンごとにインスタンス グループを作成して、インスタンスを追加する

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。
    [インスタンス グループ] ページに移動
  2. [インスタンス グループを作成] をクリックします。
  3. [新しい非マネージド インスタンス グループ] をクリックします。
  4. [名前] を us-ig1 に設定します。
  5. [ゾーン] を us-central1-b に設定します。
  6. [ポート マッピング] で、[ポートを追加] をクリックします。ロードバランサは、名前付きポートを介してインスタンス グループにトラフィックを送信します。名前付きポートを作成し、受信トラフィックを特定のポート番号にマッピングします。
    1. [ポート名] を tcp110 に設定します。
    2. [ポート番号] を 110 に設定します。
  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
    
  2. インスタンス グループの名前付きポートを作成します。

    gcloud compute instance-groups set-named-ports us-ig1 \
        --named-ports tcp110:110 \
        --zone us-central1-b
    
  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
    
  4. us-ig2 インスタンス グループを作成します。

    gcloud compute instance-groups unmanaged create us-ig2 \
       --zone us-east1-b
    
  5. インスタンス グループの名前付きポートを作成します。

    gcloud compute instance-groups set-named-ports us-ig2 \
       --named-ports tcp110:110 \
       --zone us-east1-b
    
  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
    

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

外部 TCP プロキシ ロードバランサのファイアウォール ルールを作成する

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

コンソール

  1. Google Cloud コンソールの [ファイアウォール] ページに移動します。
    [ファイアウォール] ページに移動
  2. [ファイアウォール ルールを作成] をクリックします。
  3. [名前] フィールドに「allow-tcp-lb-and-health」と入力します。
  4. [ネットワーク] で default を選択します。
  5. [ターゲット] で [指定されたターゲットタグ] を選択します。
  6. [ターゲットタグ] を tcp-lb に設定します。
  7. [ソースフィルタ] を [IPv4 範囲] に設定します。
  8. [送信元 IPv4 範囲] を 130.211.0.0/22,35.191.0.0/16 に設定します。
  9. [プロトコルとポート] で、[指定したプロトコルとポート] を tcp:110 に設定します。
  10. [作成] をクリックします。

gcloud

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

ロードバランサの構成

コンソール

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

  1. Google Cloud コンソールの [ロード バランシング] ページに移動します。
    [ロード バランシング] ページに移動
  2. [ロードバランサを作成] をクリックします。
  3. ロードバランサの構成を開始します。
    1. [TCP ロード バランシング] で [構成を開始] をクリックします。
    2. [インターネット接続または内部専用] を [インターネットから自分の VM へ] に設定します。
    3. [マルチリージョンまたはシングル リージョン] を [マルチリージョン] に設定します。
    4. [続行] をクリックします。
    5. [名前] を my-tcp-lb に設定します。
    6. [バックエンドの構成] をクリックします。
    7. [バックエンド タイプ] で [インスタンス グループ] を選択します。
    8. [プロトコル] で、[TCP] を選択します。
  4. 最初のバックエンドを構成します。
    1. [新しいバックエンド] で、インスタンス グループ us-ig1 を選択します。
    2. 残りの値はデフォルト値を使用します。
  5. 2 番目のバックエンドを構成します。
    1. [バックエンドを追加] をクリックします。
    2. インスタンス グループ us-ig2 を選択します。
    3. [ポート番号] で、80 を削除して 110 を追加します。
  6. ヘルスチェックの構成
    1. [ヘルスチェック] で [ヘルスチェックを作成] を選択します。
    2. ヘルスチェックの名前my-tcp-health-check に設定します。
    3. [プロトコル] で、[TCP] を選択します。
    4. [ポート] を 110 に設定します。
  7. 省略可: デフォルトのバックエンド セキュリティ ポリシーを構成します。デフォルトのセキュリティ ポリシーでは、ユーザーが構成したしきい値を超えるトラフィックをスロットリングします。デフォルトのセキュリティ ポリシーの詳細については、レート制限の概要をご覧ください。

    1. Google Cloud Armor のデフォルトのセキュリティ ポリシーを無効にするには、バックエンド セキュリティ ポリシーのリストメニューで None を選択します。
    2. [セキュリティ] セクションで [デフォルトのセキュリティ ポリシー] を選択します。
    3. [ポリシー名] フィールドで、自動生成された名前を受け入れるか、セキュリティ ポリシーの名前を入力します。
    4. [リクエスト数] フィールドで、デフォルトのリクエスト数を受け入れるか、110,000 の整数を入力します。
    5. [間隔] フィールドで、間隔を選択します。
    6. [キーへの適用] フィールドで、[すべて]、[IP アドレス]、[X-Forwarded-For IP アドレス] のいずれかの値を選択します。これらのオプションの詳細については、レート制限対象のクライアントを特定するをご覧ください。
  8. 残りの値はデフォルト値を使用します。
  9. [保存して次へ] をクリックします。
  10. Google Cloud Console で、[バックエンドの構成] の横にチェックマークが表示されていることを確認します。チェックマークがない場合は、すべての手順を完了したことを再度確認します。

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

  1. [フロントエンドの構成] をクリックします。
  2. 最初の転送ルールを追加します。
    1. [名前] に「my-tcp-lb-forwarding-rule」を入力します。
    2. [プロトコル] で、[TCP] を選択します。
    3. [IP アドレス] で [IP アドレスを作成] を選択します。
      1. [名前] に「tcp-lb-static-ip」を入力します。
      2. [予約] をクリックします。
    4. [ポート] を 110 に設定します。
    5. [プロキシのプロトコル] は Apache HTTP Server ソフトウェアでは動作しないため、この例では有効にしないでください。詳細については、プロキシのプロトコルをご覧ください。
    6. [完了] をクリックします。
  3. 2 番目の転送ルールを追加します。
    1. [フロントエンド IP とポートの追加] をクリックします。
    2. [名前] に「my-tcp-lb-ipv6-forwarding-rule」を入力します。
    3. [プロトコル] で、[TCP] を選択します。
    4. [IP バージョン] を IPv6 に設定します。
    5. [IP アドレス] で、[IP アドレスを作成] をクリックします。
      1. [名前] に「tcp-lb-ipv6-static-ip」を入力します。
      2. [予約] をクリックします。
    6. [ポート] を 110 に設定します。
    7. [プロキシのプロトコル] は Apache HTTP Server ソフトウェアでは動作しないため、この例では有効にしないでください。詳細については、プロキシのプロトコルをご覧ください。
    8. [完了] をクリックします。
  4. Google Cloud Console で、[フロントエンドの構成] の横にチェックマークがあることを確認します。チェックマークがない場合には、前のすべてのステップが完了していることを再度確認してください。

確認と完了

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

gcloud

  1. ヘルスチェックを作成します。

    gcloud compute health-checks create tcp my-tcp-health-check --port 110
    
  2. バックエンド サービスを作成します。

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

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

  3. バックエンド サービスにインスタンス グループを追加します。

    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
     
    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
    
  4. ターゲット TCP プロキシを構成します。プロキシ ヘッダーをオンにする場合は、NONE ではなく PROXY_V1 に設定します。

    gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy \
        --backend-service my-tcp-lb \
        --proxy-header NONE
    
  5. グローバル静的 IPv4 アドレスと IPv6 アドレスを予約します。

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

    gcloud compute addresses create tcp-lb-static-ipv4 \
        --ip-version=IPV4 \
        --global
    
    gcloud compute addresses create tcp-lb-static-ipv6 \
        --ip-version=IPV6 \
        --global
    
  6. 2 つのアドレスのグローバル転送ルールを構成します。

    gcloud compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \
        --global \
        --target-tcp-proxy my-tcp-lb-target-proxy \
        --address tcp-lb-static-ipv4 \
        --ports 110
    
    gcloud compute forwarding-rules create my-tcp-lb-ipv6-forwarding-rule \
        --global \
        --target-tcp-proxy my-tcp-lb-target-proxy \
        --address tcp-lb-static-ipv6 \
        --ports 110
    

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

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

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

    gcloud compute addresses describe tcp-lb-static-ipv4
    

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

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

    curl -m1 LB_IP_ADDRESS:110
    

    たとえば、割り当てられた IPv6 アドレスが [2001:db8:1:1:1:1:1:1/96]:110 の場合、コマンドは次のようになります。

    curl -m1 http://[2001:db8:1:1:1:1:1:1]:110
    

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

追加の構成オプション

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

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

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

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

外部 TCP プロキシ ロードバランサのバックエンド インスタンスが PROXY プロトコル ヘッダーをサポートする HTTP(S) サーバーを実行していることを確認します。HTTP(S) サーバーが PROXY プロトコル ヘッダーをサポートするように構成されていない場合、バックエンド インスタンスは空のレスポンスを返します。たとえば、PROXY プロトコルは Apache HTTP Server ソフトウェアでは動作しません。Nginx など、別のウェブサーバー ソフトウェアを使用できます。

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

一般に、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

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

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

コンソール

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

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

  2. ロードバランサの [編集] をクリックします。

  3. [フロントエンドの構成] をクリックします。

  4. [プロキシのプロトコル] フィールドの値を [オン] に変更します。

  5. [更新] をクリックして、変更を保存します。

gcloud

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

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

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

構成例では、バックエンド サービスをセッション アフィニティなしで作成しています。

これらの手順は、バックエンド サービスがクライアント IP アフィニティまたは生成された Cookie アフィニティを使用するように、サンプルの外部 TCP プロキシ ロードバランサのバックエンド サービスを更新する方法を示しています。

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

コンソール

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

  1. Google Cloud コンソールの [ロード バランシング] ページに移動します。
    [ロード バランシング] ページに移動
  2. [バックエンド] をクリックします。
  3. [my-tcp-lb](この例で作成したバックエンド サービスの名前)をクリックし、[編集] をクリックします。
  4. [バックエンド サービスの詳細] ページで、[詳細構成] をクリックします。
  5. [セッション アフィニティ] で、メニューから [クライアント IP] を選択します。
  6. [更新] をクリックします。

gcloud

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

gcloud compute backend-services update my-tcp-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-tcp-lb
{
  "sessionAffinity": "CLIENT_IP"
}

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

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

設定に関するトラブルシューティング

ロードバランサの IP アドレスにアクセスしようとしたときにページを読み込めない場合は、次の手順で設定のトラブルシューティングを行ってください。

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

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

my-tcp-lb バックエンド サービスに接続されているインスタンスが HEALTHY であることを確認します。

gcloud compute backend-services get-health my-tcp-lb

ファイアウォール ルールによってトラフィックが許可されることを確認する

  • ヘルス チェッカーとロードバランサのいずれについても、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-tcp-lb-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
    
  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
    

次のステップ