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

このドキュメントでは、SSL プロキシ負荷分散の設定手順を説明します。SSL プロキシ負荷分散の仕組みについては、SSL プロキシ負荷分散のコンセプトをご覧ください。

SSL 負荷分散の設定

この例は、us-central1us-east1 という 2 つのリージョンに存在する単純なサービスに対してグローバル SSL 負荷分散を設定する様子を示しています。次のように構成します。

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

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

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

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

インスタンスの作成

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

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

Console


インスタンスの作成

  1. Google Cloud Platform Console の [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. [インスタンスを作成] をクリックします。
  3. [名前] を ig-us-central1-1 に設定します。
  4. [ゾーン] を us-central1-b に設定します。
  5. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックして、詳細設定を表示します。
  6. [管理] で、[タグ] フィールドに「ssl-lb」と入力します。
  7. 次のように起動スクリプトを設定します。
    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>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 a2ensite default-ssl
    sudo a2enmod ssl
    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 a2ensite default-ssl
    sudo a2enmod ssl
    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 a2ensite default-ssl
    sudo a2enmod ssl
    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 ssl-lb \
        --zone us-central1-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>SSL load balanced instance - US central 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 ssl-lb \
        --zone us-central1-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>SSL load balanced instance - US central 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 ssl-lb \
        --zone us-east1-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>SSL load balanced instance - US east 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 ssl-lb \
        --zone us-east1-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>SSL load balanced instance - US east 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. Google Cloud Platform Console の [インスタンス グループ] ページに移動します。
    [インスタンス グループ] ページに移動
  2. [インスタンス グループを作成] をクリックします。
  3. [名前] を us-ig1 に設定します。
  4. [ゾーン] を us-central1-b に設定します。
  5. [ポート名のマッピングを指定する] をクリックします。
    1. [ポート名のマッピング] で [項目を追加] をクリックします。
    2. [ポート名] に「ssl-lb」と入力し、[ポート番号] に「443」と入力します。
  6. [インスタンスの定義] で [既存のインスタンスを選択] をクリックします。
  7. [VM インスタンス] から ig-us-central1-1ig-us-central1-2 を選択します。
  8. その他の設定はそのまま使用します。
  9. [作成] をクリックします。
  10. 上記のステップを繰り返します(次のように設定します)。
    • 名前: us-ig2
    • ゾーン: us-east1-b
    • ポート名: ssl-lbポート番号: 443
    • インスタンス: 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   ZONE          NETWORK MANAGED INSTANCES
    us-ig1 us-central1-b                 0
  2. インスタンス グループの名前付きポートを設定します。

    gcloud compute instance-groups set-named-ports us-ig1 \
        --named-ports ssl-lb:443 \
        --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
    
    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   ZONE       NETWORK MANAGED INSTANCES
    us-ig2 us-east1-b                 0
  5. インスタンス グループの名前付きポートを設定します。

    gcloud compute instance-groups set-named-ports us-ig2 \
        --named-ports ssl-lb:443 \
        --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
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].

これで、2 つのリージョンそれぞれにインスタンス グループが作成され、各グループに 2 つのインスタンスが追加されました。

ロードバランサの構成

