外部バックエンドを使用して従来のアプリケーション ロードバランサを設定する

このガイドでは、グローバル外部アプリケーション ロードバランサで外部バックエンド(カスタム送信元)を使用する基本的な方法について、サンプルを示しながら説明します。外部バックエンドは Google Cloud の外部にあるエンドポイントです。外部アプリケーション ロードバランサでグローバル外部バックエンドを使用する場合は、Cloud CDN キャッシュを使用してパフォーマンスを向上させることができます。

このガイドでは、Cloud CDN が有効で、外部バックエンド サーバーにリクエストをプロキシするバックエンド サービスを使用して、グローバル外部アプリケーション ロードバランサを構成する方法について説明します。

このガイドに進む前に、インターネット NEG の概要ドキュメント(制限事項を含む)を理解しておいてください。

次のアーキテクチャ図は、外部バックエンドを持つグローバル外部アプリケーション ロードバランサのフロントエンドを示しています。

外部バックエンドを持つグローバル外部アプリケーション ロードバランサ。
図 1. 外部バックエンドを持つグローバル外部アプリケーション ロードバランサ(クリックして拡大)

権限

このガイドに記載された操作を行う前に、インターネット NEG を作成し、プロジェクト内の外部アプリケーション ロードバランサを作成するか、変更しておく必要があります。そのためには、プロジェクトのオーナーまたは編集者roles/owner または roles/editor)であるか、次の Compute Engine IAM のロールがすべて必要です。

タスク 必要なロール
ロードバランサ コンポーネントの作成と変更 Compute ネットワーク管理者
roles/compute.networkAdmin
NEG の作成と変更 Compute インスタンス管理者
roles/compute.instanceAdmin

Google Cloud の外部で外部バックエンド環境を設定する

環境を設定する方法については、以降のセクションをご覧ください。

ネットワーク エンドポイントを構成する

外部バックエンドを Google Cloud に公開するようにネットワーク エンドポイントを構成します。IP:Port の組み合わせ、または完全修飾ドメイン名(FQDN)とポートのいずれかが、インターネット経由で到達可能であることを確認します。このエンドポイントは、後でインターネット NEG から参照されます。

インターネット NEG エンドポイントの構成要件の詳細については、インターネット NEG の概要をご覧ください。

外部バックエンドに Google Cloud からのトラフィックの受信を許可する

Google Cloud からのリクエストが外部バックエンドに到達できるようにするには、Google が外部バックエンドへのリクエストの送信に使用する IP アドレス範囲を許可リストに登録する必要があります。外部バックエンドへのトラフィックの送信を許可する必要がある IP アドレスを検索するには、dignslookup などのツールを使用して、_cloud-eoips.googleusercontent.com DNS TXT レコードをクエリします。

例:

  • 次の nslookup コマンドを実行します。

    nslookup -q=TXT _cloud-eoips.googleusercontent.com 8.8.8.8
    

    出力は次のようになります。

    Non-authoritative answer:
    _cloud-eoips.googleusercontent.com    text = "v=spf1 ip4:34.96.0.0/20 ip4:34.127.192.0/18 ~all"
    

    ip4: の後の CIDR 範囲をメモし、これらの範囲が外部バックエンドで構成されたファイアウォール ルールまたはクラウド アクセス制御リスト(ACL)で許可されるようにします。

  • 次の dig コマンドを実行します。

    dig TXT _cloud-eoips.googleusercontent.com | grep -Eo 'ip4:[^ ]+' | cut -d':' -f2
    

    出力には、次のように 2 つの IP アドレス範囲が含まれます。

    34.96.0.0/20
    34.127.192.0/18
    

Google Cloud 環境を設定する

インターネット NEG バックエンドを使用してグローバル外部アプリケーション ロードバランサを作成します。

外部 IP アドレスを予約する

クライアントがアプリケーションに到達するために使用するグローバル静的外部 IP アドレスを予約します。

コンソール

  1. Google Cloud コンソールで、[外部 IP アドレス] ページに移動します。

    [外部 IP アドレス] に移動

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

  3. 名前を入力します。

  4. [ネットワーク サービス ティア] で [プレミアム] を選択します。

  5. [IP バージョン] で [IPv4] を選択します。

  6. [種類] で [グローバル] を選択します。

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

