共有 VPC でグローバル外部アプリケーション ロードバランサを設定する

このドキュメントでは、共有 VPC 環境で VM インスタンス グループのバックエンドを使用してグローバル外部アプリケーション ロードバランサを設定するためのサンプル構成を 2 つ示します。

  • 最初の例では、ロードバランサのフロントエンドとバックエンドのコンポーネントが 1 つのサービス プロジェクトに作成されています。
  • 2 番目の例では、ロードバランサのフロントエンド コンポーネントと URL マップが 1 つのサービス プロジェクトに作成され、ロードバランサのバックエンド サービスとバックエンドが別のサービス プロジェクトに作成されています。このタイプのデプロイでは、1 つのプロジェクトの URL マップが別のプロジェクトのバックエンド サービスを参照しているため、プロジェクト間のサービス参照と呼ばれます。

どちらの例も同じ初期構成を必要とします。ロードバランサの作成を開始する前に、ホスト プロジェクトで権限の付与ネットワークとサブネットの構成を行い、共有 VPC を設定する必要があります。

これ以外にも、グローバル外部アプリケーション ロードバランサでサポートされる共有 VPC 構成があります。その他の有効な共有 VPC アーキテクチャについては、共有 VPC アーキテクチャをご覧ください。

共有 VPC ネットワークを使用しない場合は、VM インスタンス グループのバックエンドを使用してグローバル外部アプリケーション ロードバランサを設定するをご覧ください。

始める前に

必要な権限

共有 VPC ネットワークにロードバランサを設定するには、管理者が初期設定とプロビジョニングを行う必要があります。初期設定後、サービス プロジェクトのオーナーは、次のいずれかを行います。

  • ロードバランサのすべてのコンポーネントとそのバックエンドをサービス プロジェクトにデプロイします。
  • 別のサービスまたはホスト プロジェクトの URL マップから参照可能なサービス プロジェクトに、ロードバランサのバックエンド コンポーネント(バックエンド サービスとバックエンド)をデプロイします。

このセクションでは、このガイドに沿って共有 VPC ネットワークにロードバランサを設定するために必要な権限について簡単に説明します。

共有 VPC を設定する

以下では、次のタスクを実行する際に必要なロールについて説明します。

  1. 共有 VPC の設定やホスト プロジェクトの有効化などの 1 回限りの管理タスクを実行する。
  2. 新しいサービス プロジェクトをオンボーディングするたびに繰り返す必要がある管理タスクを実行する。これには、サービス プロジェクトの接続、ネットワーク リソースのプロビジョニングと構成、サービス プロジェクト管理者へのアクセス権の付与が含まれます。

これらのタスクは、共有 VPC ホスト プロジェクトで実行する必要があります。共有 VPC 管理者も共有 VPC ホスト プロジェクトのオーナーにすることをおすすめします。これにより、ネットワーク管理者とセキュリティ管理者のロールが自動的に付与されます。

タスク 必要なロール
共有 VPC の設定、ホスト プロジェクトの有効化、サービス プロジェクト管理者へのアクセス権の付与 共有 VPC 管理者
共有 VPC ホスト プロジェクトでのサブネットの作成とサービス プロジェクト管理者へのアクセス権の付与 ネットワーク管理者
ファイアウォール ルールの追加と削除 セキュリティ管理者

サブネットをプロビジョニングしたら、ホスト プロジェクトのオーナーは、これらのリソースを使用するすべてのユーザー(通常はサービス プロジェクト管理者、デベロッパー、またはサービス アカウント)に、ホスト プロジェクトのネットワーク ユーザー ロールを付与します。

タスク 必要なロール
ホスト プロジェクトに属する VPC ネットワークとサブネットの使用 ネットワーク ユーザー

このロールは、プロジェクト レベルまたは個々のサブネットに対して付与できます。Google では個々のサブネットにロールを付与することをおすすめします。プロジェクトにロールを付与すると、ホスト プロジェクトの VPC ネットワーク内の現在および将来のすべてのサブネットに対してアクセスを与えることになります。

ロードバランサとバックエンドをデプロイする

サービス プロジェクト管理者がロード バランシング リソースとバックエンドを作成するには、サービス プロジェクトで次のロールが必要です。これらの権限は、サービス プロジェクトのオーナーまたは編集者に自動的に付与されます。

サービス プロジェクトで付与されるロール
タスク 必要なロール
ロードバランサのコンポーネントの作成 ネットワーク管理者
インスタンスの作成 インスタンス管理者
SSL 証明書の作成と変更 セキュリティ管理者

プロジェクト間でバックエンド サービスを参照する

ロードバランサが他のサービス プロジェクトからバックエンド サービスを参照する必要がある場合(プロジェクト間サービス参照とも呼ばれる)、ロードバランサ管理者には、バックエンド サービスが作成されるサービス プロジェクトで次のロールが必要になります。

サービス プロジェクトで付与されるロール
タスク 必要なロール
他のプロジェクトのサービスを使用する権限 ロードバランサ サービス ユーザー

このロールは、プロジェクト レベルまたは個々のバックエンド サービスに対して付与できます。このロールを付与する方法については、このページのプロジェクト間サービスの参照の例をご覧ください。

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

前提条件

このセクションでは、次の操作を行います。

  1. ホスト プロジェクトでネットワークとサブネットを構成する
  2. ホスト プロジェクトで共有 VPC を設定する

このセクションの手順は、新しいロードバランサを作成するたびに行う必要はありません。ただし、ロードバランサの作成に進む前に、ここで説明するリソースにアクセスできることを確認する必要があります。

ホスト プロジェクトでネットワークとサブネットを構成する

ロードバランサのバックエンドのサブネットを含む共有 VPC ネットワークが必要です。

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

  • ネットワーク。ネットワークの名前は lb-network です。

  • ロードバランサのバックエンドのサブネットus-west1 リージョンの lb-backend-subnet という名前のサブネットは、プライマリ IP 範囲として 10.1.2.0/24 を使用します。

