クロスリージョン負荷分散の作成

このガイドでは、2 つの異なるリージョン内のインスタンスにトラフィックを転送する HTTP(S) ロードバランサを作成する方法について説明します。URL のホストまたはパスに基づいてユーザーのリクエストを転送する必要がある場合は、コンテンツ ベースの例を参照してください。

概要

このシナリオでは、2 つの異なるリージョンに Compute Engine インスタンスを 2 つずつ、合計 4 つを作成します。その後、適切なインスタンスに受信接続が送信されるように、システムの残りの部分を設定します。

以下の図は、作成するリソースの関連性を示しています。

クロスリージョンの HTTP(S) 負荷分散(クリックで拡大)
クロスリージョンの HTTP(S) 負荷分散(クリックで拡大)

始める前に

以下の手順は、自動モードの VPC ネットワークまたはレガシー ネットワークを使用していることを前提とします。カスタムモードの VPC ネットワークを使用している場合、インスタンスの作成など、一部の手順でサブネットの範囲を追加で指定する必要があります。

コマンドラインから作業する場合は、事前準備ページの説明に沿って gcloud コマンドライン ツールをインストールします。

gcloud コマンドライン ツールをまだ一度も実行したことがない場合は、まず gcloud init を実行して認証を行います。

インスタンスの設定

  1. この例では、2 つの異なるリージョンのそれぞれに仮想マシン インスタンスを 2 つ作成し、テスト用にそれらを設定して、すべてに同じタグを設定します。このタグは、受信トラフィックがインスタンスに到達するのを許可するファイアウォール ルールによって使用されます。

    起動スクリプトは Apache をインストールし、各インスタンス用の固有のホームページを作成します。

    Console


    1. Google Cloud Platform Console の [VM インスタンス] ページに移動します。
      [VM インスタンス] ページに移動
    2. [インスタンスを作成] をクリックします。
    3. [名前] は、HTTP の場合は www-1 に設定し、HTTPS の場合は wwws-1 に設定します。
    4. [ゾーン] を us-central1-b に設定します。
    5. [管理、ディスク、ネットワーキング、SSH 認証鍵] をクリックして拡張設定を表示します。
    6. [ネットワーキング] をクリックします。
      • HTTP トラフィックの場合は、[タグ] フィールドに「http-tag」と入力します。
      • HTTPS トラフィックの場合は、[タグ] フィールドに「https-tag」と入力します。
      • 両方のタイプのトラフィックを使用する場合は、[タグ] フィールドに両方のタグを入力します。
    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>server 1</h1></body></html>' | sudo tee /var/www/html/index.html
    8. 残りのフィールドはデフォルト値のままにします。
    9. [作成] をクリックします。
    10. 同じ設定を使用して www-2 または wwws-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>server 2</h1></body></html>' | sudo tee /var/www/html/index.html
    11. 同じ設定を使用して www-3 または wwws-3 を作成します。ただし、[ゾーン] は europe-west1-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>server 3</h1></body></html>' | sudo tee /var/www/html/index.html
    12. 同じ設定を使用して www-4 または wwws-4 を作成します。ただし、[ゾーン] は europe-west1-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>server 4</h1></body></html>' | sudo tee /var/www/html/index.html

    gcloud: HTTP


    gcloud compute instances create www-1 \
        --image-family debian-8 \
        --image-project debian-cloud \
        --zone us-central1-b \
        --tags http-tag \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>www-1</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    gcloud compute instances create www-2 \
        --image-family debian-8 \
        --image-project debian-cloud \
        --zone us-central1-b \
        --tags http-tag \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>www-2</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    gcloud compute instances create www-3 \
        --image-family debian-8 \
        --image-project debian-cloud \
        --zone europe-west1-b \
        --tags http-tag \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>www-3</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    gcloud compute instances create www-4 \
        --image-family debian-8 \
        --image-project debian-cloud \
        --zone europe-west1-b \
        --tags http-tag \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>www-4</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    

    gcloud: HTTPS


    gcloud compute instances create wwws-1 \
        --image-family debian-8 \
        --image-project debian-cloud \
        --zone us-central1-b \
        --tags https-tag \
        --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>wwws-1</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    gcloud compute instances create wwws-2 \
        --image-family debian-8 \
        --image-project debian-cloud \
        --zone us-central1-b \
        --tags https-tag \
        --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>wwws-2</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    gcloud compute instances create wwws-3 \
        --image-family debian-8 \
        --image-project debian-cloud \
        --zone europe-west1-b \
        --tags https-tag \
        --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>wwws-3</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    gcloud compute instances create wwws-4 \
        --image-family debian-8 \
        --image-project debian-cloud \
        --zone europe-west1-b \
        --tags https-tag \
        --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>wwws-4</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    

  2. 仮想マシン インスタンスへの外部トラフィックを許可するファイアウォール ルールを作成します。このルールにより、すべてのソースからのトラフィックが許可されます。これは、構成のセットアップやテストを行う場合に便利です。後で、負荷分散サービス以外のソースからの HTTP(S) トラフィックを無効にするオプションを設定できます。このファイアウォール ルールでは、以前作成した http-tag タグまたは https-tag タグが使用されます。このファイアウォール ルールによって、指定ポート上のタグを持つインスタンスにトラフィックが到達できるようになります。

    Console


    1. GCP Console の [ファイアウォール] ページに移動します。
      [ファイアウォール] ページに移動
    2. [ファイアウォール ルールの作成] をクリックします。
    3. [名前] を www-firewall に設定します。
    4. ネットワークは default のままにします。
    5. [ターゲットタグ] フィールドに次のいずれかを入力します。少なくとも 1 つのタグが必要です。
      • ロードバランサとバックエンドの間で HTTP を使用する場合は、http-tag に設定します。
      • ロードバランサとバックエンドの間で HTTPS を使用する場合は、https-tag に設定します。
      • HTTP と HTTPS の両方を使用する場合は、一方のタグを追加して Enter キーを押してから、もう一方のタグを追加します。
    6. [ソース IP の範囲] フィールドを 0.0.0.0/0 に設定します。
    7. [プロトコルとポート] を次のいずれかに設定します。
      • ロードバランサとバックエンドの間で HTTP を使用する場合は、tcp:80 に設定します。
      • ロードバランサとバックエンドの間で HTTPS を使用する場合は、tcp:443 に設定します。
      • ロードバランサとバックエンドの間で HTTP と HTTPS の両方を使用する場合は、tcp:80,443 に設定します。
    8. [作成] をクリックします。新しいファイアウォール ルールが Console に表示されるまでに時間がかかることがあります。また、ルールを表示するために [更新] をクリックする必要がある場合があります。

    gcloud: HTTP


    gcloud compute firewall-rules create www-firewall \
        --target-tags http-tag --allow tcp:80
    

    gcloud: HTTPS


    gcloud compute firewall-rules create www-firewall \
        --target-tags https-tag --allow tcp:443
    

  3. インスタンスが実行されていることを確認します。

    Console


    1. GCP Console の [VM インスタンス] ページに移動します。
      [VM インスタンス] ページに移動。新しく実行されたインスタンスの横の [名前] 列に緑のチェックマークが表示されます。
    2. インスタンスの [外部 IP] をコピーしてブラウザに貼り付けます。
    3. (HTTPS のみ)ブラウザの IP アドレスの前に https:// を追加します。インスタンス上に証明書がない場合、または自己署名証明書しかない場合は、有効な証明書がないことを知らせるブラウザの警告を受け入れる必要があります。

    gcloud: HTTP


    1. 次のコマンドを実行してインスタンスを一覧表示し、EXTERNAL_IP 列から IP アドレスを取得します。

      gcloud compute instances list
      
    2. インスタンスごとに curl を実行して、各インスタンスが応答することを確認します。

      curl http://IP_ADDRESS
      

    gcloud: HTTPS


    1. 次のコマンドを実行してインスタンスを一覧表示し、EXTERNAL_IP 列から IP アドレスを取得します。

      gcloud compute instances list
      
    2. インスタンスごとに curl を実行して、各インスタンスが応答することを確認します。

      curl -k https://IP_ADDRESS
      