gcloud

gcloud compute addresses create LB_IP_ADDRESS_NAME \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

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

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

インターネット NEG を設定する

コンソール

  1. Google Cloud コンソールで、[ネットワーク エンドポイント グループ] ページに移動します。

    [ネットワーク エンドポイント グループ] に移動

  2. [ネットワーク エンドポイント グループを作成] をクリックします。

  3. 名前を入力します。

  4. [ネットワーク エンドポイント グループの種類] で、[ネットワーク エンドポイント グループ(インターネット)] を選択します。

  5. [デフォルト ポート] に「443」と入力します。

  6. [新しいネットワーク エンドポイント] で [完全修飾ドメイン名とポート] を選択します。

  7. 完全修飾ドメイン名を入力します。

  8. [ポートタイプ] で [デフォルト] を選択し、[ポート番号] が 443 であることを確認します。

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

gcloud

  1. インターネット NEG を作成し、--network-endpoint-typeinternet-fqdn-port(外部バックエンドに到達可能なホスト名とポート)に設定します。

    gcloud compute network-endpoint-groups create INTERNET_NEG_NAME \
        --network-endpoint-type="internet-fqdn-port" \
        --global
    
  2. エンドポイントを NEG に追加します。ポートが指定されていない場合、バックエンド サービスで構成されるプロトコルによって、デフォルトのポート選択はポート 80(HTTP)または、443(HTTPS、HTTP/2)になります。--global フラグが含まれていることを確認してください。

    gcloud compute network-endpoint-groups update INTERNET_NEG_NAME \
        --add-endpoint="fqdn=FULLY_QUALIFIED_DOMAIN_NAME,port=443" \
        --global
    

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

コンソール

構成を開始する

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

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

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

フロントエンドの構成

  1. [フロントエンドの構成] をクリックします。
  2. 名前を入力します。
  3. HTTPS ロードバランサを作成するには、SSL 証明書が必要です。Google マネージド証明書を使用することをおすすめします。

    以下のオプションが次の値で構成されていることを確認します。

    プロパティ 値(値を入力するか、指定されたオプションを選択)
    プロトコル HTTPS
    ネットワーク サービス階層 プレミアム
    IP バージョン IPv4
    IP アドレス 外部 IP アドレスを予約するの手順で作成した IP アドレスを選択します。
    ポート 443
    証明書

    既存の SSL 証明書を選択するか、新しい証明書を作成します。

    HTTPS ロードバランサを作成するには、HTTPS プロキシで使用する SSL 証明書リソースが必要です。SSL 証明書リソースは、Google マネージド SSL 証明書またはセルフマネージド SSL 証明書を使用して作成できます。

    Google マネージド証明書を作成するには、ドメインが必要です。ドメインの A レコードは、ロードバランサの IP アドレス(この例では example-ip)に解決される必要があります。Google Cloud がこれらの証明書を自動的に取得、管理、更新するため、Google マネージド証明書を使用することをおすすめします。ドメインがない場合は、自己署名 SSL 証明書を使用してテストできます。

    省略可: HTTP から HTTPS へのリダイレクトを有効にする

    このチェックボックスを使用して、HTTP から HTTPS へのリダイレクトを有効にします。

    このチェックボックスをオンにすると、HTTPS ロードバランサと同じ IP アドレスを使用し、HTTP リクエストをロードバランサの HTTPS フロントエンドにリダイレクトする追加の部分的な HTTP ロードバランサが作成されます。

    このチェックボックスは、HTTPS プロトコルが選択されていて、予約済みの IP アドレスが使用されている場合にのみ選択できます。

    SSL 証明書リソース(または Google マネージド証明書によって必要とされるドメイン)を設定せずにこのプロセスをテストする場合は、HTTP ロードバランサを設定できます。

    HTTP ロードバランサを作成するには、次のオプションがこれらの値で構成されていることを確認します。

    プロパティ 値(値を入力するか、指定されたオプションを選択)
    プロトコル HTTP
    ネットワーク サービス階層 プレミアム
    IP バージョン IPv4
    IP アドレス 外部 IP アドレスを予約するの手順で作成した IP アドレスを選択します。
    ポート 80
  4. [完了] をクリックします。

