HTTPS ロードバランサの設定

このガイドでは、次のような Google Cloud HTTPS ロードバランサを作成する方法を示します。

  • リクエストの URL パスに基づいてバックエンド サービスを選択する(コンテンツに基づく負荷分散)。
  • クライアントに近いバックエンドにリクエストをルーティングする(クロスリージョンの負荷分散)。

始める前に、HTTP(S) 負荷分散のコンセプトについて十分に理解しておいてください。

簡略化した例については、シンプルな外部 HTTP ロードバランサの設定方法またはシンプルな外部 HTTPS ロードバランサの設定方法をご覧ください。

概要

このガイドでは、リクエスト URL のパスに基づいてトラフィックを転送し、トラフィックを複数のリージョンに分散するロードバランサを作成する手順について説明します。ここでは、米国のリージョン(us-central1-b ゾーン)と欧州のリージョン(eu-west1-b ゾーン)に、2 つの Compute Engine インスタンスを作成します。次に、これらのインスタンスにトラフィックをルーティングするロードバランサを作成します。

手順を完了すると、ロードバランサは次のような構成になります。

  • /video で始まる URL パスを含むトラフィックは、1 つのバックエンド サービスにルーティングされます。
  • このパターンと一致しない URL パスを含むトラフィックは、別のバックエンド サービスにルーティングされます。

このご利用方法についてのドキュメントでは、次の図に示す構成が作成されます。

コンテンツ ベースおよびクロスリージョンの HTTPS 負荷分散(クリックして拡大)
コンテンツ ベースおよびクロスリージョンの HTTPS 負荷分散(クリックして拡大)