負荷分散サービスに必要なサービスの構成

インスタンスを実行できるようになったので、次に負荷分散に必要なサービスをセットアップします。次のサービスを作成します。

これらのサービスを構成する手順は次のとおりです。

  1. ロードバランサ用の IPv4 および IPv6 グローバル静的外部 IP アドレスを作成します。

    Console


    1. GCP Console の [外部 IP アドレス] ページに移動します。
      [外部 IP アドレス] ページに移動
    2. [静的アドレスを予約] をクリックして、IPv4 アドレスを予約します。
    3. [名前] を lb-ip-cr に設定します。
    4. [タイプ] を [グローバル] に設定します。
    5. [予約] をクリックします。
    6. もう一度、[静的アドレスを予約] をクリックして、IPv6 アドレスを予約します。
    7. [名前] を lb-ipv6-cr に設定します。
    8. [IP バージョン] を [IPv6] に設定します。
    9. [タイプ] を [グローバル] に設定します。
    10. [予約] をクリックします。

    gcloud: HTTP


    gcloud compute addresses create lb-ip-cr \
        --ip-version=IPV4 \
        --global
    

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

    gcloud: HTTPS


    gcloud compute addresses create lb-ip-cr \
        --ip-version=IPV4 \
        --global
    

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

  2. ゾーンごとにインスタンス グループを作成します。

    Console


    1. GCP Console の [インスタンス グループ] ページに移動します。
      [インスタンス グループ] ページに移動
    2. [インスタンス グループを作成] をクリックします。
    3. [名前] は、HTTP の場合は us-resources-w に設定し、HTTPS の場合は us-resources-s に設定します。
    4. [ゾーン] を us-central1-b に設定します。
    5. [グループタイプ] で [非マネージド インスタンス グループ] を選択します。
    6. [ネットワーク] と [サブネットワーク] を選択します。
    7. [VM インスタンス] で、HTTP の場合は www-1www-2 を選択し、HTTPS の場合は wwws-1wwws-2 を選択します。
    8. その他の設定はそのままにします。
    9. [作成] をクリックします。
    10. 上記の手順を繰り返します。その際、次のフィールドの設定を変更します。
      • [名前]: HTTP の場合は europe-resources-w、HTTPS の場合は europe-resources-s
      • [ゾーン]: europe-west1-b
      • [インスタンス]: HTTP の場合は www-3www-4、HTTPS の場合は wwws-3wwws-4
    11. 2 つのインスタンス グループが作成され、各インスタンス グループに 2 つのインスタンスが含まれることを確認します。

    gcloud: HTTP


    gcloud compute instance-groups unmanaged create us-resources-w --zone us-central1-b
    
    gcloud compute instance-groups unmanaged create europe-resources-w --zone europe-west1-b
    

    gcloud: HTTPS


    gcloud compute instance-groups unmanaged create us-resources-s --zone us-central1-b
    
    gcloud compute instance-groups unmanaged create europe-resources-s --zone europe-west1-b
    

  3. 以前に作成したインスタンスをインスタンス グループに追加します。

    Console


    前のステップで実施済みのためこのステップは不要です。

    gcloud: HTTP


    gcloud compute instance-groups unmanaged add-instances us-resources-w \
        --instances www-1,www-2 \
        --zone us-central1-b
    
    gcloud compute instance-groups unmanaged add-instances europe-resources-w \
        --instances www-3,www-4 \
        --zone europe-west1-b
    

    gcloud: HTTPS


    gcloud compute instance-groups unmanaged add-instances us-resources-s \
        --instances wwws-1,wwws-2 \
        --zone us-central1-b
    
    gcloud compute instance-groups unmanaged add-instances europe-resources-s \
        --instances wwws-3,wwws-4 \
        --zone europe-west1-b
    

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

    Console


    ロードバランサとバックエンドの間で HTTP を使用する場合には、HTTP の gcloud コマンドを実行します。ロードバランサとバックエンドの間で HTTPS を使用する場合には、HTTPS の gcloud コマンドを実行します。両方を使用する場合には、両方のコマンドを実行します。

    gcloud: HTTP


    gcloud compute health-checks create http http-basic-check
    

    gcloud: HTTPS


    gcloud compute health-checks create https https-basic-check \
        --port 443
    