バックエンドの構成

  1. [バックエンドの構成] をクリックします。
  2. バックエンド サービスとバックエンド バケットをクリックします。
  3. [バックエンド サービスを作成] をクリックします。
  4. 名前を入力します。
  5. [バックエンド タイプ] で [インターネット ネットワーク エンドポイント グループ] を選択します。
  6. [プロトコル] で、ロードバランサからインターネット NEG に接続するプロトコルを選択します。この例では、「HTTP/2」を選択します。
  7. [新しいバックエンド] ウィンドウの [バックエンド] で、前の手順で作成したインターネット NEG を選択します。
  8. [作成] をクリックします。

確認と完了

  1. [確認と完了] をクリックします。
  2. 設定に問題がない場合は、[作成] をクリックします。

gcloud

  1. バックエンド サービスを作成します。
      gcloud compute backend-services create BACKEND_SERVICE \
          --global
      
  2. インターネット NEG をバックエンド サービスに追加します。
      gcloud compute backend-services add-backend BACKEND_SERVICE \
          --network-endpoint-group=INTERNET_NEG_NAME \
          --global-network-endpoint-group \
          --global
       
  3. 受信リクエストをバックエンド サービスに転送するための URL マップを作成します。
      gcloud compute url-maps create URL_MAP_NAME \
          --default-service=BACKEND_SERVICE \
          --global
      
  4. この手順は、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
      
  5. URL マップにリクエストを転送するターゲット HTTP(S) プロキシを作成します。

    HTTP ロードバランサの場合は、HTTP ターゲット プロキシを作成します。

      gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \
          --url-map=URL_MAP_NAME \
          --global
      

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

      gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
          --ssl-certificates=SSL_CERTIFICATE_NAME \
          --url-map=URL_MAP_NAME \
          --global
      

    次のように置き換えます。

    • TARGET_HTTP_PROXY_NAME: ターゲット HTTP プロキシの名前。
    • TARGET_HTTPS_PROXY_NAME: ターゲット HTTPS プロキシの名前。
    • SSL_CERTIFICATE_NAME: SSL 証明書の名前。
    • URL_MAP_NAME: URL マップの名前。
  6. 受信リクエストをプロキシに転送する転送ルールを作成します。

    HTTP ロードバランサの場合:

      gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \
          --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 \
          --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

DNS プロバイダとして Cloud DNS を使用する場合は、レコードの追加、変更、削除をご覧ください。

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

ロードバランサを構成したので、ロードバランサの IP アドレスにトラフィックを送信できるようになりました。ドメインを構成した場合、ドメイン名にトラフィックを送信することもできます。ただし、DNS の伝播が完了するまでに時間がかかることがあるため、テスト用の IP アドレスで始めることもできます。

コンソール

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

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

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

  3. ロードバランサの IP アドレスをメモします。

  4. ロードバランサにトラフィックを送信します。

    • HTTP ロードバランサを作成した場合は、http://IP_ADDRESS に移動してロードバランサをテストできます。IP_ADDRESS は、ロードバランサの IP アドレスに置き換えます。外部バックエンドで実行されているアプリケーションが表示されます。

    • HTTPS ロードバランサを作成した場合は、https://IP_ADDRESS に移動してロードバランサをテストできます。IP_ADDRESS は、ロードバランサの IP アドレスに置き換えます。外部バックエンドで実行されているアプリケーションが表示されます。

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

    あるいは、ローカルマシンのコマンドラインから curl を使用することもできます。IP_ADDRESS は、ロードバランサの IPv4 アドレスに置き換えます。Google マネージド証明書を使用している場合は、ロードバランサの IP アドレスを指すドメインをテストします。次に例を示します。

    curl -s 'https://www.example.com:443' --resolve www.example.com:443:IP_ADDRESS
    

  5. (省略可)カスタム ドメインを使用する場合は、更新された DNS 設定が反映されるまでに時間がかかる場合があります。次に、ウェブブラウザでドメインをテストします。

    トラブルシューティングについては、外部バックエンドとインターネット NEG に関する問題のトラブルシューティングをご覧ください。