この図のイベントの順序は次のとおりです。

  1. クライアントが https://www.example.com/video/concert という URL にアクセスして、転送ルールで定義された外部 IP アドレスにコンテンツのリクエストを送信します。リクエストでは、IPv4 または IPv6 を使用できます。両方のプロトコルの転送ルールがあります。
  2. 転送ルールによって、リクエストがターゲット HTTPS プロキシに転送されます。
  3. ターゲット プロキシは、URL マップで設定されたルールを使用して、リクエストを受信するバックエンド サービスを決定します。/video を含むリクエスト(https://www.example.com/video/concert など)が video-backend-service に送信されます。その他の URL パスは、デフォルトのサービス web-backend-service に送信されます。
  4. ロードバランサは、クライアントの負荷や近さに基づいて、リクエストを処理するバックエンド サービスのインスタンス グループを決定し、そのグループに属するインスタンスの 1 つにリクエストを送信します。
  5. その結果、そのインスタンスによって、各ユーザーがリクエストしたコンテンツが配信されます。video インスタンスは動画コンテンツを、www インスタンスはその他のすべてのコンテンツをそれぞれ配信します。

始める前に

これらの手順には、プロジェクトが 1 つ必要になります。プロジェクトが存在しない場合は、プロジェクトを設定します。これらの手順は、カスタムモードの VPC ネットワークの作成方法を示しています。カスタムのファイアウォール ルールを設定して、トラフィックがインスタンスに届くようにすることも必要です。

コマンドラインから作業する場合は、gcloud コマンドライン ツールをインストールします。このツールのコンセプトとインストールについては、gcloud の概要をご覧ください。

これまでに gcloud コマンドライン ツールが実行されていない場合は、gcloud init を実行して、gcloud ディレクトリを初期化します。

この例では、ロードバランサはクライアントからの HTTPS リクエストを受け付け、バックエンドに HTTP としてプロキシしています。また、ロードバランサで HTTP リクエストを受け付けるように構成し、HTTPS を使用してバックエンドにリクエストをプロキシすることもできます。

権限

このガイドの手順を完了するには、プロジェクトで Compute Engine インスタンスを作成する権限が必要になります。プロジェクトの所有者または編集者の役割、あるいは次に示す Compute Engine IAM 役割が必要です。

タスク 必要な役割
インスタンスの作成 インスタンス管理者
ファイアウォール ルールの追加と削除 セキュリティ管理者
ロードバランサのコンポーネントを作成する ネットワーク管理者
プロジェクトを作成する(省略可) プロジェクト作成者

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

設定

省略可: 新しいプロジェクトの作成

このチュートリアルを続行する前に、resourcemanager.projects.create 権限を持つユーザーで新しいプロジェクトを作成してください。これにより、ガイドの最後でクリーンアップが簡単になります。

ネットワークとサブネットの構成

この例では、次の VPC ネットワーク、リージョン、サブネットを使用します。

  • ネットワーク: ネットワークは、lb-network という名前のカスタムモードの VPC ネットワークです。

  • 2 つの異なるリージョンのサブネット:

    • us-subnet は、10.1.10.0/24 をプライマリ IP 範囲として使用し、us-central1 リージョンに配置されます。
    • eu-subnet は、10.1.11.0/24 をプライマリ IP 範囲として使用し、europe-west1 リージョンに配置されます。

サンプルのネットワークとサブネットを作成する方法は次のとおりです。

Console


  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. [VPC ネットワークを作成] をクリックします。
  3. [名前] に「lb-network」を入力します。
  4. [サブネット] セクションで、最初のサブネットを作成します。
    • [サブネット作成モード] を [カスタム] に設定します。
    • [新しいサブネット] セクションに、次の情報を入力します。
      • 名前: us-subnet
      • リージョン: us-central1
      • IP アドレス範囲: 10.1.10.0/24
      • [完了] をクリックします。
  5. [サブネット] セクションに、[サブネットの追加] を作成し、2 番目のサブネットを作成します。
    • [サブネット作成モード] を [カスタム] に設定します。
    • [新しいサブネット] セクションに、次の情報を入力します。
      • 名前: eu-subnet
      • リージョン: europe-west1
      • IP アドレス範囲: 10.1.11.0/24
      • [完了] をクリックします。
  6. [作成] をクリックします。

gcloud


  1. カスタム VPC ネットワークを作成します。

        gcloud compute networks create lb-network --subnet-mode=custom
        
  2. us-subnet を作成します。

        gcloud compute networks subnets create us-subnet \
          --network=lb-network \
          --range=10.1.10.0/24 \
          --region=us-central1
        
  3. eu-subnet を作成します。

        gcloud compute networks subnets create eu-subnet \
          --network=lb-network \
          --range=10.1.11.0/24 \
          --region=europe-west1
        

ファイアウォール ルールの構成

デフォルトの上り(内向き)拒否ルールは、バックエンド インスタンスへの受信トラフィックをブロックします。ロードバランサからのトラフィックや、Google Cloud ヘルスチェック システムからのトラフィックをブロックされます。新しいファイアウォール ルールを作成して、デフォルトのルールを上書きし、トラフィックがインスタンスに届くようにする必要があります。

この例では、次のファイアウォール ルールを作成します。

  • fw-allow-ssh: 負荷分散されたインスタンスに適用される内向きルール。任意のアドレスから TCP ポート 22 への SSH 接続が許可されます。このルールには、送信元 IP 範囲をより限定的に指定できます。たとえば、SSH セッションを開始するシステムの IP 範囲のみを許可するように指定できます。この例では、ターゲットタグ allow-ssh を使用して、適用する VM を識別させています。

  • fw-allow-health-check-and-proxy: 負荷分散されているインスタンスに適用される上り(内向き)ルール。ロードバランサと Google Cloud ヘルスチェック システム(130.211.0.0/2235.191.0.0/16) からのトラフィックを許可します。この例では、ターゲットタグ allow-hc-and-proxy を使用して、適用するインスタンスが識別されます。

Console


  1. Google Cloud Console の [ファイアウォール] ページに移動します。
    [ファイアウォール] ページに移動
  2. [ファイアウォール ルールの作成] をクリックして、最初のファイアウォール ルールを作成します。
    1. [名前] に「fw-allow-ssh」を入力します。
    2. [ネットワーク] で、[lb-network] を選択します。
    3. [ターゲット] で [指定されたターゲットタグ] を選択します。
    4. [ターゲットタグ] フィールドに「allow-ssh」を入力します。
    5. [ソースフィルタ] を IP ranges に設定します。
    6. [ソース IP の範囲] を 0.0.0.0/0 に設定します。
    7. [プロトコルとポート] で [指定したプロトコルとポート] をオンにします。
    8. [tcp] の横にあるチェックボックスをオンにして、ポート番号に「22」と入力します。
    9. [作成] をクリックします。
  3. [ファイアウォール ルールの作成] をクリックして、2 つ目のファイアウォール ルールを作成します。
    1. [名前] に「fw-allow-health-check-and-proxy」を入力します。
    2. [ネットワーク] で、[lb-network] を選択します。
    3. [ターゲット] で [指定されたターゲットタグ] を選択します。
    4. [ターゲットタグ] フィールドに「allow-hc-and-proxy」を入力します。
    5. [ソースフィルタ] を IP ranges に設定します。
    6. [ソース IP の範囲] を 130.211.0.0/2235.191.0.0/16 に設定します。
    7. [プロトコルとポート] で [指定したプロトコルとポート] をオンにします。
    8. [tcp] の横にあるチェックボックスをオンにして、ポート番号に「80,443」と入力します。
    9. [作成] をクリックします。

gcloud


  1. ネットワーク タグ allow-ssh を使用して、VM との SSH 接続を許可する fw-allow-ssh ファイアウォール ルールを作成します。source-ranges を省略すると、Google Cloud は任意の送信元としてルールを解釈します。

        gcloud compute firewall-rules create fw-allow-ssh \
            --network=lb-network \
            --action=allow \
            --direction=ingress \
            --target-tags=allow-ssh \
            --rules=tcp:22
        
  2. ロードバランサと Google Cloud ヘルスチェックが TCP ポート 80443 でバックエンド システムと通信ができるように、fw-allow-health-check-and-proxy ルールを作成します。

        gcloud compute firewall-rules create fw-allow-health-check-and-proxy \
            --network=lb-network \
            --action=allow \
            --direction=ingress \
            --target-tags=allow-hc-and-proxy \
            --source-ranges=130.211.0.0/22,35.191.0.0/16 \
            --rules=tcp:80,tcp:443
        

インスタンスの設定

この例では、8 台の仮想マシン(VM)インスタンスを作成します。このうちの 4 台により動画コンテンツが提供され、4 台によってその他のすべてのコンテンツが配信されます。起動スクリプトを使用して、インスタンスごとに固有のホームページを持つ Apache ウェブサーバー ソフトウェアをインストールします。VM 上の任意のウェブサーバーを使用できます。この例では、Apache がインストールされています。

Console


バックエンド VM の作成

  1. Google Cloud Console の [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. 以下に示す手順を繰り返し、8 つの VM を作成します。次のような名前、リージョン、サブネットの組み合わせを使用します。
    • 名前: www-us-01、リージョン: us-central1、サブネット: us-subnet
    • 名前: www-us-02、リージョン: us-central1、サブネット: us-subnet
    • 名前: video-us-01、リージョン: us-central1、サブネット: us-subnet
    • 名前: video-us-02、リージョン: us-central1、サブネット: us-subnet
    • 名前: www-eu-01、リージョン: europe-west1、サブネット: eu-subnet
    • 名前: www-eu-02、リージョン: europe-west1、サブネット: eu-subnet
    • 名前: video-eu-01、リージョン: europe-west1、サブネット: eu-subnet
    • 名前: video-eu-02、リージョン: europe-west1、サブネット: eu-subnet
  3. [インスタンスを作成] をクリックします。
  4. ステップ 2 で示した名前リージョンを設定します。リージョン内のゾーンは自由に選択できます。この例では、us-central1us-central1-beurope-west1europe-west1-b を使用しています。
  5. [ブートディスク] セクションで、選択したイメージが Debian GNU/Linux 9 Stretch であることを確認します。必要に応じてイメージを変更するには、[選択] をクリックします。
  6. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックして、次のように変更します。

    • [ネットワーク] をクリックして、ネットワーク タグ allow-sshallow-hc-and-proxy を追加します。
    • [ネットワーク インターフェース] にある編集ボタンをクリックして、次の変更を行い、[完了] をクリックします。
      • ネットワーク: lb-network
      • サブネット: ステップ 2 で示したサブネットを選択します。
      • プライマリ内部 IP: エフェメラル(自動)
      • 外部 IP: エフェメラル
    • [管理] をクリックします。[起動スクリプト] フィールドに、次のスクリプトの内容をコピーして貼り付けます。スクリプトの内容は 8 つの VM ですべて同じです。

      #! /bin/bash
          apt-get update
          apt-get install apache2 -y
          a2ensite default-ssl
          a2enmod ssl
          vm_hostname="$(curl -H "Metadata-Flavor:Google" \
          http://169.254.169.254/computeMetadata/v1/instance/name)"
          filter="{print \$NF}"
          vm_zone="$(curl -H "Metadata-Flavor:Google" \
          http://169.254.169.254/computeMetadata/v1/instance/zone \
          | awk -F/ "${filter}")"
          echo "Page on $vm_hostname in $vm_zone" | \
          tee /var/www/html/index.html
          echo "AliasMatch /video(.*)$ /var/www/html/index.html" | \
          tee /etc/apache2/conf-enabled/video.conf
          systemctl restart apache2
          
  7. [作成] をクリックします。

インスタンス·グループの作成

  1. Google Cloud Console の [インスタンス グループ] ページに移動します。
    [インスタンス グループ] ページに移動
  2. 以下に示す手順を繰り返し、それぞれが 2 つの VM を持つ 4 つの非マネージド インスタンス グループを作成します。以下のような組み合わせを使用します。
    • インスタンス グループ: ig-www-us、リージョン: us-central1、ゾーン: us-central1-b、サブネット: us-subnet、VM: www-us-01www-us-02
    • インスタンス グループ: ig-video-us、リージョン: us-central1、ゾーン: us-central1-b、サブネット: us-subnet、VM: video-us-01video-us-02
    • インスタンス グループ: ig-www-eu、リージョン: europe-west1、ゾーン: europe-west1-b、サブネット: eu-subnet、VM: www-eu-01www-eu-02
    • インスタンス グループ: ig-video-eu、リージョン: europe-west1、ゾーン: europe-west1-b、サブネット: eu-subnet、VM: video-eu-01video-eu-02
  3. [インスタンス グループの作成] をクリックし、[新しい非マネージド インスタンス グループ] を選択します。
  4. ステップ 2 に示したように [名前] を設定します。
  5. [ロケーション] セクションで、手順 2 で指定したリージョンとゾーンを選択します。
  6. [ネットワーク] に「lb-network」と入力します。
  7. [サブネットワーク]に、ステップ 2 で示したサブネットを入力します。
  8. [VM インスタンス] セクションに、ステップ 2 で示した VM を追加します。
  9. [作成] をクリックします。

gcloud


  1. 以下に示したコマンドを繰り返して、8 つの VM を作成します。次のような名前、ゾーン、サブネットの組み合わせを使用します。VM_NAME ZONESUBNET は、次のように置き換えてください。

    • 名前: www-us-01、ゾーン: us-central1-b、サブネット: us-subnet
    • 名前: www-us-02、ゾーン: us-central1-b、サブネット: us-subnet
    • 名前: video-us-01、ゾーン: us-central1-b、サブネット: us-subnet
    • 名前: video-us-02、ゾーン: us-central1-b、サブネット: us-subnet
    • 名前: www-eu-01、ゾーン: europe-west1-b、サブネット: eu-subnet
    • 名前: www-eu-02、ゾーン: europe-west1-b、サブネット: eu-subnet
    • 名前: video-eu-01、ゾーン: europe-west1-b、サブネット: eu-subnet
    • 名前: video-eu-02、ゾーン: europe-west1-b、サブネット: eu-subnet
        gcloud compute instances create VM_NAME \
            --zone=ZONE \
            --image-family=debian-9 \
            --image-project=debian-cloud \
            --tags=allow-ssh,allow-hc-and-proxy \
            --subnet=SUBNET \
            --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://169.254.169.254/computeMetadata/v1/instance/name)"
        filter="{print \$NF}"
        vm_zone="$(curl -H "Metadata-Flavor:Google" \
        http://169.254.169.254/computeMetadata/v1/instance/zone \
        | awk -F/ "${filter}")"
        echo "Page on $vm_hostname in $vm_zone" | \
        tee /var/www/html/index.html
        echo "AliasMatch /video(.*)$ /var/www/html/index.html" | \
        tee /etc/apache2/conf-enabled/video.conf
        systemctl restart apache2'
        
  2. 以下に示すコマンドを繰り返して、4 つの非マネージド インスタンス グループを作成します。次のような名前、ゾーンの組み合わせを使用します。INSTANCE_GROUP_NAMEZONEは、次のように置き換えてください。

    • インスタンス グループ: ig-www-us、ゾーン: us-central1-b
    • インスタンス グループ: ig-video-us、ゾーン: us-central1-b
    • インスタンス グループ: ig-www-eu、ゾーン: europe-west1-b
    • インスタンス グループ: ig-video-eu、ゾーン: europe-west1-b
        gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME \
            --zone=ZONE
        
  3. 以下に示したコマンドを 4 回繰り返して、各インスタンス グループごとに 2 つの VM を追加します。次のような組み合わせを使用します。INSTANCE_GROUP_NAMEZONEINSTANCES は、次のように置き換えてください。

    • インスタンス グループ: ig-www-us、ゾーン: us-central1-b、インスタンス: www-us-01www-us-02
    • インスタンス グループ: ig-video-us、ゾーン: us-central1-b、インスタンス: video-us-01video-us-02
    • インスタンス グループ: ig-www-eu、ゾーン: europe-west1-b、インスタンス: www-eu-01www-eu-02
    • インスタンス グループ: ig-video-eu、ゾーン: europe-west1-b、インスタンス: video-eu-01video-eu-02
        gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME \
            --zone=ZONE \
            --instances=INSTANCES
        

    たとえば、2 つのインスタンスを最初のインスタンス グループに追加するコマンドは次のようになります。

        gcloud compute instance-groups unmanaged add-instances ig-www-us \
            --zone=us-central1-b \
            --instances=www-us-01,www-us-02
        

外部 IP アドレスの予約

インスタンスを実行できるようになったので、次に負荷分散に必要なサービスをセットアップします。このセクションでは、デベロッパーが作成したロードバランサにユーザーが接続する際に使用する、2 つのグローバル静的外部 IP アドレスを作成します。

Console


  1. Google Cloud Console で外部 IP アドレスのページに移動します。
    [外部 IP アドレス] ページに移動
  2. [静的アドレスを予約] をクリックして、IPv4 アドレスを予約します。
  3. lb-ipv4-1 の [名前] を割り当てます。
  4. ネットワーク階層を [プレミアム] に設定します。
  5. [IP バージョン] を IPv4 に設定します。
  6. [タイプ] を [グローバル] に設定します。
  7. [予約] をクリックします。
  8. もう一度、[静的アドレスを予約] をクリックして、IPv6 アドレスを予約します。
  9. lb-ipv6-1 の [名前] を割り当てます。
  10. ネットワーク階層を [プレミアム] に設定します。
  11. [IP バージョン] を IPv6 に設定します。
  12. [タイプ] が [グローバル] に設定されていることを確認します。

    この例ではロードバランサは、プレミアム ティア ネットワークを使用します。スタンダード ティア ネットワークを使用するロードバランサでは、リージョン IP アドレスを使用します。スタンダード ティアの場合、IPv6 アドレスは使用できません。

  13. [予約] をクリックします。

gcloud


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

予約されている IPv4 アドレスをメモします。

    gcloud compute addresses describe lb-ipv4-1 \
        --format="get(address)" \
        --global
    
    gcloud compute addresses create lb-ipv6-1 \
        --ip-version=IPV6 \
        --global
    

予約されている IPv6 アドレスをメモします。

    gcloud compute addresses describe lb-ipv6-1 \
        --format="get(address)" \
        --global
    

負荷分散リソースの構成

ロードバランサ機能には、接続済みの複数のリソースが含まれます。このセクションでは、リソースを設定して接続します。以下のとおりです。

  • 名前付きポート。ロードバランサはこれを使用して、トラフィックをインスタンス グループに転送します。
  • ヘルスチェック。インスタンスが正常に機能しているかを確認します。ロードバランサは正常なインスタンスのみにトラフィックを送信します。
  • 容量、セッション アフィニティ、ヘルスチェックのステータスを追跡するバックエンド サービス。バックエンド サービスは、容量とインスタンスの正常性に基づいて、バックエンド VM またはエンドポイントにリクエストを送信します。
  • リクエストの URL のホストとパスに基づいて特定のバックエンド サービスへのリクエストの転送にロードバランサが使用する、URL マップ
  • SSL 証明書リソース。SSL 証明書リソースには、HTTPS クライアントが接続するときにロードバランサが TLS を終了するために使用する SSL 証明書情報が含まれます。複数の SSL 証明書を使用できます。Google マネージド SSL 証明書またはセルフマネージド SSL 証明書を任意に組み合わせることができます。複数の SSL 証明書を使用する場合は、証明書ごとに SSL 証明書リソースを作成する必要があります。
  • ロードバランサが URL マップと SSL 証明書をグローバル転送ルールに関連付けるために使用するターゲット HTTPS プロキシ
  • 2 つのグローバル転送ルール(IPv4 と IPv6 のそれぞれで 1 つずつ)。グローバル外部 IP アドレス リソースを保持します。グローバル転送ルールは、受信リクエストをターゲット プロキシに転送します。

Console


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

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

www インスタンスのバックエンド サービスとヘルスチェックを構成します。

ロードバランサには、2 つのバックエンド サービスと、その両方に対応するヘルスチェックが必要になります。この例では、ロードバランサはクライアントからの HTTPS リクエストを終了し、HTTP を使用してバックエンドと通信します。これを行うには、バックエンド プロトコルとヘルスチェックのための HTTP を指定します。

www インスタンスのバックエンド サービスを構成します。

  1. [バックエンドの構成] をクリックします。
  2. [バックエンド サービスを作成または選択] プルダウン メニューで [バックエンド サービスを作成] を選択します。
  3. バックエンド サービスの [名前] を web-backend-service に設定します。
  4. [タイムアウト] フィールドの横の [編集] アイコンをクリックして、プロトコルを編集します。ロードバランサからバックエンドまでの間で使用するプロトコルを選択します。
  5. [名前付きポート] フィールドに「http」と入力します。
  6. [バックエンド タイプ] が [インスタンス グループ] に設定されていることを確認してください。
  7. [バックエンド] で、[インスタンス グループ] を ig-www-us に設定します。
  8. ロードバランサとインスタンスの間のトラフィックに対しては、[ポート番号] を 80 に設定します。
  9. 残りのフィールドはデフォルト値のままにします。
  10. [新しいバックエンド] ウィンドウの下部にある [完了] をクリックします。
  11. [バックエンドを追加] をクリックしてステップを繰り返し、インスタンス グループ ig-www-eu を選択します。
  12. ウィンドウを開いたままにして続行します。

www インスタンスのヘルスチェックを構成します。

  1. [ヘルスチェック] の [バックエンドの構成] ウィンドウで、[ヘルスチェックを作成] または [別のヘルスチェックを作成] を選択します。
  2. HTTP ヘルスチェックを作成するには、次のヘルスチェック パラメータを設定します。
    • 名前: http-basic-check
    • プロトコル: HTTP
    • ポート: 80
  3. [保存して次へ] をクリックします。
  4. [作成] をクリックします。

www-video インスタンスのバックエンドとヘルスチェックを構成します。

  1. 上記の手順を繰り返して、2 番目のバックエンド サービスに video-backend-service という名前を付け、ig-video-usig-video-eu のインスタンス グループを割り当てます。
  2. ヘルスチェックの作成についても、同様の手順を繰り返します。

ホストとパスのルールを構成する

ホストとパスのルールによって、ロードバランサの URL マップリソースが構成されます。

  1. 画面の左の列で、[ホストとパスのルール] をクリックします。
  2. 最初の行の右側の列に web-backend-service が表示され、ホストパスの既定のルール Any unmatched (default) によって設定がなされていることを確認します。
  3. 右側の列の 2 行目に video-backend-service が表示されていることを確認します。この行が存在しない場合は、[ホストとパスのルールを追加] をクリックしてから、右の列のプルダウン メニューから [video-backend-service] を選択します。他の列には、次のように値を入力します。[...]
    1. [ホスト] を * に設定します。
    2. [パス] フィールドで、/video を入力し、Tab キーを押しながら「/video/*」を入力します。そして、Tab キーをもう一度押します。

フロントエンドを構成する

フロントエンド構成セクションで、転送ルールや SSL 証明書などのロードバランサのリソースを構成します。また、クライアントとロードバランサ間で使用するプロトコルを選択することもできます。

この例では、クライアントとロードバランサの間で HTTPS を使用しているため、プロキシを構成する SSL 証明書リソースが 1 つ以上必要になります。SSL 証明書リソースの作成方法については、SSL 証明書をご覧ください。Google マネージド証明書を使用してください。

  1. [新しい HTTP(S) ロードバランサ] ページの左パネルで [フロンドエンドの構成] をクリックします。
  2. [名前] フィールドに「https-content-rule」と入力します。
  3. [プロトコル] フィールドで HTTPS を選択します。
  4. ウィンドウを開いたままにして続行します。

IPv4 転送ルールを構成する

  1. [IP バージョン] を IPv4 に設定します。
  2. [IP アドレス] で、先ほど作成した lb-ipv4-1 を選択します。
  3. HTTPS トラフィックを許可するように、ポート443 に設定されていることを確認します。
  4. [証明書] プルダウン リストをクリックします。
    1. プライマリ SSL 証明書として使用しようとしているセルフマネージド SSL 証明書リソースがすでにある場合は、プルダウン メニューから選択します。
    2. そうでない場合は、[新しい証明書の作成] を選択します。
    3. [証明書をアップロードする] か [Google マネージド証明書を作成する] を選択します。
    4. [証明書をアップロードする] を選択した場合は、次の手順を行います。
      1. [名前] に「www-ssl-cert」を入力します。
      2. 該当するフィールドに、公開鍵証明書(.crt ファイル)、証明書チェーン(.csr ファイル)、秘密鍵(.key ファイル)をアップロードします。
      3. [作成] をクリックします。
    5. [Google マネージド証明書を作成する] を選択した場合は、[ドメイン] を入力します。
  5. プライマリ SSL 証明書リソースに加えて証明書リソースを追加するには、次の手順を行います。
    1. [証明書を追加] をクリックします。
    2. [証明書] リストから証明書を選択するか、[新しい証明書の作成] をクリックし、上記の手順に沿います。
  6. [完了] をクリックします。
  7. ウィンドウを開いたままにして続行します。

IPv6 転送ルールを構成する

  1. [フロントエンド IP とポートの追加] をクリックします。
  2. [名前] に「https-content-ipv6-rule」を入力します。
  3. クライアントとロードバランサ間で HTTPS を使用する場合は、[プロトコル] フィールドで HTTPS を選択します。クライアントとロードバランサ間で HTTP を使用する場合は、HTTP を選択します。
  4. [IP バージョン] を IPv6 に設定します。
  5. [IP] で、先ほど作成した lb-ipv6-1 を選択します。
  6. 443 の [ポート] にはデフォルト値を設定する必要があります。
  7. SSL 証明書リソースをすでに使用している場合は、[証明書] プルダウン メニューから選択します。そうでない場合は、[新しい証明書の作成] を選択します。
    1. [名前] に「www-ssl-cert」を入力します。
    2. 該当するフィールドに、公開鍵証明書(.crt ファイル)、証明書チェーン(.csr ファイル)、非公開鍵(.key ファイル)をアップロードします。
    3. [作成] をクリックします。
  8. プライマリ SSL 証明書リソースに加えて証明書リソースを追加するには、次の手順を行います。
    1. [証明書を追加] をクリックします。
    2. [証明書] リストから証明書を選択するか、[新しい証明書の作成] をクリックし、上記の手順に沿います。
  9. [完了] をクリックします。

確認と完了

  1. [新しい HTTP(S) ロードバランサ] ページで [確認と完了] をクリックします。
  2. 現在の設定と作成しようとしている内容を比較します。
  3. すべて問題なければ、[作成] をクリックして HTTP(S) ロードバランサを作成します。

gcloud


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

        gcloud compute instance-groups unmanaged set-named-ports ig-video-us \
            --named-ports http:80 \
            --zone us-central1-b
        
        gcloud compute instance-groups unmanaged set-named-ports ig-www-us \
            --named-ports http:80 \
            --zone us-central1-b
        
        gcloud compute instance-groups unmanaged set-named-ports ig-video-eu \
            --named-ports http:80 \
            --zone europe-west1-b
        
        gcloud compute instance-groups unmanaged set-named-ports ig-www-eu \
            --named-ports http:80 \
            --zone europe-west1-b
        
  2. ヘルスチェックを作成します。ロードバランサとバックエンド間で HTTP を使用する場合は、HTTP に gcloud コマンドを使用します。

        gcloud compute health-checks create http http-basic-check \
            --port 80
        
  3. コンテンツ プロバイダごとにバックエンド サービスを作成します。HTTP を使用してインスタンスに移動するため、--protocol フィールドを HTTP に設定します。先ほどヘルスチェックとして作成した http-basic-check ヘルスチェックを使用します。

        gcloud compute backend-services create video-backend-service \
            --protocol HTTP \
            --health-checks http-basic-check \
            --global
        
        gcloud compute backend-services create web-backend-service \
            --protocol HTTP \
            --health-checks http-basic-check \
            --global
        
  4. インスタンス グループをバックエンドとしてバックエンド サービスに追加します。バックエンドに含まれるインスタンス グループの容量(バックエンドの 1 秒あたりの最大使用量または最大照会数)をバックエンドで定義します。この例では、balancing-mode の値を UTILIZATIONmax-utilization の値を 0.8capacity-scaler の値を 1 にそれぞれ設定します。バックエンド サービスをドレインする場合は、capacity-scaler の値を 0 に設定します。

    ig-video-us インスタンス グループを追加します。

        gcloud compute backend-services add-backend video-backend-service \
            --balancing-mode=UTILIZATION \
            --max-utilization=0.8 \
            --capacity-scaler=1 \
            --instance-group=ig-video-us \
            --instance-group-zone=us-central1-b \
            --global
        

    ig-video-eu インスタンス グループを追加します。

        gcloud compute backend-services add-backend video-backend-service \
            --balancing-mode=UTILIZATION \
            --max-utilization=0.8 \
            --capacity-scaler=1 \
            --instance-group=ig-video-eu \
            --instance-group-zone=europe-west1-b \
            --global
        

    ig-www-us インスタンス グループを追加します。

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

    ig-www-eu インスタンス グループを追加します。

        gcloud compute backend-services add-backend web-backend-service \
            --balancing-mode=UTILIZATION \
            --max-utilization=0.8 \
            --capacity-scaler=1 \
            --instance-group=ig-www-eu \
            --instance-group-zone=europe-west1-b \
            --global
        
  5. 適切なバックエンド サービスにリクエストをルーティングする URL マップを作成します。この場合、--path-rules フラグで定義されたリクエストパスのマッピング(対応付け)により、サイトへの各リクエストの URL パスごとにトラフィックが分割されます。--path-rules リスト内のどのエントリにも一致しないトラフィックは、--default-service flag のエントリに送信されます。

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

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

          gcloud compute url-maps add-path-matcher web-map \
              --default-service web-backend-service \
              --path-matcher-name pathmap \
              --path-rules="/video=video-backend-service,/video/*=video-backend-service"
          
  6. HTTPS プロキシで使用する自己署名 SSL 証明書リソースを作成します。

    デモ目的では自己署名証明書を使用していますが、実際のデプロイでは、CA 署名証明書を使用するようにロードバランサを設定します。その場合は、独自の SSL 証明書を指定するセルフマネージド証明書、または Google がドメインの証明書を発行する Google マネージド証明書を使用できます。詳しくは、SSL 証明書のタイプをご覧ください。複数の SSL 証明書を使用している場合は、証明書ごとに SSL 証明書リソースを作成する必要があります。

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

        gcloud compute ssl-certificates create www-ssl-cert \
            --certificate [CRT_FILE_PATH] \
            --private-key [KEY_FILE_PATH]
        

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

        gcloud beta compute ssl-certificates create www-ssl-cert \
          --domains [DOMAIN]
        
  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 つのグローバル転送ルールを作成して、作成した IP アドレスごとに受信したリクエストをプロキシにルーティングします。

        gcloud compute forwarding-rules create https-content-rule \
            --address=lb-ipv4-1\
            --global \
            --target-https-proxy=https-lb-proxy \
            --ports=443
        
        gcloud compute forwarding-rules create https-content-ipv6-rule \
            --address=lb-ipv6-1 \
            --global \
            --target-https-proxy=https-lb-proxy \
            --ports=443
        

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

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

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

Console / ウェブブラウザ


  1. Google Cloud Console で [負荷分散] ページに移動します。
    [負荷分散] ページに移動
  2. web-map をクリックして、作成したロードバランサを展開します。
  3. [バックエンド] セクションで、インスタンスが正常であることを確認します。[正常] 列には、4 つのインスタンス グループそれぞれで両方のインスタンスが正常であることが示されます。それ以外の場合は、最初にページを再読み込みしてみてください。インスタンスが正常な状態であることが Cloud Console に表示されるまでに時間がかかる場合があります。数分経ってもバックエンドが正常に動作しない場合は、ファイアウォールの構成とバックエンド インスタンスに割り当てられているネットワーク タグのセットを確認します。
  4. Google マネージド証明書を使用している場合は、証明書リソースのステータスが ACTIVE であることを確認します。詳しくは、Google マネージド SSL 証明書リソースのステータスをご覧ください。
  5. バックエンド インスタンスが正常であることが Cloud Console に表示されたら、ウェブブラウザを使用して https://<var>IP_Address</var> に移動し、ロードバランサのテストを行うことができます。ここで、IP_Addressロードバランサの IP アドレス です。テストに自己署名証明書を使用した場合、ブラウザに警告が表示されます。自己署名証明書を受け付けるためには、ブラウザで明示的に設定する必要があります。ページを提供したインスタンスの名前とそのゾーン(Page on www-us-02 in us-central1-b など)を示すコンテンツを含むページがブラウザで表示されます。
  6. ウェブブラウザで https://<var>IP_Address</var>/video に移動します。ここで IP_Addressロードバランサの IP アドレスを表します。ページを提供した動画インスタンスの名前とそのゾーン(Page on video-us-02 in us-central1-b など)を示すコンテンツを含むページがブラウザで表示されます。

gcloud/ curl の使用


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

         gcloud beta compute ssl-certificates list
        
  2. curl を使用して、これらの URL からのレスポンスをテストします。ここで、IP_Addressロードバランサの IPv4 アドレスに置き換えてください。

        curl -k https://IP_Address
        curl -k https://IP_Address/video/
        
  3. curl を使用して、これらの URL からのレスポンスをテストします。ここで、IP_Addressロードバランサの IPv6 アドレスに置き換えてください。IPv6 の場合は、角かっこ([])を使用してアドレスを囲み、-g フラグでグロビングを無効にする必要があります(たとえば、curl -g -6 "https://[2001:DB8::]/")。

        curl -k -g -6 https://[IP_Address]
        curl -k -g -6 https://[IP_Address]/video/
        

クロスリージョン機能のテスト

別の地域のユーザーをシミュレートするには、別のリージョンの仮想マシン インスタンスに接続し、curl コマンドを実行して、リクエストから最も近いリージョンのインスタンスにリクエストの行き先を変更します。

HTML 出力 <!doctype html><html><body><h1>www-us</h1></body></html> が表示されます。

同じステップを繰り返しますが、今回は接続先を www-eu-1に変更します。<!doctype html><html><body><h1>www-eu</h1></body></html> という出力が読み込まれるようになりました。

世界中のクライアント システムからテストを実行できます。リージョン内のバックエンドが正常ではなくなるか、容量に達した場合、HTTPS ロードバランサによって、自動的にトラフィックが次に最も近いリージョンに送信されます。

任意: バックエンド VM から外部 IP アドレスを削除する

Google Cloud の HTTP(S) 負荷分散では、内部 IP アドレスと特別なロードバランサ ルートを使用してバックエンドと通信します。バックエンドのインスタンスでは、ロードバランサとの通信に外部 IP アドレスは使用されません。バックエンドのインスタンスから外部 IP アドレスが除外されるため、セキュリティが強化されます。

バックエンドのインスタンスから外部 IP アドレスを削除するには、次の手順に従ってください。

SSH を使用して外部 IP アドレスを持たないバックエンド インスタンスに接続する必要がある場合は、外部 IP アドレスを持たないインスタンスに接続するをご覧ください。

クリーンアップ

この HTTP(S) 負荷分散のチュートリアルを完了したら、将来にわたって課金が継続されないように、Cloud Load Balancing のリソースを削除してください。これらのリソースが独自のプロジェクト内で作成されている場合は、プロジェクト全体を削除することもできます。それ以外の場合は、リソースを個別に削除してください。

プロジェクトの削除

Console


  1. Google Cloud Console の [プロジェクト] ページに移動します。
    プロジェクト ページに移動
  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログで project ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

gcloud


次のコマンドを実行します。project_id は、プロジェクト ID に置き換えてください。

    gcloud projects delete project_id
    

リソースを個別に削除する

Console


ロードバランサを削除する

  1. Google Cloud Console で [負荷分散] ページに移動します。
    [負荷分散] ページに移動
  2. web-map の横のチェックボックスをオンにします。
  3. ページ上部にある [削除] ボタンをクリックします。
  4. バックエンド サービス、ヘルスチェック、SSL 証明書など、すべての追加リソースの横にあるチェックボックスをオンにします。
  5. [ロードバランサと選択したリソースを削除] をクリックします。

インスタンス グループを削除する

  1. Google Cloud Console の [インスタンス グループ] ページに移動します。
    [インスタンス グループ] ページに移動
  2. [名前] の横にある上部のチェックボックスをオンにして、すべてのインスタンス グループを選択します。
  3. [削除] をクリックします。
  4. 確認ウィンドウで [削除] をクリックします。

外部 IP アドレスを解放する

  1. Google Cloud Console で外部 IP アドレスのページに移動します。
    [外部 IP アドレス] ページに移動
  2. lb-ipv4-1lb-ipv6-1 の横にあるチェックボックスをオンにします。
  3. [削除] をクリックします。
  4. 確認ウィンドウで [削除] をクリックします。

ファイアウォール ルールを削除する

  1. Google Cloud Console の [ファイアウォール] ページに移動します。
    [ファイアウォール] ページに移動
  2. fw-allow-health-check-and-proxyfw-allow-ssh の横にあるチェックボックスをオンにします。
  3. [削除] をクリックします。
  4. 確認ウィンドウで [削除] をクリックします。

VM インスタンスを削除する

  1. Google Cloud Console の [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. [名前] の横にある上部のチェックボックスをオンにして、すべてのインスタンスを選択します。
  3. [削除] をクリックします。
  4. 確認ウィンドウで [削除] をクリックします。

VPC ネットワークを削除する

  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. [lb-network] をクリックします。
  3. ネットワークの詳細ページで、[VPC ネットワークの削除] をクリックします。
  4. 確認ウィンドウで [削除] をクリックします。

gcloud


ロードバランサを削除する

ロードバランサを削除するには、ロードバランサの各コンポーネントをそれぞれ削除する必要があります。

  1. 特定した転送ルールを削除します。

        gcloud compute forwarding-rules delete https-content-rule \
            --global
        gcloud compute forwarding-rules delete https-content-ipv6-rule \
            --global
        
  2. グローバル外部 IP アドレスを削除します。

        gcloud compute addresses delete lb-ipv4-1 \
            --global
        gcloud compute addresses delete lb-ipv6-1 \
            --global
        
  3. ターゲット プロキシを削除します。

        gcloud compute target-https-proxies delete https-lb-proxy
        
  4. SSL 証明書を削除します。

        gcloud compute ssl-certificates delete www-ssl-cert
        
  5. URL マップを削除します。

        gcloud compute url-maps delete web-map
        
  6. バックエンド サービスを削除します。

        gcloud compute backend-services delete web-backend-service \
            --global
        gcloud compute backend-services delete video-backend-service \
            --global
        
  7. ヘルスチェックを削除します。

        gcloud compute health-checks delete http-basic-check
        

これですべてのロードバランサのリソースが削除されました。

インスタンス グループを削除する

以下に示すコマンドを繰り返して、4 つの非マネージド インスタンス グループを作成します。次のような名前、ゾーンの組み合わせを使用します。INSTANCE_GROUP_NAMEZONEは、次のように置き換えてください。

  • 名前: ig-www-us、ゾーン: us-central1-b
  • 名前: ig-video-us、ゾーン: us-central1-b
  • 名前: ig-www-eu、ゾーン: europe-west1-b
  • 名前: ig-video-eu、ゾーン: europe-west1-b
    gcloud compute instance-groups unmanaged delete INSTANCE_GROUP_NAME \
       --zone=ZONE
    

VM インスタンスを削除する

以下に示すコマンドを、次のような名前とゾーンの組み合わせを使用して繰り返し、8 つの VM を削除します。VM_NAMEZONE は、次のように置き換えてください。

  • 名前: www-us-01、ゾーン: us-central1-b
  • 名前: www-us-02、ゾーン: us-central1-b
  • 名前: video-us-01、ゾーン: us-central1-b
  • 名前: video-us-02、ゾーン: us-central1-b
  • 名前: www-eu-01、ゾーン: europe-west1-b
  • 名前: www-eu-02、ゾーン: europe-west1-b
  • 名前: video-eu-01、ゾーン: europe-west1-b
  • 名前: video-eu-02、ゾーン: europe-west1-b
    gcloud compute instance delete VM_NAME \
       --zone=ZONE
    

ファイアウォール ルールを削除する

両方のファイアウォール ルールを削除します。

    gcloud compute firewall-rules delete fw-allow-health-check-and-proxy
    gcloud compute firewall-rules delete fw-allow-ssh
    

VPC ネットワークを削除する

まず、us-subnet を削除します。

    gcloud compute networks subnets delete us-subnet \
        --region=us-central1
    

次に、eu-subnet を削除します。

    gcloud compute networks subnets delete eu-subnet \
        --region=europe-west1
    

最後に、VPC ネットワークを削除します。

    gcloud compute networks delete lb-network
    

これでプロジェクトで設定したすべてのリソースが削除されました。

次のステップ