負荷分散サービスの設定

ロードバランサ機能には、連携する複数のサービスが含まれます。このセクションではサービスをセットアップし、それらを連携させます。次のサービスを作成します。

  • 名前付きポート。ロードバランサはこれを使用して、トラフィックをインスタンス グループに転送します。
  • バックエンド サービス。これはインスタンスの使用状況と健全性をモニタリングします。バックエンド サービスは、インスタンス グループ内のインスタンスがトラフィックを受け取ることかできるかどうかを認識します。トラフィックを受け取ることができない場合は、十分に活用されていないインスタンスが別の場所にあれば、ロードバランサはトラフィックをその場所にリダイレクトします。
  • URL マップ。これはリクエストの URL を解析し、リクエスト URL のホストとパスに基づいて特定のリクエストを特定のバックエンド サービスに転送します。この例ではコンテンツベースの転送を使用しないため、URL マップに含まれるのはデフォルトのマッピングのみです。
  • 1 つ以上の SSL 証明書リソース(HTTPS を使用する場合)。これにはロードバランサの SSL 証明書情報が含まれます。複数の SSL 証明書が使用可能で、証明書ごとに SSL 証明書リソースを作成する必要があります。
  • HTTPS を使用している場合は、オプションとして SSL ポリシー
  • ターゲット プロキシ。ユーザーからのリクエストを受け取り、それを URL マップに転送します。ターゲット プロキシは、SSL 証明書リソースを使用して SSL トラフィックを復号化するサービスです。ターゲット プロキシは、HTTP または HTTPS でインスタンスをトラフィックに転送できます。
  • 2 つのグローバル転送ルール(IPv4 と IPv6 のそれぞれで 1 つずつ)。グローバル外部 IP アドレス リソースを保持します。グローバル転送ルールは、受信リクエストをターゲット プロキシに転送します。

Console


ロードバランサ構成の開始

  1. GCP Console の [ロードバランサの作成] ページに移動します。
    [ロードバランサの作成] ページに移動
  2. [HTTP(S) 負荷分散] で [設定を開始] をクリックします。
  3. ロードバランサの [名前] として「web-map」と入力します。

バックエンドの設定