Console


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

  1. Google Cloud Platform Console の [負荷分散] ページに移動します。
    [負荷分散] ページに移動
  2. [ロードバランサを作成] をクリックします。
  3. [TCP 負荷分散] で [設定を開始] をクリックします。
  4. [インターネット接続または内部専用] で [インターネットから自分の VM へ] を選択します。
  5. [マルチリージョンまたはシングル リージョン] を [**マルチリージョン(または不明)] に設定します。
  6. ロードバランサの [名前] に「my-ssl-lb」と入力します。
  7. [バックエンドの設定] をクリックします。
  8. [プロトコル] は [TCP] に設定したままにして、[*SSL] をクリックします。
  9. [名前付きポート] と [タイムアウト] のデフォルト値を受け入れます。
  10. [バックエンド タイプ] を [インスタンス グループ] に設定したままにします。
  11. [新しいバックエンド] の下で、インスタンス グループ us-ig1 を選択します。
  12. [ポート番号] を 443 に設定します。
  13. その他の設定はそのまま使用します。
  14. [新しいバックエンド] の下で、インスタンス グループ us-ig2 を選択します。
  15. [ポート番号] を 443 に設定します。
  16. その他の設定はそのまま使用します。
  17. [完了] をクリックします。
  18. [ヘルスチェック] で [ヘルスチェックを作成] を選択します。
    1. ヘルスチェックの [名前] を my-ssl-health-check に設定します。
    2. [プロトコル] を SSL に設定します。
    3. 他の設定はそのままにします。
    4. [保存して次へ] をクリックします。
  19. Google Cloud Platform Console で、[バックエンドの設定] の横に緑色のチェックマークが表示されていることを確認します。表示されていない場合には、上のすべてのステップが完了していることを再度確認してください。

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

  1. [フロントエンドの設定] をクリックします。
  2. [新しいフロントエンドの IP とポート] の [名前] に「my-ssl-lb-forwarding-rule」と入力します。
  3. [プロトコル] を SSL に設定します。
  4. [IP アドレス] で [IP アドレスを作成] を選択します。
    1. [名前] に「ssl-lb-static-ip」と入力します。
    2. [予約] をクリックします。
  5. [証明書] の下で、[新しい証明書の作成] を選択します。
  6. [名前] に「my-ssl-cert」と入力します。
  7. [証明書をアップロードする] を選択した場合は、次の手順を行います。
    1. 適切なフィールドに、以下をアップロードします。
      • 公開鍵証明書(crt ファイル)
      • 証明書チェーン(csr ファイル)
      • 秘密鍵(key ファイル)
    2. 別の SSL 証明書を追加するには、[証明書を追加] をクリックし、[証明書] プルダウン メニューから証明書を選択するか、[新しい証明書の作成] を選択して上記の手順に従います。
    3. 必要に応じてプロキシ プロトコルをオンにします。
    4. [作成] をクリックします。
  8. [Google 管理の証明書を作成する] を選択した場合は、[ドメイン] を入力します。
  9. [完了] をクリックします。
  10. [フロントエンド IP とポートの追加] をクリックします。
  11. [名前] に「my-ssl-lb-ipv6-forwarding-rule」と入力します。
  12. [IP バージョン] を IPv6 に設定します。
  13. [IP アドレス] で [IP アドレスを作成] を選択します。
    1. [名前] に「ssl-lb-static-ipv6」と入力します。
    2. [予約] をクリックします。
  14. [証明書] で my-ssl-cert を選択します。
  15. [完了] をクリックします。
  16. プライマリ SSL 証明書リソースに加えて証明書リソースを追加するには、次の手順を行います。
    1. [証明書] リストから証明書を選択するか、[新しい証明書の作成] をクリックし、上記の手順を行います。
  17. [完了] をクリックします。
  18. オプションで SSL ポリシーを作成するには、次の手順に沿って操作します。
    1. [SSL ポリシー] で、[ポリシーを作成] を選択します。
    2. [名前] として「my-ssl-policy」と入力します。
    3. [TLS の最小バージョン] で [TLS 1.0] を選択します。
    4. [プロファイル] で [モダン] を選択します。[有効な機能] と [無効な機能] が表示されます。
    5. [作成] をクリックします。
  19. Google Cloud Platform Console で、[フロントエンドの設定] の横に緑色のチェックマークが表示されていることを確認します。表示されていない場合には、上のすべてのステップが完了していることを再度確認してください。

確認と完了

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

gcloud


ヘルスチェックの作成

gcloud compute health-checks create ssl my-ssl-health-check --port 443
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks/my-ssl-health-check].
NAME                PROTOCOL
my-ssl-health-check SSL

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

gcloud compute backend-services create my-ssl-lb \
    --protocol SSL \
    --health-checks my-ssl-health-check \
    --timeout 5m \
    --global
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-ssl-lb].
NAME      BACKENDS PROTOCOL
my-ssl-lb          SSL

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

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

