コンテンツ ベースの負荷分散の作成

このガイドでは、リクエスト URL のパスに基づいて異なるインスタンスにトラフィックを分散する HTTP(S) ロードバランサの作成方法を説明します。

概要

このシナリオでは、さまざまな種類のリクエストを処理する Compute Engine インスタンスを作成し、URL パスに基づいて異なるインスタンスにルーティングするロードバランサを作成します。

このガイドを終了すると、次の URL パスに転送する設定を行えるようになります。

  • /video で開始する URL パスは、特定のインスタンス グループにルーティングされます。
  • このパターンに一致しない URL パスは、別のインスタンス グループにルーティングされます。

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

コンテンツベースの HTTP(S) 負荷分散(クリックで拡大)
コンテンツベースの HTTP(S) 負荷分散(クリックで拡大)

始める前に

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

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

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

インスタンスの設定

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

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

    Console


    1. Google Cloud Platform Console の [VM インスタンス] ページに移動します。
      [VM インスタンス] ページに移動
    2. [インスタンスを作成] をクリックします。
    3. [名前] を www に設定します。
    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>www</h1></body></html>' | sudo tee /var/www/html/index.html
    8. 残りのフィールドはデフォルト値をそのまま使用します。
    9. [作成] をクリックします。
    10. 同じ設定を使って www-video を作成します。ただし [起動スクリプト] フィールドには次のスクリプトを挿入します。
      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>www-video</h1></body></html>' | sudo tee /var/www/html/index.html
      sudo mkdir /var/www/html/video
      echo '<!doctype html><html><body><h1>www-video</h1></body></html>' | sudo tee /var/www/html/video/index.html
      

    gcloud: HTTP


    gcloud compute instances create www \
        --image-family debian-9 \
        --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</h1></body></html>' | sudo tee /var/www/html/index.html
          EOF"
    

    gcloud compute instances create www-video \
        --image-family debian-9 \
        --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-video</h1></body></html>' | sudo tee /var/www/html/index.html
          sudo mkdir /var/www/html/video
          echo '<!doctype html><html><body><h1>www-video</h1></body></html>' | sudo tee /var/www/html/video/index.html
          EOF"
    

    gcloud: HTTPS


    gcloud compute instances create www \
        --image-family debian-9 \
        --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>www</h1></body></html>' | sudo tee /var/www/html/index.html
          EOF"
    

    gcloud compute instances create www-video \
        --image-family debian-9 \
        --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>www-video</h1></body></html>' | sudo tee /var/www/html/index.html
          sudo mkdir /var/www/html/video
          echo '<!doctype html><html><body><h1>www-video</h1></body></html>' | sudo tee /var/www/html/video/index.html
          EOF"
    

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

    このファイアウォール ルールでは、以前作成した http-tag タグまたは https-tag タグが使用されます。ファイアウォール ルールにより、指定されたポートでトラフィックがそれらのタグを持つインスタンスに到達できるようになります。

    Console


    1. Google Cloud Platform Console の [ファイアウォール] ページに移動します。
      [ファイアウォール] ページに移動
    2. [ファイアウォール ルールを作成] をクリックします。
    3. [名前] として「www-firewall」と入力します。
    4. [VPC ネットワーク] では default を選択します。
    5. [ソースフィルタ] に Allow from any source (0.0.0.0/0) を設定します。
    6. [許可対象プロトコル / ポート] を、ロードバランサとバックエンドの間に HTTP を使用する場合は tcp:80 に、HTTPS を使用する場合は tcp:443 に、両方を使用する場合は tcp:80,443 に設定します。
    7. [ターゲットタグ] を、ロードバランサとバックエンドの間に HTTP を使用する場合は http-tag、HTTPS を使用する場合は https-tag、またはその両方に設定します。両方を指定する場合は、1 つを入力してから Tab キーを押して、もう 1 つを入力します。
    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. Google Cloud Platform Console の [VM インスタンス] ページに移動します。
      [VM インスタンス] ページに移動
    2. [外部 IP] 列で、インスタンスのアドレスをクリックします。

    (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 http://IP_ADDRESS
      

負荷分散サービスに必要なサービスの設定

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

これらのサービスを設定するには、次の手順を実行します。

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

    Console


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

    gcloud: HTTP


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

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

    gcloud: HTTPS


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

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

  2. トラフィックの種類ごとにインスタンス グループを作成します。

    Console


    1. GCP Console の [インスタンス グループ] ページに移動します。
      [インスタンス グループ] ページに移動
    2. [インスタンス グループを作成] をクリックします。
    3. [名前] を www-resources に設定します。
    4. [ゾーン] を us-central1-b に設定します。
    5. [グループタイプ] で、[非マネージド インスタンス グループ] を選択します。
    6. [VM インスタンス] の下で、www- を選択します。
    7. その他の設定はそのままにします。
    8. [作成] をクリックします。
    9. 手順を繰り返しますが、www-video という名前のインスタンスを含む、video-resources という名前のインスタンス グループを作成します。

    gcloud: HTTP


    gcloud compute instance-groups unmanaged create video-resources --zone us-central1-b
    
    gcloud compute instance-groups unmanaged create www-resources --zone us-central1-b
    

    gcloud: HTTPS


    gcloud compute instance-groups unmanaged create video-resources --zone us-central1-b
    
    gcloud compute instance-groups unmanaged create www-resources --zone us-central1-b
    

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

    Console


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

    gcloud: HTTP


    gcloud compute instance-groups unmanaged add-instances video-resources \
        --instances www-video \
        --zone us-central1-b
    
    gcloud compute instance-groups unmanaged add-instances www-resources \
        --instances www \
        --zone us-central1-b
    

    gcloud: HTTPS


    gcloud compute instance-groups unmanaged add-instances video-resources \
        --instances www-video \
        --zone us-central1-b
    
    gcloud compute instance-groups unmanaged add-instances www-resources \
        --instances www \
        --zone us-central1-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
    

負荷分散サービスの設定

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

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

Console


ロードバランサの名前指定

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

バックエンドの設定

コンテンツ タイプごとにバックエンド サービスを設定します。

  1. [バックエンドの設定] をクリックします。
  2. [バックエンド サービスを作成または選択] プルダウン メニューで [バックエンド サービスを作成] を選択します。
  3. バックエンド サービスの [名前] を web-map-backend-service に設定します。
  4. [プロトコル] について、ロードバランサとインスタンス間のトラフィックが HTTP の場合は、すべての値をそのまま使用します。プロトコルが HTTPS の場合(推奨)、[編集] の鉛筆アイコンをクリックし、[プロトコル] を HTTPS に設定して、[名前付きポート] を「https」に設定します。
  5. [バックエンド] の下にある [インスタンス グループ] を www-resources に設定します。
  6. ロードバランサとインスタンス間のトラフィックが HTTPS である場合は、[ポート番号] を 443 に設定します。ロードバランサとインスタンス間のトラフィックが HTTP である場合は、[ポート番号] を 80 に設定します。
  7. 残りのフィールドはデフォルト値をそのまま使用します。
  8. HTTP または HTTPS のどちらを構成しているかに応じて、[ヘルスチェック] を http-basic-check または https-basic-check に設定します。これは上記の [ポート番号] の設定と一致している必要があります。ポート番号を 80 に設定している場合は、HTTP ヘルスチェックを使用します。ポート番号を 443 に設定している場合は、HTTPS ヘルスチェックを使用します。
  9. 列の中央で、[バックエンド サービスを作成または選択] > [バックエンド サービスを作成] を選択します。
  10. 上記の手順を繰り返しますが、2 番目のバックエンド サービスに video-service という名前を付け、それに video-resources インスタンス グループを割り当てます。

ホストとパスのルール

  1. 画面の左の列で、[ホストとパスのルール] をクリックします。
  2. 最初の行にはすでにデフォルトのルールが入力され、web-map-backend-service を指しています。
  3. 2 行目の右側の列が video-service になります。他の列には、次のように値を入力します。
    1. [ホスト] を * に設定します。
    2. [パス] を /video/video/* に設定します。入力するたびに、Tab キーを押してください。

フロントエンドの設定

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

  1. [新しい HTTP(S) ロードバランサ] ページの左のパネルで、[フロンドエンドの設定] をクリックします。
  2. [名前] として「http-content-rule」と入力します。
  3. クライアントとロードバランサ間で HTTPS を使用する場合は、[プロトコル] フィールドで HTTPS を選択します。クライアントとロードバランサの間を HTTP にする場合、HTTP を選択します。
  4. [IP バージョン] を IPv4 に設定します。
  5. [IP] で、以前に作成した lb-ip-1 を選択します。
  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. [フロントエンド IP とポートの追加] をクリックします。
  11. [名前] として「http-content-ipv6-rule」と入力します。
  12. クライアントとロードバランサ間で HTTPS を使用する場合は、[プロトコル] フィールドで HTTPS を選択します。クライアントとロードバランサの間を HTTP にする場合、HTTP を選択します。
  13. [IP バージョン] を IPv6 に設定します。
  14. [IP] で、以前に作成した lb-ipv6-1 を選択します。
  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. すべて問題なければ、[作成] をクリックして HTTP(S) ロードバランサを作成します。

gcloud: HTTP


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

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

    gcloud compute backend-services create video-service \
         --protocol HTTP \
         --health-checks http-basic-check \
         --global
    
    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 video-service \
        --balancing-mode UTILIZATION \
        --max-utilization 0.8 \
        --capacity-scaler 1 \
        --instance-group video-resources \
        --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 www-resources \
        --instance-group-zone us-central1-b \
        --global
    
  4. 適切なバックエンド サービスにリクエストをルーティングする URL マップを作成します。この場合、--path-rules フラグで定義されたリクエストパスのマッピングにより、サイトへの各リクエストの URL パスに基づいてトラフィックが分割されます。--path-rules リスト内のエントリと一致しないトラフィックは、--default-service flag トラフィック内のエントリに送信されます。

    1. URL マップを作成します。

      gcloud compute url-maps create web-map \
          --default-service web-map-backend-service
      
    2. URL マップにパスマッチャーを追加し、リクエストのパスマッピングを定義します。

      gcloud compute url-maps add-path-matcher web-map \
          --default-service web-map-backend-service \
          --path-matcher-name pathmap \
          --path-rules="/video=video-service,/video/*=video-service"
      
  5. URL マップにリクエストの経路を指定するターゲット HTTP プロキシを作成します。

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

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

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

    gcloud compute backend-services create video-service \
        --protocol HTTPS \
        --health-checks https-basic-check \
        --global
    
    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 video-service \
        --balancing-mode UTILIZATION \
        --max-utilization 0.8 \
        --capacity-scaler 1 \
        --instance-group video-resources \
        --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 www-resources \
         --instance-group-zone us-central1-b \
         --global
    
  4. 適切なバックエンド サービスにリクエストをルーティングする URL マップを作成します。この場合、--path-rules フラグで定義されたリクエストパスのマッピングにより、サイトへの各リクエストの URL パスに基づいてトラフィックが分割されます。--path-rules リスト内のエントリと一致しないトラフィックは、--default-service flag 内のエントリに送信されます。

    1. URL マップを作成します。

      gcloud compute url-maps create web-map \
          --default-service web-map-backend-service
      
    2. URL マップにパスマッチャーを追加し、リクエストのパスマッピングを定義します。

      gcloud compute url-maps add-path-matcher web-map \
          --default-service web-map-backend-service --path-matcher-name pathmap \
          --path-rules=/video=video-service,/video/*=video-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 cb_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. ロードバランサ用に作成した静的 IP アドレスを調べます。次のステップでそれらを使用します。

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

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

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

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

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

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

Console


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

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/video/
    curl http://IPv4_ADDRESS
    

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

gcloud: HTTPS


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

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

    curl https://IPv4_ADDRESS/video/
    curl https://IPv4_ADDRESS
    

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

最初にレスポンスが失敗した場合、設定が完全にロードされ、インスタンスが正常であるとマークされるまで数分待ってからもう一度やり直す必要がある場合があります。

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

すべてが動作するようになったら、インスタンスへの HTTP(S) トラフィックが負荷分散サービスからのみ発生するようにファイアウォール ルールを変更します。プロキシとインスタンス間のトラフィックは IPv4 上を流れるため、これらの手順は IPv4 と IPv6 の両方のクライアント トラフィックに使用できます。

Console


  1. Google Cloud Platform Console の [ファイアウォール] ページに移動します。
    [ファイアウォール] ページに移動
  2. [ファイアウォール ルールの作成] をクリックします。
  3. [名前] に allow-lb-and-healthcheck を指定します。
  4. [VPC ネットワーク] では default を選択します。
  5. [ソースフィルタ] は [IP 範囲] のままにしておきます。
  6. [ソース IP の範囲] を 130.211.0.0/2235.191.0.0/16 に設定します。
  7. [許可対象プロトコル / ポート] を、HTTP の場合は tcp:80 に設定し、HTTPS の場合は tcp:443 に設定します。両方の場合は tcp:80,443 に設定します。
  8. [ターゲットタグ] を http-taghttps-tag のどちらかまたはその両方に設定します。両方を指定する場合は、1 つを入力してから Tab キーを押して、もう 1 つを入力します。
  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. Google Cloud Platform 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. Google Cloud Platform Console の [負荷分散] ページに移動します。
    [負荷分散] ページに移動
  2. web-map をクリックして先ほど作成したロードバランサを展開します。[フロントエンド] セクションの下に IP とポートが表示されます。それをコピーしてブラウザに貼り付けます。
    自分のページが表示されます。
  3. Google Cloud Platform Console の [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  4. インスタンスごとに、[外部 IP] の下にあるリンクをクリックします。インスタンスが HTTPS 専用にセットアップされている場合は、ブラウザの IP アドレスの前に https:// を追加します。いずれの場合も、接続がタイムアウトになります。インスタンスにアクセスできてはいけません。

gcloud: HTTP


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

    gcloud compute addresses list
    
  2. curl コマンドを使用して、サービスのさまざまな URL に対するレスポンスをテストします。これらのコマンドはすべて機能する必要があります。

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

    gcloud compute instances list
    
  4. curl コマンドを使用して、サービスのさまざまな URL に対するレスポンスをテストします。curl コマンドごとに、適切なインスタンスの EXTERNAL_IP を使用します。これらのコマンドはすべてタイムアウトになる必要があります。

    curl http://EXTERNAL_IP/video/
    curl http://EXTERNAL_IP
    

gcloud: HTTPS


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

    gcloud compute addresses list
    
  2. curl コマンドを使用して、サービスのさまざまな URL に対するレスポンスをテストします。これらのコマンドはすべて機能する必要があります。

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

    gcloud compute instances list
    
  4. curl コマンドを使用して、サービスのさまざまな URL に対するレスポンスをテストします。curl コマンドごとに、適切なインスタンスの EXTERNAL_IP を使用します。これらのコマンドはすべてタイムアウトになる必要があります。

    curl -k https://EXTERNAL_IP/video/
    curl -k https://EXTERNAL_IP
    

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

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

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

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

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

Console


  1. Google Cloud Platform Console の [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. 変更するインスタンスの [名前] をクリックします。
  3. [編集] をクリックします。
  4. [外部 IP] プルダウン メニューの値を [なし] に変更します。
  5. [保存] をクリックします。
  6. [VM インスタンス] ページに戻ります。[外部 IP] フィールドには [なし] の空白となり、SSH ボタンはグレー表示されます。
  7. ブラウザからロードバランサ経由でアクセスしている場合は、ページが引き続き表示されます。

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 ドキュメント