トラフィックを処理するデフォルトのバックエンド サービスを設定します。

  1. [新しい HTTP(S) ロードバランサ] ページの左パネルで [バックエンドの設定] をクリックします。
  2. [バックエンド サービスとバックエンド バケットの作成または選択] プルダウン メニューで、[バックエンド サービス]、[バックエンド サービスを作成] の順に選択します。[バックエンド サービスの作成] ダイアログ ボックスが開きます。
  3. バックエンド サービスの [名前] を web-map-backend-service に設定します。
  4. [プロトコル] を設定します。
    • HTTP プロトコルの場合は、デフォルト値のままにします。
    • HTTPS プロトコル(推奨)の場合は、[編集] 鉛筆アイコンをクリックし、[プロトコル] を HTTPS に、[名前付きポート] を https にそれぞれ設定します。
  5. [バックエンド] で、HTTP または HTTPS のどちらを設定しているかに応じて、[インスタンス グループ] を us-resources-w または us-resources-s に設定します。
  6. [ポート番号] を設定します。
    • ロードバランサとインスタンスの間で HTTP トラフィックを使用する場合は、[ポート番号] を 80 のままにします。
    • ロードバランサとインスタンスの間で HTTPS トラフィックを使用する場合は、[ポート番号] を 443 に設定します。
  7. 残りのフィールドはデフォルト値のままにします。
  8. [バックエンドを追加] をクリックします。
  9. HTTP または HTTPS のどちらを設定しているかに応じて、europe-resources-w または europe-resources-s インスタンス グループを選択します。
    • ロードバランサとインスタンスの間で HTTP トラフィックを使用する場合は、[ポート番号] を 80 のままにします。
    • ロードバランサとインスタンスの間で HTTPS トラフィックを使用する場合は、[ポート番号] を 443 に設定します。
  10. 残りのフィールドはデフォルト値のままにします。
  11. [完了] をクリックします。
  12. HTTP または HTTPS のどちらを設定しているかに応じて、[ヘルスチェック] を http-basic-check または https-basic-check に設定します。これは上記の [ポート番号] の設定と一致している必要があります。ポート番号を 80 に設定している場合は、HTTP ヘルスチェックを使用します。ポート番号を 443 に設定した場合は、HTTPS ヘルスチェックを使用します。
  13. [作成] をクリックします。

ホストとパスのルール

  1. [新しい HTTP(S) ロードバランサ] ページの左パネルで [ホストとパスのルール] をクリックします。
    この例では、すべてのトラフィックがデフォルト ルールに従うため、ホストまたはパスのルールを設定する必要はありません。したがって、事前設定されたデフォルト値をそのまま使用します。

フロントエンドの設定

クライアントとロードバランサ間で HTTPS を使用している場合は、プロキシを構成するための SSL 証明書リソースが少なくとも 1 つ必要です。証明書がない場合は、テスト用に自己署名の SSL 証明書を作成する方法について、SSL 証明書をご覧ください。本番環境用に自己署名証明書を使用しないでください。

フロントエンド構成の事前設定されたデフォルト値は次のとおりです。

  • [名前] は、自動作成される転送ルールの前にロードバランサ名を付加したものになります。たとえば、ロードバランサの名前が test-lb. の場合、名前は test-lb-2-forwarding-rule になります。
  • [プロトコル] は http. です。
  • [IP アドレス] は、自動的に割り当てられた、名前のないエフェメラル外部 IP アドレスになります(例: 35.227.225.169)。
  • [ポート] は 80. です。