gcloud compute backend-services add-backend my-ssl-lb \
    --instance-group us-ig1 \
    --instance-group-zone us-central1-b \
    --balancing-mode UTILIZATION \
    --max-utilization 0.8 \
    --global
Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-ssl-lb].
gcloud compute backend-services add-backend my-ssl-lb \
    --instance-group us-ig2 \
    --instance-group-zone us-east1-b \
    --balancing-mode UTILIZATION \
    --max-utilization 0.8 \
    --global
Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-ssl-lb].

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]
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/sslCertificates/my-ssl-cert].
NAME      CREATION_TIMESTAMP
my-ssl-cert 2016-02-20T20:53:33.584-08:00

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

    gcloud beta compute ssl-certificates create www-ssl-cert \
      --domains [DOMAIN]

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

SSL 負荷分散では、1~10 枚の 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
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy].
NAME                   PROXY_HEADER SERVICE   SSL_CERTIFICATES
my-ssl-lb-target-proxy NONE         my-ssl-lb my-ssl-cert

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

お客様が負荷分散されたサービスにアクセスする際には、これらの IP アドレスを使用します。

gcloud compute addresses create ssl-lb-static-ipv4 \
        --ip-version=IPV4 \
        --global
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses/ssl-lb-static-ip].
NAME                 REGION ADDRESS               STATUS
ssl-lb-static-ip            [LB_STATIC_IP]        RESERVED
gcloud compute addresses create ssl-lb-static-ipv6 \
        --ip-version=IPV6 \
        --global
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses/ssl-lb-static-ipv6].
NAME                 REGION ADDRESS                 STATUS
ssl-lb-static-ipv6          [LB_STATIC_IPV6]        RESERVED

グローバル転送ルールの設定

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

gcloud compute forwarding-rules create my-ssl-lb-forwarding-rule \
    --global \
    --target-ssl-proxy my-ssl-lb-target-proxy \
    --address [LB_STATIC_IP] \
    --ports 443
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-ssl-lb-forwarding-rule].
NAME                         REGION IP_ADDRESS     IP_PROTOCOL TARGET
my-ssl-lb-forwarding-rule           [LB_STATIC_IP] SSL         my-ssl-lb-target-proxy
gcloud compute forwarding-rules create my-ssl-lb-ipv6-forwarding-rule \
    --global \
    --target-ssl-proxy my-ssl-lb-target-proxy \
    --address [LB_STATIC_IPV6] \
    --ports 443
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-ssl-lb-ipv6-forwarding-rule].
NAME                           REGION    IP_ADDRESS       IP_PROTOCOL TARGET
my-ssl-lb-ipv6-forwarding-rule           [LB_STATIC_IPV6] SSL         my-ssl-lb-target-proxy

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

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

Console


  1. Google Cloud Platform Console で [ファイアウォール ルール] ページに移動します。
    [ファイアウォール ルール] ページに移動
  2. [ファイアウォール ルールの作成] をクリックします。
  3. [名前] に「allow-ssl-lb-and-health」と入力します。
  4. [ネットワーク] で default を選択します。
  5. [ターゲット] で [指定されたターゲットタグ] を選択します。
  6. [ターゲットタグ] を ssl-lb に設定します。
  7. [ソースフィルタ] を IP ranges に設定します。
  8. [ソース IP の範囲] を 130.211.0.0/22 および 35.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
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-ssl-lb-and-health].
NAME                     NETWORK SRC_RANGES                  RULES   SRC_TAGS TARGET_TAGS
allow-ssl-lb-and-health default 130.211.0.0/22,35.191.0.0/16 tcp:443          ssl-lb

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

gcloud beta compute ssl-certificates list

ロードバランサのテスト

ウェブブラウザで、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]

その他の SSL プロキシ コマンド

ターゲット SSL プロキシのリストを表示

Console


Google Cloud Platform コンソールのターゲット プロキシ リストページに移動します。
ターゲット プロキシ リストページに移動

gcloud


gcloud compute target-ssl-proxies list
NAME                   PROXY_HEADER SERVICE   SSL_CERTIFICATES
my-ssl-lb-target-proxy NONE         my-ssl-lb my-ssl-cert

ターゲット SSL プロキシの定義を表示

Console


  1. Google Cloud Platform コンソールのターゲット プロキシ リストページに移動します。
    ターゲット プロキシ リストページに移動
  2. ターゲット SSL プロキシの名前をクリックします。

