このガイドでは、グローバル外部アプリケーション ロードバランサで外部バックエンド(カスタム送信元)を使用する基本的な方法について、サンプルを示しながら説明します。外部バックエンドは Google Cloud の外部にあるエンドポイントです。外部アプリケーション ロードバランサでグローバル外部バックエンドを使用する場合は、Cloud CDN キャッシュを使用してパフォーマンスを向上させることができます。
このガイドでは、Cloud CDN が有効で、外部バックエンド サーバーにリクエストをプロキシするバックエンド サービスを使用して、グローバル外部アプリケーション ロードバランサを構成する方法について説明します。
このガイドに進む前に、インターネット NEG の概要ドキュメント(制限事項を含む)を理解しておいてください。次のアーキテクチャ図は、外部バックエンドを持つグローバル外部アプリケーション ロードバランサのフロントエンドを示しています。
権限
このガイドに記載された操作を行う前に、インターネット 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 アドレスを検索するには、dig
や nslookup
などのツールを使用して、_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 アドレスを予約します。
コンソール
Google Cloud コンソールで、[外部 IP アドレス] ページに移動します。
[静的外部アドレスを予約] をクリックして、IPv4 アドレスを予約します。
名前を入力します。
[ネットワーク サービス ティア] で [プレミアム] を選択します。
[IP バージョン] で [IPv4] を選択します。
[種類] で [グローバル] を選択します。
[予約] をクリックします。
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 を設定する
コンソール
Google Cloud コンソールで、[ネットワーク エンドポイント グループ] ページに移動します。
[ネットワーク エンドポイント グループを作成] をクリックします。
名前を入力します。
[ネットワーク エンドポイント グループの種類] で、[ネットワーク エンドポイント グループ(インターネット)] を選択します。
[デフォルト ポート] に「
443
」と入力します。[新しいネットワーク エンドポイント] で [完全修飾ドメイン名とポート] を選択します。
完全修飾ドメイン名を入力します。
[ポートタイプ] で [デフォルト] を選択し、[ポート番号] が
443
であることを確認します。[作成] をクリックします。
gcloud
インターネット NEG を作成し、
--network-endpoint-type
をinternet-fqdn-port
(外部バックエンドに到達可能なホスト名とポート)に設定します。gcloud compute network-endpoint-groups create INTERNET_NEG_NAME \ --network-endpoint-type="internet-fqdn-port" \ --global
エンドポイントを 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
ロードバランサを作成する
コンソール
構成を開始する
Google Cloud コンソールで、[ロード バランシング] ページに移動します。
- [ロードバランサを作成] をクリックします。
- [ロードバランサの種類] で [アプリケーション ロードバランサ(HTTP / HTTPS)] を選択し、[次へ] をクリックします。
- [インターネット接続または内部] で [インターネット接続(外部)] を選択し、[次へ] をクリックします。
- [グローバルまたはシングル リージョンのデプロイ] で [グローバル ワークロードに最適] を選択し、[次へ] をクリックします。
- [ロードバランサの世代] で [グローバル外部アプリケーション ロードバランサ] を選択し、[次へ] をクリックします。
- [構成] をクリックします。
フロントエンドの構成
- [フロントエンドの構成] をクリックします。
- 名前を入力します。
HTTPS ロードバランサを作成するには、SSL 証明書が必要です。Google マネージド証明書を使用することをおすすめします。
以下のオプションが次の値で構成されていることを確認します。
プロパティ 値(値を入力するか、指定されたオプションを選択) プロトコル HTTPS ネットワーク サービス階層 プレミアム IP バージョン IPv4 IP アドレス 外部 IP アドレスを予約するの手順で作成した IP アドレスを選択します。 ポート 443 省略可: HTTP キープアライブ タイムアウト 5~1,200 秒のタイムアウト値を入力します。デフォルト値は 610 秒です。 証明書 既存の 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 省略可: HTTP キープアライブ タイムアウト 5~1,200 秒のタイムアウト値を入力します。デフォルト値は 610 秒です。 [完了] をクリックします。
バックエンドの構成
- [バックエンドの構成] をクリックします。
- バックエンド サービスとバックエンド バケットをクリックします。
- [バックエンド サービスを作成] をクリックします。
- 名前を入力します。
- [バックエンド タイプ] で [インターネット ネットワーク エンドポイント グループ] を選択します。
- [プロトコル] で、ロードバランサからインターネット NEG に接続するプロトコルを選択します。この例では、「HTTP/2」を選択します。
- [新しいバックエンド] ウィンドウの [バックエンド] で、前の手順で作成したインターネット NEG を選択します。
- [作成] をクリックします。
確認と完了
- [確認と完了] をクリックします。
- 設定に問題がない場合は、[作成] をクリックします。
gcloud
- バックエンド サービスを作成します。
gcloud compute backend-services create BACKEND_SERVICE \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global
- インターネット NEG をバックエンド サービスに追加します。
gcloud compute backend-services add-backend BACKEND_SERVICE \ --network-endpoint-group=INTERNET_NEG_NAME \ --global-network-endpoint-group \ --global
- 受信リクエストをバックエンド サービスに転送するための URL マップを作成します。
gcloud compute url-maps create URL_MAP_NAME \ --default-service=BACKEND_SERVICE \ --global
この手順は、HTTPS ロードバランサを作成する場合にのみ行います。HTTP ロードバランサの場合、必須ではありません。
HTTPS ロードバランサを作成するには、HTTPS ターゲット プロキシで使用する SSL 証明書リソースが必要です。SSL 証明書リソースは、Google マネージド SSL 証明書またはセルフマネージド SSL 証明書を使用して作成できます。Google Cloud が自動的に取得、管理、更新するため、Google マネージド証明書の使用をおすすめします。
Google マネージド証明書を作成するには、ドメインが必要です。ドメインがない場合は、セルフマネージド SSL 証明書を使用してテストできます。
Google マネージド SSL 証明書リソースを作成するには、次のコマンドを実行します。 セルフマネージド SSL 証明書リソースを作成するには:gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --domains DOMAIN
gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --certificate CRT_FILE_PATH \ --private-key KEY_FILE_PATH
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 マップの名前。
--http-keep-alive-timeout-sec
オプションを使用すると、クライアント HTTP キープアライブ タイムアウトを設定できます。タイムアウト値は 5~1,200 秒の範囲で指定してください。デフォルト値は 610 秒です。受信リクエストをプロキシに転送する転送ルールを作成します。
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.com
と example.com
に A
レコードを作成するには、次のようにします。
NAME TYPE DATA www A 30.90.80.100 @ A 30.90.80.100
DNS プロバイダとして Cloud DNS を使用する場合は、レコードの追加、変更、削除をご覧ください。
ロードバランサをテストする
ロードバランサを構成したので、ロードバランサの IP アドレスにトラフィックを送信できるようになりました。ドメインを構成した場合、ドメイン名にトラフィックを送信することもできます。ただし、DNS の伝播が完了するまでに時間がかかることがあるため、テスト用の IP アドレスで始めることもできます。
コンソール
Google Cloud コンソールで、[ロード バランシング] ページに移動します。
作成したロードバランサをクリックします。
ロードバランサの IP アドレスをメモします。
ロードバランサにトラフィックを送信します。
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
(省略可)カスタム ドメインを使用する場合は、更新された DNS 設定が反映されるまでに時間がかかる場合があります。次に、ウェブブラウザでドメインをテストします。
トラブルシューティングについては、外部バックエンドとインターネット NEG に関する問題のトラブルシューティングをご覧ください。
追加構成
このセクションでは、代替および追加の構成オプションを提供する構成例を示します。これらのタスクはすべて省略可です。また、任意の順序で行うことができます。
Cloud CDN を有効にする
Cloud CDN を有効にすると、Cloud CDN キャッシュミスがある場合にのみ、外部アプリケーション ロードバランサがインターネット NEG バックエンドにリクエストを送信します。
コンソール
Google Cloud コンソールの [ロード バランシング] ページに移動します。
変更するロードバランサの名前をクリックします。
[
編集] をクリックします。[バックエンドの構成] をクリックします。
インターネット NEG バックエンドを使用するバックエンド サービスの [
編集] をクリックします。[Cloud CDN を有効にする] を選択します。
[更新] をクリックします。
変更を確認するには、[確認と完了] をクリックして、[更新] をクリックします。
gcloud
- バックエンド サービスで Cloud CDN を有効にするには、次のコマンドを使用します。
gcloud compute backend-services update BACKEND_SERVICE \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global \ --enable-cdn \ --cache-mode=CACHE_MODE
CACHE_MODE
を次のいずれかに置き換えて、キャッシュ モードを設定します。CACHE_All_STATIC
: 静的コンテンツを自動的にキャッシュに保存します。USE_ORIGIN_HEADERS
(デフォルト): コンテンツをキャッシュに保存するには、送信元で有効なキャッシュ ヘッダーを設定する必要があります。FORCE_CACHE_ALL
:Cache-Control
レスポンス ヘッダー内のprivate
、no-store
、またはno-cache
のディレクティブを無視して、すべてのコンテンツをキャッシュに保存します。
カスタム ヘッダーを使用してリクエストを認証する
外部バックエンドに送信されるリクエストを認証するには、Google Cloud ロードバランサからのリクエストであることを示すカスタム ヘッダーを設定します。たとえば、HTTP リクエストの Host
ヘッダーに特定の値が想定されるように外部バックエンドを構成し、Host
ヘッダーをその値に設定するようにバックエンド サービスを構成できます。
次の手順では、カスタム Host
ヘッダーを各リクエストに追加するようにバックエンド サービスを構成します。
コンソール
Google Cloud コンソールの [ロード バランシング] ページに移動します。
変更するロードバランサの名前をクリックします。
[
編集] をクリックします。[バックエンドの構成] をクリックします。
インターネット NEG バックエンドを使用するバックエンド サービスの [
編集] をクリックします。[詳細構成] をクリックします。
[カスタム リクエスト ヘッダー] で、[ヘッダーを追加] をクリックします。
- [ヘッダー名] に「
Host
」と入力します。 - [ヘッダーの値] に「
FQDN_NEG_ENDPOINT
」と入力します。
- [ヘッダー名] に「
[更新] をクリックします。
変更を確認するには、[確認と完了] をクリックして、[更新] をクリックします。
gcloud
- 次のコマンドを使用して、各リクエストにカスタムの Host ヘッダーを追加するようにバックエンド サービスを構成します。
gcloud compute backend-services update BACKEND_SERVICE \ --custom-request-header "Host: HEADER_VALUE" \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global
また、外部バックエンドが受信リクエストを認証できるように、Host
ヘッダーを想定するように外部バックエンドを構成します。
カスタム リクエスト ヘッダーの概要については、カスタム リクエスト ヘッダーを構成するをご覧ください。他の認証方法については、外部バックエンドへのリクエストを認証するをご覧ください。
外部アプリケーション ロードバランサで IAP を有効にする
注: IAP は Cloud CDN と互換性がありません。IAP を有効または無効にするように構成できます(デフォルトは無効です)。有効にした場合、oauth2-client-id
と oauth2-client-secret
の値を指定する必要があります。
IAP を有効にするには、バックエンド サービスを更新して、--iap=enabled
フラグに oauth2-client-id
と oauth2-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 を有効にできます。
クライアント HTTP キープアライブ タイムアウトを更新する
前の手順で作成したロードバランサは、クライアント HTTP キープアライブ タイムアウトのデフォルト値で構成されています。クライアントの HTTP キープアライブ タイムアウトを更新するには、次の操作を行います。
コンソール
Google Cloud コンソールで、[ロード バランシング] ページに移動します。
- 変更するロードバランサの名前をクリックします。
- [ 編集] をクリックします。
- [フロントエンドの構成] をクリックします。
- [高度な機能] を開きます。[HTTP キープアライブ タイムアウト] にタイムアウト値を入力します。
- [更新] をクリックします。
- 変更を確認するには、[確認と完了] をクリックして、[更新] をクリックします。
gcloud
HTTP ロードバランサの場合は、gcloud compute target-http-proxies update
コマンドを使用してターゲット HTTP プロキシを更新します。
gcloud compute target-http-proxies update TARGET_HTTP_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --global
HTTPS ロードバランサの場合は、gcloud compute target-https-proxies update
コマンドを使用してターゲット HTTPS プロキシを更新します。
gcloud compute target-https-proxies update TARGET_HTTPS_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --global
次のように置き換えます。
TARGET_HTTP_PROXY_NAME
: ターゲット HTTP プロキシの名前。TARGET_HTTPS_PROXY_NAME
: ターゲット HTTPS プロキシの名前。HTTP_KEEP_ALIVE_TIMEOUT_SEC
: HTTP キープアライブ タイムアウト値(5~600 秒)。
次のステップ
- Cloud CDN がキャッシュからレスポンスを配信しているかどうかを確認するには、ログの表示をご覧ください。
- キャッシュに保存可能なコンテンツと保存できないコンテンツについては、キャッシュの概要をご覧ください。
- Cloud CDN の接続拠点を確認するには、キャッシュのロケーションをご覧ください。
- ロードバランサの設定をクリーンアップする。
- Cloud CDN を無効にする方法については、Cloud CDN を無効にするをご覧ください。