フロントエンドを構成する手順は次のとおりです。

  1. [新しい HTTP(S) ロードバランサ] ページの左パネルで [フロンドエンドの設定] をクリックします。
  2. [名前] を http-cr-rule に設定します。
  3. [プロトコル] を設定します。
    • クライアントとロードバランサの間で HTTPS を使用する場合は、HTTPS を選択します。
    • クライアントとロードバランサの間で HTTP を使用する場合は、HTTP を選択します。
  4. [IP バージョン] を IPv4 に設定します。
  5. [IP アドレス] フィールドで、先ほど作成した lb-ip-cr を選択します。
  6. HTTP を使用する場合は [ポート] を 80 のままにします。HTTPS トラフィックの場合、ポートはデフォルトで 443 に設定され、変更できません。
  7. (HTTPS のみ)プライマリ SSL 証明書として使用する SSL 証明書リソースがすでに存在する場合は、[証明書] プルダウン メニューからそれを選択します。そうでない場合は、[新しい証明書の作成] を選択します。
    1. [名前] に「www-ssl-cert」と入力します。
    2. 次のファイルをアップロードするか(推奨)、次のファイルの内容をコピーして適切なフィールドに貼り付けます。
      • 公開鍵証明書(.crt ファイル)
      • 証明書チェーン(.csr ファイル)
      • 秘密鍵(.key ファイル)
    3. [作成] をクリックします。
  8. (HTTPS のみ)プライマリ SSL 証明書リソースに加えてさらに証明書リソースを追加するには、次の手順に沿って操作します。
    1. [証明書を追加] をクリックします。
    2. [証明書] リストから証明書を選択するか、[新しい証明書の作成] をクリックして上記の手順に沿って操作します。
  9. [完了] をクリックします。
  10. [Add frontend IP and port] をクリックします。
  11. [名前] として「http-cr-ipv6-rule」と入力します。
  12. [プロトコル] を設定します。
    • クライアントとロードバランサの間で HTTPS を使用する場合は、HTTPS を選択します。
    • クライアントとロードバランサの間で HTTP を使用する場合は、HTTP を選択します。
  13. [IP バージョン] を IPv6 に設定します。
  14. [IP] で、先ほど作成した lb-ipv6-cr を選択します。
  15. HTTP を使用する場合は [ポート] を 80 のままにします。HTTPS トラフィックの場合、ポートはデフォルトで 443 に設定され、変更できません。
  16. (HTTPS のみ)使用する SSL 証明書リソースがすでに存在する場合は、[証明書] プルダウン メニューからそれを選択します。存在しない場合は、
    [新しい証明書の作成] を選択します。
    1. [名前] に「www-ssl-cert」と入力します。
    2. 次のファイルをアップロードするか(推奨)、次のファイルの内容をコピーして適切なフィールドに貼り付けます。
      • 公開鍵証明書(.crt ファイル)
      • 証明書チェーン(.csr ファイル)
      • 秘密鍵(.key ファイル)
    3. [作成] をクリックします。
  17. (HTTPS のみ)プライマリ SSL 証明書リソースに加えてさらに証明書リソースを追加するには、次の手順に沿って操作します。
    1. [証明書を追加] をクリックします。
    2. [証明書] リストから証明書を選択するか、[新しい証明書の作成] をクリックし、上記の手順に沿います。
  18. (HTTPS のみ)オプションで SSL ポリシーを作成するには、次の手順に沿って操作します。
    1. [SSL ポリシー] で、[ポリシーを作成] を選択します。
    2. [名前] として「my-ssl-policy」と入力します。
    3. [TLS の最小バージョン] で [TLS 1.0] を選択します。
    4. [プロファイル] で [モダン] を選択します。[有効な機能] と [無効な機能] が表示されます。
    5. [作成] をクリックします。
  19. (HTTPS のみ)[QUIC ネゴシエーション] 設定を変更するには、[有効] または [無効] を選択します。
  20. [完了] をクリックします。

確認と完了

  1. [新しい HTTP(S) ロードバランサ] ページで [確認と完了] をクリックします。
  2. 設定した項目が意図したとおりであることを確認します。
  3. 設定が正しい場合は、[作成] をクリックします。負荷分散画面に戻ります。ロードバランサが作成されると、その横に緑のチェックマークが付きます。これはロードバランサが実行中であることを示します。

gcloud: HTTP


  1. インスタンス グループごとに HTTP サービスを定義し、ポート名を該当するポートにマッピングします。

    gcloud compute instance-groups unmanaged set-named-ports us-resources-w \
        --named-ports http:80 \
        --zone us-central1-b
    

    gcloud compute instance-groups unmanaged set-named-ports europe-resources-w \
        --named-ports http:80 \
        --zone europe-west1-b
    

  2. バックエンド サービスを作成し、そのパラメータを指定します。インスタンスへの移動に HTTP を使用しているため、--protocol フィールドを HTTP に設定します。以前ヘルスチェックとして作成した http-basic-check ヘルスチェックを使用します。

    gcloud compute backend-services create web-map-backend-service \
        --protocol HTTP \
        --health-checks http-basic-check \
        --global
    

  3. インスタンス グループをバックエンドとしてバックエンド サービスに追加します。バックエンドに含まれるインスタンス グループの容量(1 秒あたりの最大 CPU 使用率または最大照会数)をバックエンドで定義します。この例では、バランシング モードを CPU 使用率に、最大使用率を 80% に、容量スケーリングを 1 に設定します。バックエンド サービスをドレインする場合は、容量スケーリングを 0 に設定します。

    gcloud compute backend-services add-backend web-map-backend-service \
        --balancing-mode UTILIZATION \
        --max-utilization 0.8 \
        --capacity-scaler 1 \
        --instance-group us-resources-w \
        --instance-group-zone us-central1-b \
        --global
    

    gcloud compute backend-services add-backend web-map-backend-service \
        --balancing-mode UTILIZATION \
        --max-utilization 0.8 \
        --capacity-scaler 1 \
        --instance-group europe-resources-w \
        --instance-group-zone europe-west1-b \
        --global
           

  4. すべてのインスタンスへの受信リクエストをすべて振り向けるデフォルトの URL マップを作成します。

    gcloud compute url-maps create web-map \
        --default-service web-map-backend-service
    

  5. URL マップにリクエストの経路を指定するターゲット HTTP プロキシを作成します。

    gcloud compute target-http-proxies create http-lb-proxy \
        --url-map web-map
    

  6. ロードバランサ用に作成した静的 IP アドレスを調べます。次のステップでそれらを使用します。

    gcloud compute addresses list
    

  7. 受信リクエストをプロキシにルーティングする 2 つのグローバル転送ルール(1 つは IPv4 用でもう 1 つは IPv6 用)を作成します。コマンド内の [LB_IP_ADDRESS] を、作成した静的 IPv4 アドレスに置き換えます。[LB_IPV6_ADDRESS] を、作成した IPv6 アドレスに置き換えます。gcloud compute addresses list を使用してそれらを見つけることができます。

        gcloud compute forwarding-rules create http-cr-rule \
        --address [LB_IP_ADDRESS] \
        --global \
        --target-http-proxy http-lb-proxy \
        --ports 80
    

    gcloud compute forwarding-rules create http-cr-ipv6-rule \
        --address [LB_IPV6_ADDRESS] \
        --global \
        --target-http-proxy http-lb-proxy \
        --ports 80
    