gcloud


gcloud compute target-ssl-proxies describe [PROXY_NAME]

creationTimestamp: '2016-02-20T20:55:17.633-08:00'
id: '9208913598676794842'
kind: compute#targetSslProxy
name: my-ssl-lb-target-proxy
proxyHeader: NONE
selfLink: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy
service: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-ssl-lb
sslCertificates:

  • https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/sslCertificates/my-ssl-cert

ターゲット SSL を削除

ターゲット プロキシを削除するには、まず、そのターゲット プロキシを参照しているグローバル転送ルールを削除する必要があります。

Console


  1. Google Cloud Platform コンソールのグローバル転送ルール リストページに移動します。
    グローバル転送ルール リストページに移動
  2. グローバル転送ルールの隣にあるチェックボックスを選択します。
  3. [削除] をクリックします。
  4. Google Cloud Platform コンソールのターゲット プロキシ リストページに移動します。
    ターゲット プロキシ リストページに移動
  5. ターゲット SSL プロキシの隣のチェック ボックスを選択します。
  6. [削除] をクリックします。

または、次の手順を実行し、すべてのロードバランサ コンポーネントを削除することができます。

  1. Google Cloud Platform Console の [負荷分散] ページに移動します。
    [負荷分散] ページに移動
  2. 削除する行の右側にある、ゴミ箱アイコンをクリックします。
  3. [ロードバランサを削除] をクリックします。

gcloud


  1. グローバル転送ルールを削除します。

    gcloud compute forwarding-rules delete my-ssl-lb-forwarding-rule \
        --global
    

    The following global forwarding rules will be deleted:

    • [my-ssl-lb-forwarding-rule]

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

    Deleted [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-ssl-lb-forwarding-rule].

  2. SSL プロキシを削除します。

    gcloud compute target-ssl-proxies delete my-ssl-lb-target-proxy
    

    The following target ssl proxies will be deleted:

    • [my-ssl-lb-target-proxy]

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

    Deleted [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy].

ターゲット SSL プロキシのバックエンド サービスの更新

update コマンドを使用して、SSL プロキシの指し先を別のバックエンド サービスに変更できます。この例では、新しいバックエンド サービスを作成し、それにプロキシのトラフィックを向かわせます。次に更新コマンドを実行して、プロキシが元のバックエンド サービスを指すようにします。

Console


このステップでは、gcloud コマンドライン ツールを使用します。

gcloud


  1. 同じヘルスチェックを使用して、2 番目のバックエンド サービスを作成します。

    gcloud compute backend-services create my-other-backend-service \
        --protocol SSL \
        --health-checks my-ssl-health-check \
        --global
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-other-backend-service].
    NAME                     BACKENDS PROTOCOL
    my-other-backend-service          SSL
  2. SSL プロキシのバックエンド サービスを新しいバックエンドに更新します。

    gcloud compute target-ssl-proxies update my-ssl-lb-target-proxy \
        --backend-service my-other-backend-service
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy].
  3. このバックエンド サービスにはインスタンスが含まれていないため、この時点でプロキシを使用しようとしても、ウェブページは取得できません。元の構成でテストを続行するには、SSL プロキシの指し先を最初のバックエンド サービスに戻します。

    gcloud compute target-ssl-proxies update my-ssl-lb-target-proxy \
        --backend-service my-ssl-lb
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy].

ターゲット SSL プロキシの SSL 証明書リソースの更新

このコマンドを使用して、SSL プロキシの SSL 証明書を置き換えます。必要な SSL 証明書リソースがすでに作成されている必要があります。

Console


  1. Google Cloud Platform Console の [負荷分散] ページに移動します。
    [負荷分散] ページに移動
  2. ロードバランサの隣にある [編集] をクリックします。
  3. [フロントエンドの設定] をクリックします。
  4. [証明書] プルダウン メニューで、新しい証明書を選択します。
  5. 証明書を追加する必要がある場合は、[Add certificate] をクリックします。
  6. [完了] をクリックします。

gcloud


最大 10 枚の SSL 証明書を使用する場合:

gcloud compute target-ssl-proxies set-ssl-certificates {PROXY_NAME] \
    --ssl-certificates [SSL_CERT_1][,[SSL_CERT_2],...]

[https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy] が更新されました。

オプション パラメータ

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

SSL プロキシを使用した Google Cloud Load Balancing では、クライアントからの SSL 接続を終端して、インスタンスへの新しい接続を作成します。したがって、デフォルトでは、元のクライアント IP やポート情報は保持されません。

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

TCP と SSL のヘルスチェックに PROXY プロトコルを設定することもできます。

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

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

クライアント IP アドレスが 192.0.2.1、負荷分散 IP アドレスが 198.51.100.1、クライアント ポートが 15221、宛先ポートが 443 の場合、次の例のようになります。

PROXY TCP4 192.0.2.1 198.51.100.1 15221 443\r\n

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

PROXY UNKNOWN\r\n

プロキシの PROXY プロトコル ヘッダーの更新

このコマンドを使用して、既存のターゲット SSL プロキシの PROXY プロトコル ヘッダーを変更します。

Console


  1. Google Cloud Platform Console の [負荷分散] ページに移動します。
    [負荷分散] ページに移動
  2. ロードバランサの [編集] をクリックします。
  3. [フロントエンドの設定] をクリックします。
  4. [プロキシ プロトコル] フィールドの値を変更します。
  5. [保存] をクリックして、変更を保存します。

gcloud


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

接続ドレイン

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

ロードバランサ コンポーネント

ヘルスチェック

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

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

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

インスタンスのヘルスチェック プローブは、範囲 130.211.0.0/2235.191.0.0/16 のアドレスから受信します。ファイアウォール ルールで、関連ポートでのこれらの接続を許可する必要があります。手順については、SSL ロードバランサのファイアウォール ルールを作成するをご覧ください。

ヘルスチェックについて詳しくは、ヘルスチェックをご覧ください。

バックエンド サービス

バックエンド サービス リソースは、ロードバランサに次のような構成情報を提供します。

  • バックエンド サービスは、接続されている 1 つまたは複数のバックエンドに受信トラフィックを振り分けます(後述の負荷分散モードによって決定されます)。各バックエンドは 1 つのインスタンス グループと、そのインスタンス グループ内のインスタンス間のトラフィックを調整する追加構成で構成されています。各インスタンス グループは、1 つ以上のインスタンスで構成されています。
  • 各バックエンド サービスは、バックエンド サービスに追加されたインスタンス グループのインスタンスに対して実行されるヘルスチェックも指定します。
  • ロードバランサを介したアイドル SSL プロキシ接続の存続期間は、バックエンド サービスのタイムアウトによって制限されます。

バックエンド サービスを構成する場合は、インスタンスを追加し、ロードバランサがインスタンスに送信できるトラフィック量を決定する分散モードを指定する必要があります。上限に達すると、次にユーザーに最も近いインスタンスに追加のリクエストが送信されます。

SSL プロキシでは、次の分散モードがサポートされています。

  • UTILIZATION(デフォルト): インスタンス グループの平均 CPU 使用率が指定された値を下回った場合に、インスタンスがトラフィックを受け入れます。この値を設定するには、--max-utilization パラメータを使用し、0.0(0%)~1.0(100%)の値を渡します。デフォルトは 0.8(80%)です。
  • CONNECTION: 接続数が指定された値を下回った場合に、インスタンスがトラフィックを受け入れます。この値は、次のいずれかに設定できます。
    • --max-connections: インスタンス グループ内のすべてのバックエンド インスタンスにわたる接続の最大数。
    • --max-connections-per-instance: 1 つのインスタンスが処理できる接続の最大数。グループの平均がこの数を超えていない場合、リクエストは転送されます。

分散モードを UTILIZATION に設定していても、--max-connections または --max-connections-per-instance を指定できます。--max-utilization と接続パラメータの両方が指定されている場合、いずれかの上限に到達すると、グループはすべて使用されているとみなされます。

バックエンド サービス リソースについて詳しくは、バックエンド サービスについて理解するをご覧ください。

SSL 証明書

SSL 負荷分散を使用するには、ロードバランサのターゲット プロキシで使用できる SSL 証明書を少なくとも 1 つ作成しておく必要があります。最大 15 個の SSL 証明書を使用してターゲット プロキシを構成できます。