追加構成

このセクションでは、代替および追加の構成オプションを提供する構成例を示します。これらのタスクはすべて省略可です。また、任意の順序で行うことができます。

Cloud CDN を有効にする

Cloud CDN を有効にすると、Cloud CDN キャッシュミスがある場合にのみ、外部アプリケーション ロードバランサがインターネット NEG バックエンドにリクエストを送信します。

コンソール

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

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

  2. 変更するロードバランサの名前をクリックします。

  3. [編集] をクリックします。

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

  5. インターネット NEG バックエンドを使用するバックエンド サービスの [編集] をクリックします。

  6. [Cloud CDN を有効にする] を選択します。

  7. (省略可)キャッシュ モードTTL の設定を変更します。

  8. [更新] をクリックします。

  9. 変更を確認するには、[確認と完了] をクリックして、[更新] をクリックします。

gcloud

  • バックエンド サービスで Cloud CDN を有効にするには、次のコマンドを使用します。
      gcloud compute backend-services update BACKEND_SERVICE \
          --global \
          --enable-cdn \
          --cache-mode=CACHE_MODE
      

    CACHE_MODE を次のいずれかに置き換えて、キャッシュ モードを設定します。

    • CACHE_All_STATIC: 静的コンテンツを自動的にキャッシュに保存します。
    • USE_ORIGIN_HEADERS(デフォルト): コンテンツをキャッシュに保存するには、送信元で有効なキャッシュ ヘッダーを設定する必要があります。
    • FORCE_CACHE_ALL: Cache-Control レスポンス ヘッダー内の privateno-store、または no-cache のディレクティブを無視して、すべてのコンテンツをキャッシュに保存します。

カスタム ヘッダーを使用してリクエストを認証する

外部バックエンドに送信されるリクエストを認証するには、Google Cloud ロードバランサからのリクエストであることを示すカスタム ヘッダーを設定します。たとえば、HTTP リクエストの Host ヘッダーに特定の値が想定されるように外部バックエンドを構成し、Host ヘッダーをその値に設定するようにバックエンド サービスを構成できます。

次の手順では、カスタム Host ヘッダーを各リクエストに追加するようにバックエンド サービスを構成します。

コンソール

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

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

  2. 変更するロードバランサの名前をクリックします。

  3. [編集] をクリックします。

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

  5. インターネット NEG バックエンドを使用するバックエンド サービスの [編集] をクリックします。

  6. [詳細構成] をクリックします。

  7. [カスタム リクエスト ヘッダー] で、[ヘッダーを追加] をクリックします。

    1. [ヘッダー名] に「Host」と入力します。
    2. [ヘッダーの値] に「FQDN_NEG_ENDPOINT」と入力します。
  8. [更新] をクリックします。

  9. 変更を確認するには、[確認と完了] をクリックして、[更新] をクリックします。

gcloud

  • 次のコマンドを使用して、各リクエストにカスタムの Host ヘッダーを追加するようにバックエンド サービスを構成します。
      gcloud compute backend-services update BACKEND_SERVICE \
          --custom-request-header "Host: HEADER_VALUE" \
          --global
      

また、外部バックエンドが受信リクエストを認証できるように、Host ヘッダーを想定するように外部バックエンドを構成します。

カスタム リクエスト ヘッダーの概要については、カスタム リクエスト ヘッダーを構成するをご覧ください。他の認証方法については、外部バックエンドへのリクエストを認証するをご覧ください。

外部アプリケーション ロードバランサで IAP を有効にする

注: IAP は Cloud CDN と互換性がありません。

IAP を有効または無効にするように構成できます(デフォルトは無効です)。有効にした場合、oauth2-client-idoauth2-client-secret の値を指定する必要があります。

IAP を有効にするには、バックエンド サービスを更新して、--iap=enabled フラグに oauth2-client-idoauth2-client-secret を追加します。

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --iap=enabled,oauth2-client-id=ID,oauth2-client-secret=SECRET \
    --global

必要に応じて、Google Cloud コンソール、gcloud CLI、または API を使用して、Compute Engine リソースに対して IAP を有効にできます。

次のステップ