gcloud: HTTPS


  1. インスタンス グループごとに HTTPS サービスを定義し、ポート名を該当するポートにマッピングします。負荷分散サービスが設定されると、名前を指定したポートにトラフィックが転送されます。

    gcloud compute instance-groups unmanaged set-named-ports us-resources-s \
        --named-ports https:443 \
        --zone us-central1-b
    
    gcloud compute instance-groups unmanaged set-named-ports europe-resources-s \
        --named-ports https:443 \
        --zone europe-west1-b
    
  2. コンテンツ プロバイダごとにバックエンド サービスを作成します。インスタンスへの移動に HTTPS を使用しているため、--protocol フィールドを HTTPS に設定します。以前ヘルスチェックとして作成した https-basic-check ヘルスチェックを使用します。

    gcloud compute backend-services create web-map-backend-service \
        --protocol HTTPS \
        --health-checks https-basic-check \
        --global
    
  3. インスタンス グループをバックエンドとしてバックエンド サービスに追加します。バックエンドが含まれるインスタンス グループの容量(1 秒あたりの最大 CPU 使用率または最大照会数)をバックエンドで定義します。この例では、バランシング モードを CPU 使用率に、最大使用率を 80% に、容量スケーリングを 1 に設定します。バックエンド サービスをドレインする場合は、容量スケーリングを 0 に設定します。

    gcloud compute backend-services add-backend web-map-backend-service \
        --balancing-mode UTILIZATION \
        --max-utilization 0.8 \
        --capacity-scaler 1 \
        --instance-group us-resources-s \
        --instance-group-zone us-central1-b \
        --global
    
    gcloud compute backend-services add-backend web-map-backend-service \
        --balancing-mode UTILIZATION \
        --max-utilization 0.8 \
        --capacity-scaler 1 \
        --instance-group europe-resources-s \
        --instance-group-zone europe-west1-b \
        --global
    
  4. すべてのインスタンスへの受信リクエストをすべて振り向けるデフォルトの URL マップを作成します。リクエストされた URL に応じてトラフィックを異なるインスタンスに分割する必要がある場合は、コンテンツ ベースのルーティングをご覧ください。

    gcloud compute url-maps create web-map \
        --default-service web-map-backend-service
    
  5. HTTPS プロキシで使用する SSL 証明書リソースを作成します。秘密鍵と署名証明書がない場合は、テスト用に自己署名証明書を作成して使用できます。詳しくは SSL 証明書をご覧ください。本番環境用に自己署名証明書を使用しないでください。複数の SSL 証明書を使用している場合は、証明書ごとに SSL 証明書リソースを作成する必要があります。

    gcloud compute ssl-certificates create www-ssl-cert \
        --certificate [CRT_FILE_PATH] \
        --private-key [KEY_FILE_PATH]
    
  6. オプションとして、ロードバランサの SSL ポリシーを作成します。

    gcloud compute ssl-policies create cr_ssl_policy \
    --profile MODERN --min-tls-version 1.0
    
  7. リクエストを URL マップにルーティングするターゲット HTTPS プロキシを作成します。プロキシはロードバランサの一部であり、HTTPS 負荷分散用の SSL 証明書を保持するため、この手順で証明書も読み込みます。

    gcloud compute target-https-proxies create https-lb-proxy \
        --url-map web-map --ssl-certificates www-ssl-cert
    

  8. 受信リクエストをプロキシにルーティングする 2 つのグローバル転送ルール(1 つは IPv4 用でもう 1 つは IPv6 用)を作成します。コマンド内の [LB_IP_ADDRESS] を、作成した静的 IPv4 アドレスに置き換えます。[LB_IPV6_ADDRESS] を、作成した IPv6 アドレスに置き換えます。gcloud compute addresses list を使用してそれらを見つけることができます。

    gcloud compute forwarding-rules create https-cr-rule \
        --address [LB_IP_ADDRESS] \
        --global \
        --target-https-proxy https-lb-proxy \
        --ports 443
    

    gcloud compute forwarding-rules create https-cr-ipv6-rule \
        --address [LB_IPV6_ADDRESS] \
        --global \
        --target-https-proxy https-lb-proxy \
        --ports 443
    