ロードバランサのバックエンドにサブネットを構成する

この手順は、新しいロードバランサを作成するたびに行う必要はありません。サービス プロジェクトが、共有 VPC ネットワーク内のサブネットにアクセスできることを確認するだけで済みます。

このセクションの手順はすべて、ホスト プロジェクトで実行する必要があります。

コンソール

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. [VPC ネットワークを作成] をクリックします。
  3. [名前] に「lb-network」と入力します。
  4. [サブネット] セクションで次の設定を行います。

    1. [サブネット作成モード] を [カスタム] に設定します。
    2. [新しいサブネット] セクションに、次の情報を入力します。

      • 名前: lb-backend-subnet
      • リージョン: us-west1

      • IP アドレス範囲: 10.1.2.0/24

    3. [完了] をクリックします。

  5. [作成] をクリックします。

gcloud

  1. gcloud compute networks create コマンドを使用して、VPC ネットワークを作成します。

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. サブネットを us-west1 リージョン内の lb-network ネットワークに作成します。

    gcloud compute networks subnets create lb-frontend-and-backend-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

サービス プロジェクト管理者にバックエンド サブネットへのアクセス権を付与する

サービス プロジェクト管理者は lb-backend-subnet サブネットにアクセスして、ロードバランサのバックエンドをプロビジョニングする必要があります。

共有 VPC 管理者は、サービス プロジェクト管理者(またはサブネットを使用するリソースとバックエンドをデプロイするデベロッパー)にアクセス権を付与する必要があります。手順については、一部のサブネットのサービス プロジェクト管理者をご覧ください。

ホスト プロジェクトでファイアウォール ルールを構成する

この例では、次のファイアウォール ルールを使用します。
  • fw-allow-health-check。ロードバランスされたインスタンスに適用される上り(内向き)ルール。Google Cloud ヘルスチェック システム(130.211.0.0/2235.191.0.0/16)からのすべての TCP トラフィックを許可します。この例では、ターゲットタグ load-balanced-backend を使用して、適用するインスタンスを識別します。
このファイアウォール ルールがない場合は、デフォルトの上り(内向き)拒否ルールによってバックエンド インスタンスへの受信トラフィックがブロックされます。

このセクションの手順はすべて、ホスト プロジェクトで実行する必要があります。

コンソール

  1. Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。

    [ファイアウォール ポリシー] に移動

  2. [ファイアウォール ルールを作成] をクリックして、Google Cloud ヘルスチェックを許可するルールを作成します。
    • 名前: fw-allow-health-check
    • ネットワーク: lb-network
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: load-balanced-backend
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 130.211.0.0/2235.191.0.0/16
    • プロトコルとポート:
      • 指定されたプロトコルとポートを選択します。
      • [TCP] をオンにして、ポート番号に「80」と入力します。
      • このルールは、ヘルスチェックに使用されているプロトコルとポートのみに制限することをおすすめします。プロトコルとポートに tcp:80 を使用すると、Google Cloud は、ポート 80 で HTTP を使用して VM に接続できますが、ポート 443 で HTTPS を使用して VM に接続することはできません。

  3. [作成] をクリックします。

gcloud

  1. Google Cloud ヘルスチェックを許可する fw-allow-health-check ファイアウォール ルールを作成します。この例では、ヘルスチェック プローバーからのすべての TCP トラフィックを許可します。ただし、必要に応じてポートの範囲を狭く構成することもできます。

    gcloud compute firewall-rules create fw-allow-health-check \
       --network=lb-network \
       --action=allow \
       --direction=ingress \
       --source-ranges=130.211.0.0/22,35.191.0.0/16 \
       --target-tags=load-balanced-backend \
       --rules=tcp
    

ホスト プロジェクトで共有 VPC を設定する

この手順では、共有 VPC ホスト プロジェクトを有効にして、ホスト プロジェクトのサブネットを共有し、サービス プロジェクトをホスト プロジェクトに接続して、サービス プロジェクトで共有 VPC ネットワークを使用できるようにします。ホスト プロジェクトに共有 VPC を設定するには、次のページをご覧ください。

以降の手順では、共有 VPC がすでに設定されていることを前提としています。この設定には、組織の IAM ポリシーの設定と、ホスト プロジェクトとサービス プロジェクトの指定が含まれています。

共有 VPC を設定し、ホスト プロジェクトとサービス プロジェクトを有効にするまで、先に進まないでください。

この前提条件のセクションで定義された手順を完了すると、次のいずれかの設定を行うことができます。

1 つのサービス プロジェクトでロードバランサを構成する

ホスト プロジェクトで VPC ネットワークを構成し、共有 VPC を設定したら、次にサービス プロジェクトに進みます。サービス プロジェクトでは、すべてのロード バランシング コンポーネント(バックエンド サービス、URL マップ、ターゲット プロキシ、転送ルール)とバックエンド サービスを作成する必要があります。

このセクションでは、前のセクションで説明したホスト プロジェクトの前提条件を満たしていることを前提としています。このセクションでは、1 つのサービス プロジェクトにバックエンドと一緒にロードバランサのフロントエンドとバックエンドのコンポーネントを作成します。

次の図は、共有 VPC ネットワーク内のホスト プロジェクトに接続されている、1 つのサービス プロジェクト内のグローバル外部アプリケーション ロードバランサのコンポーネントを示しています。

1 つのサービス プロジェクトのロードバランサのフロントエンドとバックエンドのコンポーネント
図 1. 1 つのサービス プロジェクトのロードバランサのフロントエンドとバックエンドのコンポーネント

これらの手順は、サービス プロジェクト管理者(またはサービス プロジェクト内で操作するデベロッパー)が行う必要があります。ホスト プロジェクト管理者が行う必要はありません。このセクションの手順は、グローバル外部アプリケーション ロードバランサを設定する標準の手順と似ています。

