ハイブリッド接続でのグローバル外部 HTTP(S) ロードバランサの設定

このページでは、グローバル外部 HTTP(S) ロードバランサをデプロイして、オンプレミスまたは他のパブリック クラウドにあり、ハイブリッド接続経由で到達可能なネットワーク エンドポイントにトラフィックをロード バランシングする方法について説明します。

これらのタスクが完了したら、必要に応じて追加のサービス(Cloud CDN、Google Cloud Armor など)と高度なトラフィック管理機能を有効にできます。

まだ行っていない場合は、ハイブリッド接続 NEG の概要を確認して、ハイブリッド ロード バランシングを設定するためのネットワーク要件を把握してください。

設定の概要

このページの例では、次のサンプル デプロイメントを設定します。

ハイブリッド接続用の外部 HTTP(S) ロードバランサの例(クリックして拡大)
ハイブリッド接続用の外部 HTTP(S) ロードバランサの例(クリックして拡大)

ハイブリッド ロード バランシングのデプロイを試す前に、ハイブリッド接続を構成する必要があります。このトピックでは、ハイブリッド接続の設定について説明しません。

Cloud VPN または Cloud Interconnect(Dedicated または Partner)のどちらのハイブリッド接続プロダクトを選択したかに応じて、関連するプロダクトのドキュメントを使用して構成してください。

権限

ハイブリッド ロード バランシングを設定するには、次の権限が必要です。

  • Google Cloud

  • オンプレミスまたは Google Cloud 以外のクラウド環境

    • IP:Port の組み合わせで Google Cloud からオンプレミスまたは他のクラウド環境のサービスに到達できるように、ネットワーク エンドポイントを構成する権限。詳細については、環境のネットワーク管理者にお問い合わせください。
    • Google のヘルスチェック プローブがエンドポイントに到達することを許可するファイアウォール ルールをオンプレミス環境または他のクラウド環境に作成する権限。

また、このページの手順を行うには、ロードバランサの Google Cloud ベースのバックエンドとして機能するハイブリッド接続 NEG、ロードバランサ、ゾーン NEG(およびそのエンドポイント)を作成します。

そのため、プロジェクトのオーナーまたは編集者であるか、または次の Compute Engine IAM ロールを持っている必要があります。

タスク 必要なロール
ロードバランサ コンポーネントの作成と変更 ネットワーク管理者
NEG の作成と変更 Compute インスタンス管理者
ファイアウォール ルールの追加と削除 セキュリティ管理者

ハイブリッド接続を確立する

オンプレミスまたは他のクラウド環境と Google Cloud を接続するには、Cloud Router とともに Cloud Interconnect VLAN アタッチメントまたは Cloud VPN トンネルを使用して、ハイブリッド接続を確立する必要があります。高可用性接続の使用をおすすめします。

グローバル動的ルーティングが有効になっている Cloud Router は、BGP を介して特定のエンドポイントを学習し、Google Cloud VPC ネットワークにプログラムします。リージョン動的ルーティングはサポートされていません。静的ルートもサポートされていません。

Cloud Interconnect または Cloud VPN の構成に使用する Google Cloud VPC ネットワークは、ハイブリッド ロード バランシング デプロイの構成に使用するネットワークと同じです。VPC ネットワークのサブネットの CIDR 範囲がリモートの CIDR 範囲と競合しないようにしてください。IP アドレスが重複する場合、リモート接続よりもサブネット ルートが優先されます。

手順については、次をご覧ください。

環境間のハイブリッド接続を設定するまで、このページの手順は行わないでください。

オンプレミス環境またはその他のクラウド環境を設定する

次の手順で、ハイブリッド ロード バランシング用のオンプレミス環境またはその他のクラウド環境を設定します。

  • オンプレミス サービスを Google Cloud(IP:Port)に公開するようにネットワーク エンドポイントを構成します。
  • オンプレミス環境または他のクラウド環境でファイアウォール ルールを構成します。
  • プライベート環境への特定の必要なルートをアドバタイズするように Cloud Router を構成します。

ネットワーク エンドポイントを設定する