グローバル転送ルールの作成後、構成が反映されるまで数分かかることがあります。

インスタンスへのトラフィックの送信

負荷分散サービスの構成が完了したので、転送ルールへのトラフィックの送信を開始できます。また、別のインスタンスに分散されるトラフィックをモニタリングできます。

Console


  1. GCP Console の [負荷分散] ページに移動します。
    [負荷分散] ページに移動
  2. web-map という名前のロードバランサをクリックして、先ほど作成したロードバランサを展開します。
  3. ページの [バックエンド] セクションで [正常] 列を見て、インスタンスが正常であることを確認します。インスタンスが正常であると示されるまでに少し時間がかかる場合があります。
  4. インスタンスが正常と表示されたら、[フロントエンド] セクションから [IP:ポート] をコピーし、ブラウザに貼り付けます。
  5. ブラウザにデフォルトのコンテンツ ページが表示されます。テスト用の自己署名証明書を使用した場合は、ブラウザに警告が表示されます。この証明書を許可することをブラウザに明示的に指示する必要があります。

gcloud: HTTP


  1. グローバル転送ルールの IP アドレスを探します。

    gcloud compute forwarding-rules list
    

  2. curl コマンドを使用して、サービスのさまざまな URL に対するレスポンスをテストします。IPv4 と IPv6 の両方を試してください。IPv6 では、アドレスを [] で囲む必要があります。たとえば、curl -g -6 "http://[2001:DB8::]/" とします。

    curl http://IPv4_ADDRESS
    

    curl -g -6 "http://[IPv6_ADDRESS]/"
    

gcloud: HTTPS


  1. グローバル転送ルールの IP アドレスを検索します。

    gcloud compute forwarding-rules list
    

  2. curl コマンドを使用して、サービスのさまざまな URL に対するレスポンスをテストします。IPv4 と IPv6 の両方を試してください。IPv6 では、アドレスを [] で囲む必要があります。たとえば、curl -g -6 "http://[2001:DB8::]/" とします。

    curl https://IPv4_ADDRESS
    

    curl -g -6 "https://[IPv6_ADDRESS]/"
    

ブラウザにデフォルトのコンテンツ ページが表示されます。テスト用の自己署名証明書を使用した場合は、ブラウザに警告が表示されます。この証明書を許可することをブラウザに明示的に指示する必要があります。

最も近いリージョンからのレスポンスが表示されます。最初にレスポンスが失敗した場合、設定が完全にロードされ、インスタンスが正常であるとマークされるまで数分待ってからもう一度やり直す必要がある場合があります。ページがリロードされるたびに他のインスタンスが表示されることがあります。別のリージョンでユーザーをシミュレートするには、ウェブプロキシでリクエストを行ってください。

または、別のリージョンにある仮想マシン インスタンスのいずれかに接続して、そのインスタンスから curl コマンドを実行し、リクエストに最も近いリージョンにあるインスタンスにリクエストが行くことを確認できます。

負荷分散サービス以外からの HTTP(S) アクセスの遮断

すべてが動作するようになったら、インスタンスへの HTTP(S) トラフィックが負荷分散サービスからのみ発生するようにファイアウォール ルールを変更します。

Console


  1. GCP Console の [ファイアウォール] ページに移動します。
    [ファイアウォール] ページに移動
  2. [ファイアウォール ルールの作成] をクリックします。
  3. [名前] に allow-lb-and-healthcheck を指定します。
  4. [VPC ネットワーク] は default のままにします。
  5. [ターゲットタグ] を http-taghttps-tag のどちらかまたはその両方に設定します。両方を指定する場合は、一方のタグを入力して Tab キーを押してから、もう一方のタグを入力します。
  6. [ソースフィルタ] は [IP 範囲] のままにしておきます。
  7. [ソース IP の範囲] を 130.211.0.0/2235.191.0.0/16 に設定します。
  8. [許可対象プロトコル / ポート] を、HTTP の場合は tcp:80 に設定し、HTTPS の場合は tcp:443 に設定します。両方の場合は tcp:80,443 に設定します。
  9. [作成] をクリックします。新しいファイアウォール ルールが Console に表示されるまでに時間がかかることがあります。

gcloud: HTTP


gcloud compute firewall-rules create allow-lb-and-healthcheck \
    --source-ranges 130.211.0.0/22,35.191.0.0/16 \
    --target-tags http-tag \
    --allow tcp:80

gcloud: HTTPS


gcloud compute firewall-rules create allow-lb-and-healthcheck \
    --source-ranges 130.211.0.0/22,35.191.0.0/16 \
    --target-tags https-tag \
    --allow tcp:443

次に、他のリソースからの HTTP(S) トラフィックを許可するルールを削除します。