このページの例では、エフェメラル IP アドレスの割り振りを許可せずに、グローバル外部アプリケーション ロードバランサの転送ルールに予約済み IP アドレスを明示的に設定しています。転送ルールの IP アドレスは予約しておくことをおすすめします。

マネージド インスタンス グループのバックエンドを作成する

マネージド インスタンス グループを作成する前段階としてインスタンス テンプレートを作成します。これは、仮想マシン(VM)インスタンスの作成に使用できるリソースです。クライアントからのトラフィックは、インスタンス グループ内の VM にロードバランスされます。このマネージド インスタンス グループの VM では、外部アプリケーション ロードバランサのバックエンド サーバーが実行されます。この例では、バックエンドはそれぞれのホスト名でサービスを提供します。

コンソール

インスタンス テンプレートを作成する

  1. Google Cloud コンソールで、Compute Engine の [インスタンス テンプレート] ページに移動します。

    [インスタンス テンプレート] に移動

  2. [インスタンス テンプレートを作成] をクリックします。

  3. [名前] に「backend-template」と入力します。

  4. [ブートディスク] セクションで、ブートディスクが Debian GNU/Linux 10 (buster) などの Debian イメージに設定されていることを確認します。必要に応じてイメージを変更するには、[変更] をクリックします。

  5. [詳細オプション] セクションを開きます。

  6. [ネットワーキング] セクションを開き、[ネットワーク タグ] フィールドに「load-balanced-backend」と入力します。

  7. [ネットワーク インターフェース] で、[共有ネットワーク(共有元のホスト プロジェクト: HOST_PROJECT_ID] を選択します。

  8. [共有サブネットワーク] リストで、lb-network ネットワークから lb-backend-subnet サブネットを選択します。

  9. [管理] セクションを開き、[自動化] フィールドに次の起動スクリプトを指定します。

     #! /bin/bash
     apt-get update
     apt-get install apache2 -y
     a2ensite default-ssl
     a2enmod ssl
     vm_hostname="$(curl -H "Metadata-Flavor:Google" \
     http://metadata.google.internal/computeMetadata/v1/instance/name)"
     echo "Page served from: $vm_hostname" | \
     tee /var/www/html/index.html
     systemctl restart apache2
    
  10. [作成] をクリックします。

マネージド インスタンス グループを作成する

  1. Google Cloud コンソールで、Compute Engine の [インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

  2. [インスタンス グループを作成] をクリックします。

  3. オプションから、[新しいマネージド インスタンス グループ(ステートレス)] を選択します。

  4. インスタンス グループの名前として「lb-backend」と入力します。

  5. [インスタンス テンプレート] リストで、前の手順で作成したインスタンス テンプレート backend-template を選択します。

  6. [ロケーション] セクションで、[シングルゾーン] を選択し、次の値を入力します。

    • [リージョン] で us-west1 を選択します。

    • [ゾーン] で us-west1-a を選択します。

  7. [自動スケーリング] セクションに次の値を入力します。

    • [自動スケーリング モード] で [オン: グループに対してインスタンスを追加および削除します] を選択します。

    • [インスタンスの最小数] に 2 を選択します。

    • [インスタンスの最大数] に 3 を選択します。

  8. [ポート マッピング] セクションで、[ポートを追加] をクリックして、次の値を入力します。

    • [ポート名] に「http」と入力します。

    • [ポート番号] に「80」と入力します。

  9. [作成] をクリックします。

gcloud

  1. インスタンス テンプレートを作成します。

    gcloud compute instance-templates create backend-template \
        --region=us-west1 \
        --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
        --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-backend-subnet \
        --tags=load-balanced-backend \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --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://metadata.google.internal/computeMetadata/v1/instance/name)"
        echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        systemctl restart apache2' \
        --project=SERVICE_PROJECT_ID
    
  2. マネージド インスタンス グループを作成し、前の手順で作成したインスタンス テンプレートを選択します。

    gcloud compute instance-groups managed create lb-backend \
        --zone=us-west1-a \
        --size=2 \
        --template=backend-template \
        --project=SERVICE_PROJECT_ID
    
  3. インスタンス グループに名前付きポートを追加します。

    gcloud compute instance-groups set-named-ports lb-backend \
        --named-ports=http:80 \
        --zone=us-west1-a \
        --project=SERVICE_PROJECT_ID
    

ヘルスチェックを作成する

ヘルスチェックは、バックエンドの稼働を確認するテストです。HTTP プロトコルを使用し、ポート 80 で検査を行うヘルスチェックを作成します。後で、ロードバランサが参照するバックエンド サービスにこのヘルスチェックを接続します。

コンソール

  1. Google Cloud コンソールで、Compute Engine の [ヘルスチェック] ページに移動します。

    [ヘルスチェック] に移動

  2. ヘルスチェックの名前に「lb-health-check」と入力します。

  3. [プロトコル] を HTTP に設定します。

  4. [作成] をクリックします。

gcloud

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

gcloud compute health-checks create http lb-health-check \
  --use-serving-port \
  --project=SERVICE_PROJECT_ID

ロードバランサの IP アドレスを予約する

ロードバランサの転送ルールに割り当てることができるグローバル静的外部 IP アドレスを予約します。

コンソール

  1. Google Cloud コンソールで、[VPC ネットワーク] の [IP アドレス] ページに移動します。

    [IP アドレス] に移動

  2. [静的外部 IP アドレスを予約] をクリックします。

  3. [名前] に「lb-ipv4-1」と入力します。

  4. [ネットワーク サービス階層] に [プレミアム] を設定します。

  5. [IP バージョン] を IPv4 に設定します。

  6. [タイプ] を [グローバル] に設定します。

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

gcloud

グローバル静的外部 IP アドレスを作成します。

gcloud compute addresses create lb-ipv4-1 \
  --ip-version=IPV4 \
  --network-tier=PREMIUM \
  --global
  --project=SERVICE_PROJECT_ID

SSL 証明書リソースを設定する

リクエスト レスポンス プロトコルとして HTTPS を使用するロードバランサの場合は、次のリソースの説明に沿って SSL 証明書リソースを作成します。

Google マネージド証明書を使用することをおすすめします。

この例では、lb-ssl-cert という名前の SSL 証明書が作成されていることを前提としています。SSL 証明書は、以下の手順の 1 つで作成するターゲット プロキシに関連付けられます。

ロードバランサを構成する

このセクションでは、グローバル外部アプリケーション ロードバランサに次のリソースを作成する方法について説明します。

  • マネージド インスタンス グループをバックエンドとして使用するバックエンド サービス
  • URL マップ
  • SSL 証明書(HTTPS トラフィックの場合のみ必須)
  • ターゲット プロキシ
  • 転送ルール

この例では、クライアントとロードバランサの間のリクエスト レスポンス プロトコルとして HTTP または HTTPS を使用できます。HTTPS の場合、プロキシの構成には SSL 証明書リソースが必要です。Google マネージド証明書を使用することをおすすめします。

コンソール

構成を開始する

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

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

  2. [ロードバランサを作成] をクリックします。
  3. [ロードバランサの種類] で [アプリケーション ロードバランサ(HTTP / HTTPS)] を選択し、[次へ] をクリックします。
  4. [インターネット接続または内部] で [インターネット接続(外部)] を選択し、[次へ] をクリックします。
  5. [グローバルまたはシングル リージョンのデプロイ] で [グローバル ワークロードに最適] を選択し、[次へ] をクリックします。
  6. [ロードバランサの世代] で [グローバル外部アプリケーション ロードバランサ] を選択し、[次へ] をクリックします。
  7. [構成] をクリックします。

基本構成

  1. ロードバランサの名前に「l7-xlb-shared-vpc」を入力します。

ロードバランサのフロントエンドを構成する

HTTP トラフィックの場合:

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

  2. ロードバランサのフロントエンドの名前に「http-fw-rule」と入力します。

  3. [プロトコル] で [HTTP] を選択します。

  4. [IP バージョン] を IPv4 に設定します。

  5. [IP アドレス] で、以前に予約した IP アドレス lb-ipv4-1 を選択します。

  6. [ポート] を 80 に設定して、HTTP トラフィックを許可します。

  7. フロントエンドの構成を完了するには、[完了] をクリックします。

  8. 続行する前に、[フロントエンドの構成] の隣に青いチェックマークがあることを確認します。

HTTPS トラフィックの場合:

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

  2. ロードバランサのフロントエンドの名前に「https-fw-rule」と入力します。

  3. [プロトコル] で [HTTPS] を選択します。

  4. [IP バージョン] を IPv4 に設定します。

  5. [IP アドレス] で、以前に予約した IP アドレス lb-ipv4-1 を選択します。

  6. [ポート] を 443 に設定して HTTPS トラフィックを許可します。

  7. [証明書] リストで、作成した SSL 証明書を選択します。

  8. フロントエンドの構成を完了するには、[完了] をクリックします。

  9. 続行する前に、[フロントエンドの構成] の隣に青いチェックマークがあることを確認します。

バックエンドを構成する

  1. [バックエンドの構成] をクリックします。

  2. [バックエンド サービスとバックエンド バケット] メニューで、[バックエンド サービスを作成] をクリックします。

  3. バックエンド サービスの名前として「lb-backend-service」と入力します。

  4. [バックエンド タイプ] で [インスタンス グループ] を選択します。

  5. [プロトコル] を HTTP に設定します。

  6. [名前付きポート] フィールドに「http」と入力します。これは、マネージド インスタンス グループの作成時に入力したものと同じポート名です。

  7. バックエンド サービスにバックエンドを追加する手順は次のとおりです。

    1. [バックエンド] セクションで、[インスタンス グループ] を lb-backend に設定します。これは、前の手順で作成したマネージド インスタンス グループです。

    2. [ポート番号] に「80」と入力します。

    3. バックエンドを追加するには、[完了] をクリックします。

  8. ヘルスチェックを追加するには、[ヘルスチェック] リストで、先ほど作成したヘルスチェック lb-health-check を選択します。

  9. バックエンド サービスを作成するには、[作成] をクリックします。

  10. 続行する前に、[バックエンドの構成] の隣に青いチェックマークがあることを確認します。

ルーティング ルールを構成する

  • [ルーティング ルール] をクリックします。lb-backend-service が、一致しないホストおよび一致しないパスのデフォルトのバックエンド サービスであることを確認します。

トラフィック管理の詳細については、トラフィック管理を設定するをご覧ください。

構成を確認して完了する

  1. [確認と完了] をクリックします。

  2. ロードバランサのフロントエンドとバックエンドの設定が意図したとおりに構成されていることを確認します。

  3. [作成] をクリックし、ロードバランサが作成されるのを待ちます。

gcloud

  1. バックエンド全体にトラフィックを分散するバックエンド サービスを作成します。

    gcloud compute backend-services create lb-backend-service \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=HTTP \
        --port-name=http \
        --health-checks=lb-health-check \
        --global \
        --project=SERVICE_PROJECT_ID
    
  2. インスタンス グループをバックエンドとしてバックエンド サービスに追加します。

    gcloud compute backend-services add-backend lb-backend-service \
        --instance-group=lb-backend \
        --instance-group-zone=us-west1-a \
        --global \
        --project=SERVICE_PROJECT_ID
    
  3. 受信リクエストをバックエンド サービスに転送するための URL マップを作成します。

    gcloud compute url-maps create lb-map \
        --default-service=lb-backend-service \
        --global \
        --project=SERVICE_PROJECT_ID
    
  4. ターゲット プロキシを作成します。

    HTTP トラフィックの場合、リクエストを URL マップに転送するターゲット HTTP プロキシを作成します。

    gcloud compute target-http-proxies create http-proxy \
        --url-map=lb-map \
        --global \
        --project=SERVICE_PROJECT_ID
    

    HTTPS トラフィックの場合、リクエストを URL マップに転送するターゲット HTTPS プロキシを作成します。プロキシはロードバランサの一部であり、HTTPS ロードバランサ用の SSL 証明書を保持するため、この手順で SSL 証明書も読み込みます。

    gcloud compute target-https-proxies create https-proxy \
        --url-map=lb-map \
        --ssl-certificates=lb-ssl-cert
        --global \
        --project=SERVICE_PROJECT_ID
    
  5. 転送ルールを作成します。

    HTTP トラフィックの場合、受信リクエストをターゲット プロキシに転送するグローバル転送ルールを作成します。

    gcloud compute forwarding-rules create http-fw-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --address=lb-ipv4-1 \
        --global \
        --target-http-proxy=http-proxy \
        --ports=80 \
        --project=SERVICE_PROJECT_ID
    

    HTTPS トラフィックの場合、受信リクエストをターゲット プロキシに転送するグローバル転送ルールを作成します。

    gcloud compute forwarding-rules create https-fw-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --address=lb-ipv4-1 \
        --global \
        --target-https-proxy=https-proxy \
        --ports=443 \
        --project=SERVICE_PROJECT_ID
    

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

ロード バランシング サービスが稼働中になったら、転送ルールへトラフィックを送信できます。また、各インスタンスに分散されるトラフィックを監視できます。

Console

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

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

  2. 作成したロードバランサをクリックします。

  3. ロードバランサの IP アドレスをメモします。この IP アドレスは、次の手順で LB_IP_ADDRESS として参照されます。

  4. [バックエンド] セクションで、VM が正常であることを確認します。

    [正常] 列には、VM が正常であることを示す値が入ります。たとえば、2 つのインスタンスが作成されると、その横に緑色のチェックマークが付いた「2 of 2」を含むメッセージが表示されます。それ以外の場合は、最初にページを再読み込みしてみてください。VM が正常な状態であることが Google Cloud コンソールに表示されるまでに時間がかかる場合があります。数分経ってもバックエンドが正常に動作しない場合は、ファイアウォールの構成と、バックエンド VM に割り当てられているネットワーク タグを確認します。

  5. Google Cloud コンソールでバックエンド インスタンスが正常であることを確認したら、ウェブブラウザで https://LB_IP_ADDRESS(または http://LB_IP_ADDRESS)にアクセスしてロードバランサをテストできます。LB_IP_ADDRESS は、ロードバランサの IP アドレスに置き換えてください。

  6. HTTPS のテストに自己署名証明書を使用した場合は、ブラウザに警告が表示されます。自己署名証明書を受け付けるためには、ブラウザで明示的に設定する必要があります。

  7. ページを提供したインスタンスの名前(Page served from: lb-backend-example-xxxx など)を示すコンテンツを含むページがブラウザで表示されます。お使いのブラウザでこのページがレンダリングされない場合は、このガイドの構成設定を確認してください。

gcloud

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

gcloud compute addresses describe IP_ADDRESS_NAME \
    --format="get(address)" \
    --global

ウェブブラウザで https://LB_IP_ADDRESS(または http://LB_IP_ADDRESS)を設定すると、ロードバランサをテストできます。LB_IP_ADDRESS は、ロードバランサの IP アドレスに置き換えます。

HTTPS のテストに自己署名証明書を使用した場合は、ブラウザに警告が表示されます。自己署名証明書を受け付けるためには、ブラウザで明示的に設定する必要があります。

バックエンド インスタンスに関する最小限の情報を含むページがブラウザで表示されます。お使いのブラウザでこのページが表示されない場合は、このガイドの構成設定を確認してください。

クロス プロジェクト バックエンド サービスを使用してロードバランサを構成する

このページの前の例では、すべてのロードバランサ コンポーネントとそのバックエンドが 1 つのサービス プロジェクト内に作成される共有 VPC デプロイを設定しました。

グローバル外部アプリケーション ロードバランサでは、1 つのホストまたはサービス プロジェクトの URL マップが、共有 VPC 環境の複数のサービス プロジェクトにまたがるバックエンド サービス(とバックエンド)を参照できる共有 VPC デプロイを構成することもできます。これは、プロジェクト間のサービス参照と呼ばれます。

このセクションの手順では、サポートされている以下のいずれかの組み合わせを構成できます。

  • 転送ルール、ホスト プロジェクトのターゲット プロキシと URL マップ、サービス プロジェクトのバックエンド サービス
  • 1 つのサービス プロジェクトの転送ルール、ターゲット プロキシ、URL マップ、別のサービス プロジェクトのバックエンド サービス

設定要件

共有 VPC を設定して、この例のネットワーク、サブネット、ファイアウォール ルールを構成するための前提条件をすべて満たす必要があります。まだ行っていない場合は、必要な手順を完了してください。手順については、このページの始めにある次のセクションをご覧ください。

この設定では、転送ルール、ターゲット プロキシ、URL マップは一方のサービス プロジェクトにあり、バックエンド サービスとバックエンドはもう一方のサービス プロジェクトにあります。

  1. サービス プロジェクト B では、次のバックエンド リソースを構成します。
    • マネージド インスタンス グループのバックエンド
    • ヘルスチェック
    • グローバル バックエンド サービス
  2. サービス プロジェクト A では、次のフロントエンド リソースを構成します。
    • IP アドレス
    • SSL 証明書
    • URL マップ
    • ターゲット プロキシ
    • 転送ルール

次の図では、あるサービス プロジェクトのロードバランサのバックエンド サービスが、別のサービス プロジェクトの URL マップによって参照されるグローバル外部アプリケーション ロードバランサを示します。

ロードバランサのフロントエンド コンポーネントとバックエンド コンポーネントが別のサービス プロジェクトに存在する
図 2. ロードバランサのフロントエンドとバックエンドが別のサービス プロジェクトに存在する

グローバル外部アプリケーション ロードバランサを使用したプロジェクト間のサービス参照では、バックエンド インスタンスが同じ VPC ネットワークや共有 VPC ネットワークの一部である必要はありません。

この例では、サービス プロジェクトのバックエンド VM は、ホスト プロジェクトで作成された共有 VPC ネットワークの一部です。ただし、スタンドアロン VPC ネットワーク(つまり、共有されていない VPC ネットワーク)を、必要なファイアウォール ルールとともにサービス プロジェクトに設定することもできます。このスタンドアロン VPC ネットワークの一部であるバックエンド インスタンス(インスタンス グループなど)を作成できます。バックエンド インスタンスを作成した後は、次の例に示すように、残りの手順に沿ってサービス プロジェクトにバックエンド サービスを作成し、プロジェクト間のサービス参照を使用して別のサービス プロジェクトの URL マップに接続できます。

サービス プロジェクト B でロードバランサのバックエンド コンポーネントを構成する

このセクションでは、サービス プロジェクト B で次のバックエンド リソースを構成する必要があります。

  • マネージド インスタンス グループ
  • ヘルスチェック
  • グローバル バックエンド サービス

マネージド インスタンス グループのバックエンドを作成する

マネージド インスタンス グループを作成する前段階としてインスタンス テンプレートを作成します。これは、仮想マシン(VM)インスタンスの作成に使用できるリソースです。クライアントからのトラフィックは、インスタンス グループ内の VM にロードバランスされます。このマネージド インスタンス グループの VM では、外部アプリケーション ロードバランサのバックエンド サーバーが実行されます。この例では、バックエンドはそれぞれのホスト名でサービスを提供します。

コンソール

インスタンス テンプレートを作成する

  1. Google Cloud コンソールで、Compute Engine の [インスタンス テンプレート] ページに移動します。

    [インスタンス テンプレート] に移動

  2. [インスタンス テンプレートを作成] をクリックします。

  3. [名前] に「backend-template」と入力します。

  4. [ブートディスク] セクションで、ブートディスクが Debian GNU/Linux 10 (buster) などの Debian イメージに設定されていることを確認します。必要に応じてイメージを変更するには、[変更] をクリックします。

  5. [詳細オプション] セクションを開きます。

  6. [ネットワーキング] セクションを開き、[ネットワーク タグ] フィールドに「load-balanced-backend」と入力します。

  7. [ネットワーク インターフェース] で、[共有ネットワーク(共有元のホスト プロジェクト: HOST_PROJECT_ID)] を選択します。

  8. [共有サブネットワーク] リストで、lb-network ネットワークから lb-backend-subnet サブネットを選択します。

  9. [管理] セクションを開き、[自動化] フィールドに次の起動スクリプトを指定します。

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
    
  10. [作成] をクリックします。

マネージド インスタンス グループを作成する

  1. Google Cloud コンソールで、Compute Engine の [インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

  2. [インスタンス グループを作成] をクリックします。

  3. オプションから、[新しいマネージド インスタンス グループ(ステートレス)] を選択します。

  4. インスタンス グループの名前として「lb-backend」と入力します。

  5. [インスタンス テンプレート] リストで、前の手順で作成したインスタンス テンプレート backend-template を選択します。

  6. [ロケーション] セクションで、[シングルゾーン] を選択し、次の値を入力します。

    • [リージョン] で us-west1 を選択します。

    • [ゾーン] で us-west1-a を選択します。

  7. [自動スケーリング] セクションに次の値を入力します。

    • [自動スケーリング モード] で [オン: グループに対してインスタンスを追加および削除します] を選択します。

    • [インスタンスの最小数] に 2 を選択します。

    • [インスタンスの最大数] に 3 を選択します。

  8. [ポート マッピング] セクションで、[ポートを追加] をクリックして、次の値を入力します。

    • [ポート名] に「http」と入力します。

    • [ポート番号] に「80」と入力します。

  9. [作成] をクリックします。

gcloud

  1. インスタンス テンプレートを作成します。

    gcloud compute instance-templates create backend-template \
        --region=us-west1 \
        --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
        --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-backend-subnet \
        --tags=load-balanced-backend \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --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://metadata.google.internal/computeMetadata/v1/instance/name)"
        echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        systemctl restart apache2' \
        --project=SERVICE_PROJECT_B_ID
    
  2. マネージド インスタンス グループを作成し、前の手順で作成したインスタンス テンプレートを選択します。

    gcloud compute instance-groups managed create lb-backend \
        --zone=us-west1-a \
        --size=2 \
        --template=backend-template \
        --project=SERVICE_PROJECT_B_ID
    
  3. インスタンス グループに名前付きポートを追加します。

    gcloud compute instance-groups set-named-ports lb-backend \
        --named-ports=http:80 \
        --zone=us-west1-a \
        --project=SERVICE_PROJECT_B_ID
    

ヘルスチェックを作成する

ヘルスチェックは、バックエンドの稼働を確認するテストです。HTTP プロトコルを使用し、ポート 80 で検査を行うヘルスチェックを作成します。後で、ロードバランサが参照するバックエンド サービスにこのヘルスチェックを接続します。

コンソール

  1. Google Cloud コンソールで、Compute Engine の [ヘルスチェック] ページに移動します。

    [ヘルスチェック] に移動

  2. ヘルスチェックの名前に「lb-health-check」と入力します。

  3. [プロトコル] を HTTP に設定します。

  4. [作成] をクリックします。

gcloud

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

gcloud beta compute health-checks create http lb-health-check \
  --use-serving-port \
  --project=SERVICE_PROJECT_B_ID

グローバル バックエンド サービスを作成する

バックエンド全体にトラフィックを分散するグローバル バックエンド サービスを作成します。この手順の一環として、作成したヘルスチェックをバックエンド サービスに割り当て、インスタンス グループをバックエンドとしてバックエンド サービスに追加する必要があります。

コンソール

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

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

  2. [バックエンド] セクションに移動します。

  3. [バックエンド サービスを作成] をクリックします。

  4. [Global backend service] で、[作成] ボタンをクリックします。

  5. バックエンド サービスの名前として「cross-ref-backend-service」と入力します。

  6. [バックエンド タイプ] で [インスタンス グループ] を選択します。

  7. [プロトコル] を HTTP に設定します。

  8. [名前付きポート] フィールドに「http」と入力します。これは、マネージド インスタンス グループの作成時に入力したものと同じポート名です。

  9. バックエンド サービスにバックエンドを追加する手順は次のとおりです。

    1. [バックエンド] セクションで、[インスタンス グループ] を lb-backend に設定します。これは、前の手順で作成したマネージド インスタンス グループです。

    2. [ポート番号] に「80」と入力します。

    3. バックエンドを追加するには、[完了] をクリックします。

  10. ヘルスチェックを追加するには、[ヘルスチェック] リストで、先ほど作成したヘルスチェック lb-health-check を選択します。

  11. バックエンド サービスを作成するには、[作成] をクリックします。

gcloud

  1. バックエンド全体にトラフィックを分散するグローバル バックエンド サービスを作成します。

    gcloud beta compute backend-services create cross-ref-backend-service \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=HTTP \
        --port-name=http \
        --health-checks=lb-health-check \
        --global \
        --project=SERVICE_PROJECT_B_ID
    
  2. インスタンス グループをバックエンドとしてバックエンド サービスに追加します。

    gcloud beta compute backend-services add-backend cross-ref-backend-service \
        --instance-group=lb-backend \
        --instance-group-zone=us-west1-a \
        --global \
        --project=SERVICE_PROJECT_B_ID
    

バックエンド サービスを使用する権限をロードバランサ管理者に付与する

ロードバランサが他のサービス プロジェクトのバックエンド サービスを参照するには、ロードバランサ管理者に compute.backendServices.use 権限が必要です。この権限を付与するには、Compute ロードバランサ サービス ユーザー(roles/compute.loadBalancerServiceUser)という IAM 事前定義ロールを使用します。このロールは、サービス プロジェクト管理者が付与する必要があり、プロジェクト レベルまたは個々のバックエンド サービスレベルで適用できます。

バックエンド サービスの作成で、バックエンド サービスレベルで必要な権限を付与している場合、この手順は必ずしも必要ではありません。このセクションをスキップするか、このまま読み進めて、このプロジェクトのすべてのバックエンド サービスへのアクセスを許可する方法を確認してください。これにより、新しいバックエンドを作成するたびにアクセス権を付与する必要がなくなります。

この例では、サービス プロジェクト B のサービス プロジェクト管理者は、次のいずれかのコマンドを実行して、サービス プロジェクト A のロードバランサ管理者に compute.backendServices.use 権限を付与する必要があります。これは、プロジェクト レベルで(プロジェクト内のすべてのバックエンド サービスの場合)、またはバックエンド サービスごとに行うことができます。

コンソール

プロジェクト レベルの権限

プロジェクト内のすべてのバックエンド サービスに権限を付与するには、次の操作を行います。

この手順を完了するには、compute.backendServices.setIamPolicy 権限と resourcemanager.projects.setIamPolicy 権限が必要です。

  1. Google Cloud コンソールで [共有ロード バランシング サービス] ページに移動します。

    [共有ロード バランシング サービス] に移動

  2. [バックエンド サービスのすべての権限(プロジェクト レベルの権限)] セクションで、プロジェクトを選択します。

  3. 権限パネルが表示されていない場合は、[権限パネルを表示] をクリックします。右側に [プロジェクト レベルの権限] パネルが開きます。

  4. [ プリンシパルを追加] をクリックします。

  5. [新しいプリンシパル] に、プリンシパルのメールアドレスまたはその他の識別子を入力します。

  6. [ロール] で、プルダウン リストから [Compute ロードバランサ サービス ユーザー] ロールを選択します。

  7. (省略可)ロールに条件を追加します。

  8. [保存] をクリックします。

個々のバックエンド サービスのリソースレベルの権限

プロジェクト内の個々のバックエンド サービスに権限を付与するには、次の操作を行います。

gcloud

プロジェクト レベルの権限

プロジェクト内のすべてのバックエンド サービスに権限を付与するには、次の操作を行います。

この手順を完了するには、compute.backendServices.setIamPolicy 権限と resourcemanager.projects.setIamPolicy 権限が必要です。

gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \
    --member="user:LOAD_BALANCER_ADMIN" \
    --role="roles/compute.loadBalancerServiceUser"

個々のバックエンド サービスのリソースレベルの権限

バックエンド サービス レベルでは、サービス プロジェクト管理者が次のいずれかのコマンドを使用して Compute ロードバランサ サービス ユーザー ロール(roles/compute.loadBalancerServiceUser)を付与します。

この手順を完了するには、compute.backendServices.setIamPolicy 権限が必要です。

gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \
    --member="user:LOAD_BALANCER_ADMIN" \
    --role="roles/compute.loadBalancerServiceUser" \
    --condition='expression=resource.name=="projects/SERVICE_PROJECT_B_ID/regions/us-west1/backend-services/BACKEND_SERVICE_NAME",title=Shared VPC condition'

または

gcloud compute backend-services add-iam-policy-binding BACKEND_SERVICE_NAME \
    --member="user:LOAD_BALANCER_ADMIN" \
    --role="roles/compute.loadBalancerServiceUser" \
    --project=SERVICE_PROJECT_B_ID \
    --region=us-west1

これらのコマンドを使用するには、LOAD_BALANCER_ADMIN をユーザーのプリンシパルに置き換えます(例: test-user@gmail.com)。

条件を使用して条件属性を指定することで、リージョン バックエンド サービスのサブセットにのみ適用されるように IAM 権限を構成することもできます。

サービス プロジェクト A のロードバランサのフロントエンド コンポーネントを構成する

このセクションでは、サービス プロジェクト A に次のフロントエンド リソースを構成する必要があります。

  • IP アドレス
  • SSL 証明書
  • URL マップ
  • ターゲット プロキシ
  • 転送ルール

ロードバランサの IP アドレスを予約する

ロードバランサの転送ルールに割り当てることができるグローバル静的外部 IP アドレスを予約します。

コンソール

  1. Google Cloud コンソールで、[VPC ネットワーク] の [IP アドレス] ページに移動します。

    [IP アドレス] に移動

  2. [静的外部 IP アドレスを予約] をクリックします。

  3. [名前] に「cross-ref-ip-address」と入力します。

  4. [ネットワーク サービス階層] に [プレミアム] を設定します。

  5. [IP バージョン] を IPv4 に設定します。

  6. [タイプ] を [グローバル] に設定します。

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

gcloud

グローバル静的外部 IP アドレスを作成します。

gcloud compute addresses create cross-ref-ip-address \
    --ip-version=IPV4 \
    --network-tier=PREMIUM \
    --global \
    --project=SERVICE_PROJECT_A_ID

SSL 証明書リソースを設定する

リクエスト レスポンス プロトコルとして HTTPS を使用するロードバランサの場合は、次のリソースの説明に沿って SSL 証明書リソースを作成します。

Google マネージド証明書を使用することをおすすめします。

この例では、lb-ssl-cert という名前の SSL 証明書が作成されていることを前提としています。SSL 証明書は、以下の手順の 1 つで作成するターゲット プロキシに関連付けられます。

フロントエンド コンポーネントを作成する

コンソール

Google Cloud コンソールでは、プロジェクト間のバックエンド サービス参照がサポートされていません。ただし、Google Cloud CLI を使用して、サービス プロジェクト A の URL マップからサービス プロジェクト B のバックエンド サービスを参照できます。

gcloud

  1. 受信リクエストをバックエンド サービスに転送するための URL マップを作成します。

    gcloud beta compute url-maps create cross-ref-url-map \
        --default-service=projects/SERVICE_PROJECT_B_ID/global/backendServices/cross-ref-backend-service \
        --global \
        --project=SERVICE_PROJECT_A_ID
    
  2. ターゲット プロキシを作成します。

    HTTP トラフィックの場合、リクエストを URL マップに転送するターゲット HTTP プロキシを作成します。

    gcloud beta compute target-http-proxies create cross-ref-http-proxy \
        --url-map=cross-ref-url-map \
        --global \
        --project=SERVICE_PROJECT_A_ID
    

    HTTPS トラフィックの場合、リクエストを URL マップに転送するターゲット HTTPS プロキシを作成します。プロキシはロードバランサの一部であり、HTTPS ロードバランサ用の SSL 証明書を保持するため、この手順で SSL 証明書も読み込みます。

    gcloud beta compute target-https-proxies create cross-ref-https-proxy \
        --url-map=cross-ref-url-map \
        --ssl-certificates=lb-ssl-cert
        --global \
        --project=SERVICE_PROJECT_A_ID
    
  3. 転送ルールを作成します。

    HTTP トラフィックの場合、受信リクエストをターゲット プロキシに転送するグローバル転送ルールを作成します。

    gcloud beta compute forwarding-rules create cross-ref-http-forwarding-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --address=cross-ref-ip-address \
        --global \
        --target-http-proxy=cross-ref-http-proxy \
        --ports=80 \
        --project=SERVICE_PROJECT_A_ID
    

    HTTPS トラフィックの場合、受信リクエストをターゲット プロキシに転送するグローバル転送ルールを作成します。

    gcloud beta compute forwarding-rules create cross-ref-https-forwarding-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --address=cross-ref-ip-address \
        --global \
        --target-https-proxy=cross-ref-https-proxy \
        --ports=443 \
        --project=SERVICE_PROJECT_A_ID
    

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

ロードバランサの構成には、数分かかることがあります。ロード バランシング サービスが動作している場合は、サービス プロジェクト A の転送ルールへトラフィックを送信し、サービス プロジェクト B のさまざまな VM インスタンスにトラフィックが分散されるのを確認できます。

コンソール

  1. Google Cloud コンソールで、サービス プロジェクト A の [ロード バランシング] ページに移動します。

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

  2. 作成したロードバランサをクリックします。

  3. ロードバランサの IP アドレスをメモします。この IP アドレスは、次の手順で LB_IP_ADDRESS として参照されます。

  4. ウェブブラウザで https://LB_IP_ADDRESS(または http://LB_IP_ADDRESS)を設定すると、ロードバランサをテストできます。LB_IP_ADDRESS は、ロードバランサの IP アドレスに置き換えます。

  5. HTTPS のテストに自己署名証明書を使用した場合は、ブラウザに警告が表示されます。自己署名証明書を受け付けるためには、ブラウザで明示的に設定する必要があります。

  6. ページを提供したインスタンスの名前(Page served from: lb-backend-example-xxxx など)を示すコンテンツを含むページがブラウザで表示されます。お使いのブラウザでこのページがレンダリングされない場合は、このガイドの構成設定を確認してください。

gcloud

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

gcloud compute addresses describe IP_ADDRESS_NAME \
    --format="get(address)" \
    --global
    --project=SERVICE_PROJECT_A_ID

ウェブブラウザで https://LB_IP_ADDRESS(または http://LB_IP_ADDRESS)を設定すると、ロードバランサをテストできます。LB_IP_ADDRESS は、ロードバランサの IP アドレスに置き換えます。

HTTPS のテストに自己署名証明書を使用した場合は、ブラウザに警告が表示されます。自己署名証明書を受け付けるためには、ブラウザで明示的に設定する必要があります。

バックエンド インスタンスに関する最小限の情報を含むページがブラウザで表示されます。お使いのブラウザでこのページが表示されない場合は、このガイドの構成設定を確認してください。

次のステップ