これらの証明書は、セルフマネージド証明書でも Google マネージド証明書でも構いません。

セルフマネージド SSL 証明書を使用していて、秘密鍵と署名済み証明書がない場合は、テスト用に自己署名証明書を作成して使用できます。詳細については、SSL 証明書を参照してください。自己署名証明書は本番環境では使用しないでください。複数の SSL 証明書を使用している場合は、証明書ごとに SSL 証明書リソースを作成する必要があります。

転送ルール

特定の IP アドレスとポートをターゲット SSL プロキシに転送する転送ルールを作成します。顧客のトラフィックが外部 IP アドレスに到達すると、この転送ルールによって、そのトラフィックを SSL プロキシに送信するようにネットワークに伝達されます。

詳しくは、転送ルールをご覧ください。

推奨事項

  • クライアントの接続情報を保持する必要がある場合、PROXY プロトコル(バージョン 1)のヘッダーを先頭に追加してロードバランサを構成する必要があります。
  • トラフィックが HTTPS である場合、負荷分散には SSL プロキシではなく HTTPS 負荷分散を使用する必要があります。

モニタリング

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

トラブルシューティング

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

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

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

gcloud compute backend-services get-health my-ssl-lb
---
backend: https://www.googleapis.com/resourceviews/v1/projects/[PROJECT_ID]/zones/us-central1-b/resourceViews/us-ig1
status:
  kind: compute#backendServiceGroupHealth
---
backend: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2
status:
  kind: compute#backendServiceGroupHealth

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

  • ヘルスチェックとロードバランサを実行するには、130.211.0.0/2235.191.0.0/16 の IP アドレス範囲のトラフィックを許可する必要があります。
  • ロードバランサとインスタンス間で SSL を使用する場合は、SSL ヘルスチェックを使用します。ファイアウォールルールがソース IP アドレス範囲 130.211.0.0/22 および 35.191.0.0/16 からの tcp:443 を許可していることを確認します。
  • ロードバランサとインスタンス間で TCP を使用する場合は、TCP ヘルスチェックを使用します。ファイアウォール ルールがソース IP 範囲 130.211.0.0/22 および 35.191.0.0/16 からの tcp:80 を許可していることを確認します。
  • インスタンス タグを使用している場合は、タグがファイアウォール ルールの TARGET_TAGS の下にあることを確認し、すべてのインスタンスにそのタグが付いていることを確認します。この例では、インスタンスには ssl-lb のタグが付けられています。
gcloud compute firewall-rules list
NAME                      NETWORK SRC_RANGES                  RULES                        SRC_TAGS TARGET_TAGS
allow-ssl-lb-and-health  default 130.211.0.0/22,35.191.0.0/16 tcp:443                      ssl-lb

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

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

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

    gcloud compute firewall-rules create allow-ssl-0-0-0-0   \
        --source-ranges 0.0.0.0/0   \
        --target-tags ssl-lb    \
        --allow tcp:443
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-ssl-0-0-0-0].
    NAME              NETWORK SRC_RANGES RULES   SRC_TAGS TARGET_TAGS
    allow-ssl-0-0-0-0 default 0.0.0.0/0  tcp:443          ssl-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 つ以上のインスタンスにアクセスします。

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

    gcloud compute firewall-rules describe allow-ssl-lb-and-health
    
    allowed:
      IPProtocol: tcp
      ports:
      '443'
    creationTimestamp: '2016-02-20T22:27:15.094-08:00'
    description: ''
    id: '5304629236729177644'
    kind: compute#firewall
    name: allow-130-211-0-0-22-ssl
    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-ssl-lb-and-health
    sourceRanges:
      130.211.0.0/22,35.191.0.0/16
    targetTags:
      ssl-lb
  5. インスタンスが動作していることを確認したら、「from anywhere」(どこからも許可)のファイアウォール ルールを削除します。

    gcloud compute firewall-rules delete allow-ssl-0-0-0-0
    
    The following firewalls will be deleted:
       [allow-ssl-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-ssl-0-0-0-0].

次のステップ

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

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