ハイブリッド接続を設定したら、オンプレミスまたは他のクラウド環境内に、IP:port の組み合わせを使用して Cloud Interconnect または Cloud VPN 経由で到達可能なネットワーク エンドポイントを構成します。この IP:port の組み合わせは、このプロセスの後半で Google Cloud で作成されるハイブリッド接続 NEG の 1 つ以上のエンドポイントとして構成されます。

IP エンドポイントへのパスが複数ある場合、ルーティングは Cloud Router の概要で説明されているように動作します。

ファイアウォール ルールを設定する

オンプレミスまたはその他のクラウド環境に、次のファイアウォール ルールを作成する必要があります。

  • Google のヘルスチェック プローブからエンドポイントへのトラフィックを許可する上り(内向き)許可のファイアウォール ルール。外部 HTTP(S) ロードバランサ、内部 HTTP(S) ロードバランサ、TCP プロキシ ロードバランサ、SSL プロキシ ロードバランサの場合、許可される範囲は 35.191.0.0/16130.211.0.0/22 です。詳細については、プローブの IP 範囲とファイアウォール ルールをご覧ください。
  • ロード バランシングされるトラフィックがエンドポイントに到達することを許可する上り(内向き)許可ファイアウォール ルール。

オンプレミスまたは他のクラウド環境に次のルートをアドバタイズするように、Cloud Router を構成します。

  • Google のヘルスチェック プローブで使用される範囲: 35.191.0.0/16130.211.0.0/22

Google Cloud 環境を設定する

以降のステップでは、環境間のハイブリッド接続の構成に使用した VPC ネットワークを使用します。

ファイアウォール ルールを作成する

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

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

Console

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

gcloud

  1. ロードバランサと Google Cloud ヘルスチェックが TCP ポート 80 でバックエンド システムと通信ができるように、fw-allow-health-check-and-proxy ルールを作成します。

    NETWORK は、VPC ネットワークの名前に置き換えます。

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

ゾーン NEG を設定する

Google Cloud ベースのバックエンドの場合は、ハイブリッド接続を構成したリージョンに複数のゾーン NEG を構成することをおすすめします。

この例では、REGION リージョンにゾーン NEG を設定します(GCE_VM_IP_PORT タイプのエンドポイント)。まず、VM を作成します。次に、ゾーン NEG を作成し、VM のネットワーク エンドポイントを NEG に追加します。

VM を作成する