Console


  1. GCP Console の [ファイアウォール] ページに移動します。
    [ファイアウォール] ページに移動
  2. www-firewall ファイアウォール ルールの横にあるチェックボックスをオンにします。
  3. [削除] をクリックします。

gcloud: HTTP


gcloud compute firewall-rules delete www-firewall

gcloud: HTTPS


gcloud compute firewall-rules delete www-firewall

最後に、対象のロードバランサはインスタンスに到達できるが、他のソースは到達できないことを確認します。

Console


  1. GCP Console の [負荷分散] ページに移動します。
    [負荷分散] ページに移動
  2. web-map という名前のロードバランサをクリックして、先ほど作成したロードバランサを展開します。[フロントエンド] セクションの IP アドレスとポートをコピーして、ブラウザに貼り付けます。
    自分のページが表示されます。
  3. GCP Console の [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  4. [外部 IP] 列に示されたインスタンスのアドレスをコピーして、ブラウザに貼り付けます。インスタンスが HTTPS 専用にセットアップされている場合は、ブラウザの IP アドレスの前に https:// を追加します。いずれの場合も、接続がタイムアウトする必要があります。インスタンスにアクセスできてはいけません。

gcloud: HTTP


  1. グローバル転送ルールの IP アドレスを検索します。

    gcloud compute addresses list
    
  2. curl コマンドを使用して、負荷分散サービスに対するレスポンスをテストします。次のコマンドでテストできます。

    curl http://IP_ADDRESS
    
  3. 各インスタンスの IP アドレスを検索し、EXTERNAL_IP 列のアドレスを記録します。

    gcloud compute instances list
    
  4. curl コマンドを使用して、個々のインスタンスに対するレスポンスをテストします。curl コマンドごとに、適切なインスタンスの EXTERNAL_IP を使用します。すべてのインスタンスがタイムアウトになります。

    curl http://EXTERNAL_IP
    

gcloud: HTTPS


  1. グローバル転送ルールの IP アドレスを検索します。

    gcloud compute addresses list
    
  2. curl コマンドを使用して、負荷分散サービスに対するレスポンスをテストします。次のコマンドでテストできます。

    curl -k https://IP_ADDRESS
    
  3. 各インスタンスの IP アドレスを検索し、EXTERNAL_IP 列のアドレスを記録します。

    gcloud compute instances list
    
  4. curl コマンドを使用して、個々のインスタンスに対するレスポンスをテストします。curl コマンドごとに、適切なインスタンスの EXTERNAL_IP を使用します。すべてのインスタンスがタイムアウトになります。

    curl -k https://EXTERNAL_IP
    

オプション: 要塞ホストを除く外部 IP の削除

HTTP(S) 負荷分散サービスは、ターゲットの外部 IP ではなく内部 IP を使用します。負荷分散サービスが動作するようになると、負荷分散サービスのターゲットから外部 IP を削除することによってセキュリティを強化でき、中間インスタンスを経由して接続することで、負荷分散されたインスタンスでタスクを実行できるようになります。これで、VPC ネットワーク外部のユーザーは、ロードバランサ経由以外の方法ではアクセスできなくなります。

通常、この目的で指定された外部 IP アドレスを持つ VPC ネットワーク内に 1 つ以上のインスタンスを保持する必要があります。外部 IP アドレスを持つインスタンスから、外部 IP アドレスを持たないインスタンスに接続する方法については、1 つのインスタンスから別のインスタンスへの接続を参照してください。

すべての外部 IP アドレスを誤って削除した場合、Google Cloud Platform Console でアドレスを新たに作成できます。

インスタンスから外部 IP アドレスを削除してください。

Console


  1. GCP Console の [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. 変更するインスタンスの [名前] をクリックします。
  3. [編集] 鉛筆アイコンをクリックします。
  4. [ネットワーク インターフェース] で [編集] 鉛筆アイコンをクリックします。
  5. [外部 IP] プルダウンの値を [なし] に変更します。
  6. [完了] をクリックします。
  7. [保存] をクリックします。
  8. [VM インスタンスの詳細] ページの上部にある左向き矢印をクリックして、[VM インスタンス] ページに戻ります。[外部 IP] フィールドに None と表示され、[SSH] ボタンがグレー表示されます。
  9. ブラウザからロードバランサを介してアクセスしたときにページが引き続き表示されることを確認します。

gcloud: HTTP


  1. 以下のコマンドを実行します。NAME フィールドに表示されているインスタンス名を記録してください。

    gcloud compute instances list
    
  2. このインスタンスのアクセス設定を削除します。NAME にインスタンス名を指定します。

    gcloud compute instances delete-access-config NAME
    

gcloud: HTTPS


  1. 以下のコマンドを実行します。NAME フィールドに表示されているインスタンス名を記録してください。

    gcloud compute instances list
    
  2. このインスタンスのアクセス設定を削除します。NAME にインスタンス名を指定します。

    gcloud compute instances delete-access-config NAME
    

次のステップ

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

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

Compute Engine ドキュメント