このページでは、従来のアプリケーション ロードバランサをデプロイして、オンプレミスまたは他のパブリック クラウドにあり、ハイブリッド接続を使用して到達可能なネットワーク エンドポイントにトラフィックをロード バランシングする方法について説明します。
これらのタスクが完了したら、必要に応じて追加のサービス(Cloud CDN、Google Cloud Armor など)と高度なトラフィック管理機能を有効にできます。
まだ行っていない場合は、ハイブリッド接続 NEG の概要を確認して、ハイブリッド ロード バランシングを設定するためのネットワーク要件を把握してください。
設定の概要
このページの例では、次のサンプル デプロイメントを設定します。
ハイブリッド ロード バランシングのデプロイを試す前に、ハイブリッド接続を構成する必要があります。このドキュメントでは、ハイブリッド接続の設定について説明しません。
Cloud VPN または Cloud Interconnect(Dedicated または Partner)のどちらのハイブリッド接続プロダクトを選択したかに応じて、関連するプロダクトのドキュメントを使用して構成してください。
権限
ハイブリッド ロード バランシングを設定するには、次の権限が必要です。
Google Cloud
- Google Cloud とオンプレミス環境または他のクラウド環境との間のハイブリッド接続を確立する権限。必要な権限の一覧については、関連する Network Connectivity プロダクトのドキュメントをご覧ください。
- ハイブリッド接続 NEG とロードバランサを作成する権限。このガイドで説明するタスクの実行に必要な権限は、Compute ロードバランサ管理者のロール(
roles/compute.loadBalancerAdmin
)に含まれています。
オンプレミス環境または Google Cloud 以外のクラウド環境
IP:Port
の組み合わせで Google Cloud からオンプレミス環境または他のクラウド環境のサービスに到達できるように、ネットワーク エンドポイントを構成する権限。詳細については、お使いの環境のネットワーク管理者に問い合わせてください。- Google のヘルスチェック プローブがエンドポイントに到達することを許可するように、ファイアウォール ルールをオンプレミス環境または他のクラウド環境に作成する権限。
さらに、このページの手順を完了するには、ハイブリッド接続 NEG、ロードバランサ、ゾーン NEG(およびそれらのエンドポイント)を作成して、ロードバランサの Google Cloud ベースのバックエンドとして機能させる必要があります。
そのためには、プロジェクトのオーナーまたは編集者であるか、次の Compute Engine IAM のロールが必要です。
タスク | 必要なロール |
---|---|
ネットワーク、サブネット、ロードバランサ コンポーネントの作成 | Compute ネットワーク管理者(roles/compute.networkAdmin ) |
ファイアウォール ルールの追加と削除 | Compute セキュリティ管理者(roles/compute.securityAdmin ) |
インスタンスの作成 | Compute インスタンス管理者(roles/compute.instanceAdmin ) |
ハイブリッド接続を確立する
オンプレミス環境または他のクラウド環境と Google Cloud を接続するには、Cloud Router とともに Cloud Interconnect VLAN アタッチメントまたは Cloud VPN トンネルを使用して、ハイブリッド接続を確立する必要があります。高可用性接続の使用をおすすめします。
グローバル動的ルーティングが有効になっている Cloud Router は、Border Gateway Protocol(BGP)を介して特定のエンドポイントを学習し、Google Cloud VPC ネットワークにプログラムします。リージョン動的ルーティングはサポートされていません。静的ルートもサポートされていません。
Cloud Interconnect と Cloud VPN のいずれかの構成に使用する VPC ネットワークは、ハイブリッド ロード バランシングのデプロイに使用するものと同じネットワークです。VPC ネットワークのサブネットの CIDR 範囲がリモートの CIDR 範囲と競合しないようにしてください。IP アドレスが重複する場合、リモート接続よりもサブネット ルートが優先されます。
手順については、次のドキュメントをご覧ください。
Google Cloud の外部にある環境を設定する
次の手順で、ハイブリッド ロード バランシング用のオンプレミス環境またはその他のクラウド環境を設定します。
- オンプレミス サービスを Google Cloud(
IP:Port
)に公開するようにネットワーク エンドポイントを構成します。 - オンプレミス環境または他のクラウド環境でファイアウォール ルールを構成します。
- プライベート環境への特定の必要なルートをアドバタイズするように Cloud Router を構成します。
ネットワーク エンドポイントを設定する
ハイブリッド接続を設定したら、オンプレミス環境または他のクラウド環境内に、IP:port
の組み合わせを使用して Cloud Interconnect または Cloud VPN 経由で到達可能なネットワーク エンドポイントを構成します。この IP:port
の組み合わせは、このプロセスの後半で Google Cloud で作成されるハイブリッド接続 NEG の 1 つ以上のエンドポイントとして構成されます。
IP エンドポイントへのパスが複数ある場合、ルーティングは Cloud Router の概要で説明されているように動作します。
ファイアウォール ルールを設定する
オンプレミス環境またはその他のクラウド環境に、次のファイアウォール ルールを作成する必要があります。
上り(内向き)許可ファイアウォール ルールを作成して、Google のヘルスチェック プローブからエンドポイントへのトラフィックを許可します。許可される送信元 IP アドレスの範囲は
35.191.0.0/16
~130.211.0.0/22
です。詳細については、プローブの IP 範囲とファイアウォール ルールをご覧ください。
ルートをアドバタイズする
オンプレミス環境またはその他のクラウド環境に次のカスタム IP 範囲をアドバタイズするように、Cloud Router を構成します。
- Google のヘルスチェック プローブで使用される範囲(
35.191.0.0/16
~130.211.0.0/22
)。
Google Cloud 環境を設定する
以降のステップでは、環境間のハイブリッド接続の構成に使用した VPC ネットワーク(この手順では NETWORK)を使用します。
バックエンドのサブネットを作成する
このサブネットは、ロードバランサのゾーン NEG バックエンド、フロントエンド、内部 IP アドレスの作成に使用されます。
環境間のハイブリッド接続の構成に使用した NETWORK ネットワーク内にサブネットを作成します。
コンソール
Google Cloud コンソールの [VPC ネットワーク] ページに移動します。
環境間のハイブリッド接続の構成に使用されたネットワークに移動します。
[サブネット] セクションで次の設定を行います。
- [サブネット作成モード] を [カスタム] に設定します。
- [新しいサブネット] セクションに、次の情報を入力します。
- 名前: LB_SUBNET_NAME
- リージョン: REGION
- IP アドレス範囲: LB_SUBNET_RANGE
- [完了] をクリックします。
[作成] をクリックします。
gcloud
環境間のハイブリッド接続の構成に使用した NETWORK ネットワーク内にサブネットを作成します。
gcloud compute networks subnets create LB_SUBNET_NAME \ --network=NETWORK \ --range=LB_SUBNET_RANGE \ --region=REGION
ファイアウォール ルールを作成する
この例では、次のファイアウォール ルールを作成します。
fw-allow-health-check
: ロード バランシングされているインスタンスに適用される上り(内向き)ルール。ロードバランサと Google Cloud ヘルスチェック システム(130.211.0.0/22
と35.191.0.0/16
)からのトラフィックを許可します。この例では、ターゲットタグallow-health-check
を使用して、適用するバックエンド VM が識別されます。
コンソール
Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。
[ファイアウォール ルールを作成] をクリックします。
- [名前] に「
fw-allow-health-check
」と入力します。 - [ネットワーク] セクションで、
NETWORK
を選択します。 - [ターゲット] で [指定されたターゲットタグ] を選択します。
- [ターゲットタグ] フィールドに「
allow-health-check
」を入力します。 - [ソースフィルタ] を [IPv4 範囲] に設定します。
- [送信元 IPv4 範囲] を
130.211.0.0/22
と35.191.0.0/16
に設定します。 - [プロトコルとポート] で [指定したプロトコルとポート] をオンにします。
- [TCP] の横にあるチェックボックスをオンにして、ポート番号に「
80
」と入力します。
- [名前] に「
[作成] をクリックします。
gcloud
ロードバランサと 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
タイプのエンドポイント)。まず、GCP_NEG_ZONE ゾーンに VM を作成します。次に、同じ GCP_NEG_ZONE にゾーン NEG を作成し、VM のネットワーク エンドポイントを NEG に追加します。
VM を作成する
コンソール
Google Cloud コンソールの [VM インスタンス] ページに移動します。
[VM インスタンス] に移動[インスタンスを作成] をクリックします。
[名前] を
vm-a1
に設定します。[リージョン] で [REGION] を選択します。
[ゾーン] で [GCP_NEG_ZONE] を選択します。
[ブートディスク] セクションで、ブートディスク オプションとして Debian GNU/Linux 12 (bookworm) が選択されていることを確認します。必要に応じて [選択] をクリックし、イメージを変更します。
[詳細オプション] をクリックして、次の変更を行います。
- [ネットワーク] をクリックして、ネットワーク タグ
allow-health-check
を追加します。 - [ネットワーク インターフェース] にある編集ボタン
- ネットワーク: NETWORK
- サブネット: LB_SUBNET_NAME
- IP スタックタイプ: IPv4 と IPv6(デュアルスタック)
をクリックして、次の変更を行い、[完了] をクリックします。 [管理] をクリックします。[起動スクリプト] フィールドに、次のスクリプトの内容をコピーして貼り付けます。スクリプトの内容は 4 つの VM ですべて同じです。
#! /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
- [ネットワーク] をクリックして、ネットワーク タグ
[作成] をクリックします。
以下の手順を繰り返し、次の名前とゾーンの組み合わせを使用して、2 つ目の VM を作成します。
- 名前:
vm-a2
、ゾーン: GCP_NEG_ZONE
- 名前:
gcloud
VM とそのゾーンの名前にこれらの組み合わせを使用して、次のコマンドを 2 回実行して VM を作成します。スクリプトの内容は両方の VM で同じです。
vm-a1
の VM_NAME と任意の GCP_NEG_ZONE ゾーンvm-a2
の VM_NAME と同じ GCP_NEG_ZONE ゾーンIPv4 トラフィックをサポートするには、次のコマンドを実行します。
gcloud compute instances create VM_NAME \ --zone=GCP_NEG_ZONE \ --image-family=debian-10 \ --image-project=debian-cloud \ --tags=allow-health-check \ --ipv6-network-tier=PREMIUM --stack-type=IPV4_ONLY \ --subnet=LB_SUBNET_NAME \ --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'
ゾーン NEG を作成する
コンソール
ゾーン ネットワーク エンドポイント グループを作成するには:
- Google Cloud コンソールの [ネットワーク エンドポイント グループ] ページに移動します。
[ネットワーク エンドポイント グループ] ページに移動 - [ネットワーク エンドポイント グループを作成] をクリックします。
- ゾーン NEG の名前を入力します。この手順では GCP_NEG_NAME とします。
- [ネットワーク エンドポイント グループの種類] で [ネットワーク エンドポイント グループ(ゾーン)] を選択します。
- [ネットワーク] で NETWORK を選択します。
- [サブネット] で LB_SUBNET_NAME を選択します。
- [ゾーン] で GCP_NEG_ZONE を選択します。
- [デフォルト ポート] で「
80
」と入力します。 - [作成] をクリックします。
エンドポイントをゾーン NEG に追加します。
- Google Cloud コンソールの [ネットワーク エンドポイント グループ] ページに移動します。
[ネットワーク エンドポイント グループ] に移動 - 前のステップで作成したネットワーク エンドポイント グループの名前(GCP_NEG_NAME)をクリックします。ネットワーク エンドポイント グループの詳細ページが表示されます。
- [このグループのネットワーク エンドポイント] セクションで [ネットワーク エンドポイントを追加] をクリックします。[ネットワーク エンドポイントの追加] ページが表示されます。
- [VM インスタンス] を選択して、ネットワーク エンドポイントとして内部 IP アドレスを追加します。[ネットワーク インターフェース] セクションに、VM の名前、ゾーン、サブネットが表示されます。
- [IPv4 アドレス] フィールドに、新しいネットワーク エンドポイントの IPv4 アドレスを入力します。
- ポートタイプを選択します。
- [デフォルト] を選択すると、エンドポイントはネットワーク エンドポイント グループのすべてのエンドポイントにデフォルト ポート
80
を使用します。この例では、Apache サーバーがポート80
でリクエストを配信しているため、これで十分です。 - [カスタム] を選択した場合は、使用するエンドポイントのポート番号を入力します。
- [デフォルト] を選択すると、エンドポイントはネットワーク エンドポイント グループのすべてのエンドポイントにデフォルト ポート
- 他のエンドポイントを追加するには、[ネットワーク エンドポイントを追加] をクリックし、前の手順を繰り返します。
- すべてのエンドポイントを追加したら、[作成] をクリックします。
gcloud
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=LB_SUBNET_NAME
次のステップで説明するように、NEG の作成時に
--default-port
を指定するか、各エンドポイントのポート番号を指定します。シングルスタック エンドポイントを GCP_NEG_NAME に追加します。
gcloud compute network-endpoint-groups update GCP_NEG_NAME \ --zone=GCP_NEG_ZONE \ --add-endpoint='instance=vm-a1,port=80' \ --add-endpoint='instance=vm-a2,port=80'
ハイブリッド接続 NEG を設定する
NEG を作成するときは、Google Cloud とオンプレミスまたは他のクラウド環境との間の地理的距離を最小限に抑える ZONE を使用します。たとえば、ドイツのフランクフルトのオンプレミス環境にサービスをホストする場合、NEG を作成するときに europe-west3-a
Google Cloud ゾーンを指定できます。
また、Cloud Interconnect を使用している場合は、NEG の作成に使用する ZONE は、ハイブリッド接続の Cloud Interconnect VLAN アタッチメントが構成されているリージョンに存在している必要があります。
使用可能なリージョンとゾーンについては、Compute Engine のドキュメント: 使用可能なリージョンとゾーンをご覧ください。
コンソール
ハイブリッド接続ネットワーク エンドポイント グループを作成するには:
- Google Cloud コンソールの [ネットワーク エンドポイント グループ] ページに移動します。
[ネットワーク エンドポイント グループ] に移動 - [ネットワーク エンドポイント グループを作成] をクリックします。
- ハイブリッド NEG の名前を入力します。この手順では ON_PREM_NEG_NAME とします。
- ネットワーク エンドポイント グループの種類として [ハイブリッド接続ネットワーク エンドポイント グループ(ゾーン)] を選択します。
- [ネットワーク] で NETWORK を選択します。
- [サブネット] で LB_SUBNET_NAME を選択します。
- [ゾーン] で ON_PREM_NEG_ZONE を選択します。
- デフォルト ポートを入力します。
- [作成] をクリックします。
ハイブリッド接続 NEG にエンドポイントを追加します。
- Google Cloud コンソールの [ネットワーク エンドポイント グループ] ページに移動します。
[ネットワーク エンドポイント グループ] ページに移動 - 前のステップで作成したネットワーク エンドポイント グループの名前(ON_PREM_NEG_NAME)をクリックします。ネットワーク エンドポイント グループの詳細ページが表示されます。
- [このグループのネットワーク エンドポイント] セクションで [ネットワーク エンドポイントを追加] をクリックします。[ネットワーク エンドポイントの追加] ページが表示されます。
- 新しいネットワーク エンドポイントの IP アドレスを入力します。
- ポートタイプを選択します。
- [デフォルト] を選択すると、エンドポイントはネットワーク エンドポイント グループのすべてのエンドポイントにデフォルト ポートを使用します。
- [カスタム] を選択すると、使用するエンドポイントに異なるポート番号を入力できます。
- 他のエンドポイントを追加するには、[ネットワーク エンドポイントを追加] をクリックし、前の手順を繰り返します。
- Google Cloud 以外のエンドポイントをすべて追加したら、[作成] をクリックします。
gcloud
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
エンドポイントを
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 を作成できます。
ロードバランサの構成
コンソール
gcloud
- 外部クライアントがトラフィックを送信するグローバル静的外部 IP アドレスを作成します。
gcloud compute addresses create LB_IP_ADDRESS_NAME \ --global
- バックエンドのヘルスチェックを作成します。
gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \ --use-serving-port
- バックエンド サービスを作成します。このバックエンド サービスに、ゾーン NEG とハイブリッド接続 NEG の両方をバックエンドとして追加します。
- ゾーン 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
バランシング モードの構成の詳細については、gcloud CLI のドキュメントで--max-rate-per-endpoint
パラメータの説明をご覧ください。 - ハイブリッド 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
- 受信リクエストをバックエンド サービスに転送するための URL マップを作成します。
gcloud compute url-maps create URL_MAP_NAME \ --default-service BACKEND_SERVICE
- この手順は、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
- 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
- 受信リクエストをプロキシに転送する転送ルールを作成します。
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
gcloud compute backend-services create BACKEND_SERVICE \ --health-checks=HTTP_HEALTH_CHECK_NAME \ --global
ドメインをロードバランサに接続する
ロードバランサが作成されたら、ロードバランサに関連付けられた 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 アドレスにトラフィックを送信できるようになりました。
Google Cloud コンソールの [ロード バランシング] ページに移動します。
[ロード バランシング] ページに移動作成したロードバランサをクリックします。
ロードバランサの IP アドレスをメモします。
ロードバランサにトラフィックを送信します。
HTTP ロードバランサを作成した場合は、ウェブブラウザで
http://IP_ADDRESS
に移動してロードバランサをテストできます。IP_ADDRESS
は、ロードバランサの IP アドレスに置き換えます。エンドポイントを介して公開したサービスが表示されます。HTTPS ロードバランサを作成した場合は、次のように
curl
を使用してロードバランサをテストできます。IP_ADDRESS
は、ロードバランサの IP アドレスに置き換えます。エンドポイントを介して公開したサービスが表示されます。curl -k https://IP_ADDRESS
結果に問題があり、Google マネージド証明書を使用している場合は、証明書リソースのステータスが ACTIVE であることを確認します。詳しくは、Google マネージド SSL 証明書リソースのステータスをご覧ください。次に、ロードバランサの IP アドレスを指すドメインをテストします。次に例を示します。
curl -s https://test.example.com
Google Cloud 以外のエンドポイントのテストは、ハイブリッド NEG エンドポイントを介して公開したサービスによって異なります。