Console

  1. Google Cloud Console の [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. [インスタンスを作成] をクリックします。
  3. [名前] を vm-a1 に設定します。
  4. [リージョン] に REGION を選択し、任意のゾーンを選択します。
  5. [ブートディスク] セクションで、ブートディスク オプションに Debian オペレーティング システムと 10 (buster) バージョンが選択されていることを確認します。必要に応じてイメージを変更するには、[選択] をクリックします。
  6. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックして、次のように変更します。

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

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

  8. 以下の手順を繰り返し、次の名前とゾーンの組み合わせを使用して、2 つ目の VM を作成します。

    • 名前: vm-a2、ゾーン: ZONE

gcloud

VM_NAMEZONE の組み合わせを使用して、次のコマンドを 2 回実行して VM を作成します。スクリプトの内容は両方の VM で同じです。

  • vm-a1VM_NAME と任意の ZONE
  • vm-a2VM_NAME と同じ ZONE

    gcloud compute instances create VM_NAME \
        --zone=ZONE \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check \
        --subnet=SUBNET \
        --metadata=startup-script='#! /bin/bash
         apt-get update
         apt-get install apache2 -y
         vm_hostname="$(curl -H "Metadata-Flavor:Google" \
         http://169.254.169.254/computeMetadata/v1/instance/name)"
         echo "Page served from: $vm_hostname" | \
         tee /var/www/html/index.html
         systemctl restart apache2'
    

ゾーン NEG を作成する

gcloud

  1. gcloud compute network-endpoint-groups create コマンドを使用して、ゾーン NEG を作成します(GCE_VM_IP_PORT エンドポイントを含む)。

    gcloud compute network-endpoint-groups create GCP_NEG_NAME \
        --network-endpoint-type=GCE_VM_IP_PORT \
        --zone=GCP_NEG_ZONE \
        --network=NETWORK \
        --subnet=SUBNET
        [--default-port=DEFAULT_PORT]
    

    次のステップでは、NEG の作成時に DEFAULT_PORT を指定するか、各エンドポイントのポート番号を指定します。

  2. エンドポイントを GCP_NEG_NAME に追加します。

    gcloud compute network-endpoint-groups update GCP_NEG_NAME \
        --zone=GCP_NEG_ZONE \
        --add-endpoint='instance=vm-a1,[port=PORT_VM_A1]' \
        --add-endpoint='instance=vm-a2,[port=PORT_VM_A2]'
    

ハイブリッド接続 NEG を設定する

NEG を作成するときは、Google Cloud とオンプレミスまたは他のクラウド環境との間の地理的距離を最小限に抑える ZONE を使用します。たとえば、ドイツのフランクフルトのオンプレミス環境にサービスをホストする場合、NEG を作成するときに europe-west3-a Google Cloud ゾーンを指定できます。

また、Cloud Interconnect を使用している場合は、NEG の作成に使用する ZONE は、ハイブリッド接続の Cloud Interconnect VLAN アタッチメントが構成されているリージョンに存在している必要があります。

使用可能なリージョンとゾーンについては、Compute Engine のドキュメント: 使用可能なリージョンとゾーンをご覧ください。

Console

gcloud

  1. gcloud compute network-endpoint-groups create コマンドを使用して、ハイブリッド接続 NEG を作成します。

    gcloud compute network-endpoint-groups create ON_PREM_NEG_NAME \
        --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
        --zone=ON_PREM_NEG_ZONE \
        --network=NETWORK
    
  2. エンドポイントを on-prem-neg に追加します。

    gcloud compute network-endpoint-groups update ON_PREM_NEG_NAME \
        --zone=ON_PREM_NEG_ZONE \
        --add-endpoint="ip=ON_PREM_IP_ADDRESS_1,port=PORT_1"
        --add-endpoint="ip=ON_PREM_IP_ADDRESS_2,port=PORT_2"
    

このコマンドを使用すると、オンプレミスまたはクラウド環境で構成したネットワーク エンドポイントを追加できます。--add-endpoint を必要な回数だけ繰り返します。

必要に応じて、これらの手順を繰り返して複数のハイブリッド NEG を作成できます。

ロードバランサの構成

Console

gcloud

  1. 外部クライアントがトラフィックを送信するグローバル静的外部 IP アドレスを作成します。
      gcloud compute addresses create LB_IP_ADDRESS_NAME \
          --network-tier=PREMIUM \
          --global
      
  2. バックエンドのヘルスチェックを作成します。
      gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \
          --use-serving-port
      
  3. バックエンド サービスを作成します。このバックエンド サービスに、ゾーン NEG とハイブリッド接続 NEG の両方をバックエンドとして追加します。
      gcloud compute backend-services create BACKEND_SERVICE \
          --health-checks=HTTP_HEALTH_CHECK_NAME \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --global
      
  4. ゾーン NEG をバックエンドとしてバックエンド サービスに追加します。
      gcloud compute backend-services add-backend BACKEND_SERVICE \
          --global \
          --balancing-mode=RATE \
          --max-rate-per-endpoint=MAX_REQUEST_RATE_PER_ENDPOINT \
          --network-endpoint-group=GCP_NEG_NAME \
          --network-endpoint-group-zone=GCP_NEG_ZONE
       
  5. ハイブリッド NEG をバックエンドとしてバックエンド サービスに追加します。
      gcloud compute backend-services add-backend BACKEND_SERVICE \
          --global \
          --balancing-mode=RATE \
          --max-rate-per-endpoint=MAX_REQUEST_RATE_PER_ENDPOINT \
          --network-endpoint-group=ON_PREM_NEG_NAME \
          --network-endpoint-group-zone=ON_PREM_NEG_ZONE
      
  6. 受信リクエストをバックエンド サービスに転送するための URL マップを作成します。
      gcloud compute url-maps create URL_MAP_NAME \
          --default-service BACKEND_SERVICE
      
  7. この手順は、HTTPS ロードバランサを作成する場合にのみ行います。HTTP ロードバランサの場合、必須ではありません。
    HTTPS ロードバランサを作成するには、HTTPS ターゲット プロキシで使用する SSL 証明書リソースが必要です。SSL 証明書リソースは、Google マネージド SSL 証明書またはセルフマネージド SSL 証明書を使用して作成できます。このうち、Google Cloud が自動的に取得、管理、更新する Google マネージド証明書をおすすめします。

    Google マネージド証明書を作成するには、ドメインが必要です。ドメインがない場合は、自己署名 SSL 証明書を使用してテストできます。

    Google マネージド SSL 証明書リソースを作成するには、次のコマンドを実行します。
    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
        --domains DOMAIN
    
    セルフマネージド SSL 証明書リソースを作成するには、次のコマンドを実行します。
    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
        --certificate CRT_FILE_PATH \
        --private-key KEY_FILE_PATH
    
  8. URL マップにリクエストを転送するターゲット HTTP(S) プロキシを作成します。

    HTTP ロードバランサの場合は、HTTP ターゲット プロキシを作成します。
    gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \
        --url-map=URL_MAP_NAME
    
    HTTPS ロードバランサの場合は、HTTPS ターゲット プロキシを作成します。プロキシはロードバランサの一部であり、HTTPS ロード バランシング用の SSL 証明書を保持するため、このステップで証明書も読み込みます。
    gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
        --ssl-certificates=SSL_CERTIFICATE_NAME \
        --url-map=URL_MAP_NAME
    
  9. 受信リクエストをプロキシに転送する転送ルールを作成します。

    HTTP ロードバランサの場合:
    gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --network-tier=PREMIUM \
        --address=LB_IP_ADDRESS_NAME \
        --target-http-proxy=TARGET_HTTP_PROXY_NAME \
        --global \
        --ports=80
    
    HTTPS ロードバランサの場合:
    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --network-tier=PREMIUM \
        --address=LB_IP_ADDRESS_NAME \
        --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
        --global \
        --ports=443
    

ドメインをロードバランサに接続する

ロードバランサが作成されたら、ロードバランサに関連付けられた IP アドレスをメモします(例: 30.90.80.100)。ドメインがロードバランサを指すようするには、ドメイン登録サービスを使用して A レコードを作成します。SSL 証明書に複数のドメインを追加する場合は、それぞれについて A レコードを追加して、すべてがロードバランサの IP アドレスを指すようにする必要があります。たとえば、www.example.comexample.comA レコードを作成するには、次のようにします。

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

Google Domains を使用している場合は、Google Domains のヘルプページで詳細をご確認ください。

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

ロードバランサを構成したので、ロードバランサの IP アドレスにトラフィックを送信できるようになりました。

  1. Google Cloud Console の [ロード バランシング] ページに移動します。
    [ロード バランシング] ページに移動
  2. 作成したロードバランサをクリックします。
  3. ロードバランサの IP アドレスをメモします。
  4. HTTP ロードバランサを作成した場合は、ウェブブラウザで http://IP_ADDRESS に移動してロードバランサをテストできます。IP_ADDRESS は、ロードバランサの IP アドレスに置き換えます。エンドポイントを介して公開したサービスが表示されます。

    HTTPS ロードバランサを作成した場合は、次のように curl を使用してロードバランサをテストできます。IP_ADDRESS は、ロードバランサの IP アドレスに置き換えます。エンドポイントを介して公開したサービスが表示されます。

   curl -k https://IP_ADDRESS
   

Google Cloud 以外のエンドポイントが応答していることを確認するには、次のコマンドを実行します。

   curl -k https://IP_ADDRESS/on-prem-service
   

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

Google マネージド証明書を使用している場合は、ロードバランサの IP アドレスを指すドメインをテストします。例:

   curl -s https://test.example.com
   

次のステップ