バックエンド経由でリージョンの Google API にアクセスする
このガイドでは、Private Service Connect バックエンドを使用して内部アプリケーション ロードバランサを構成し、リージョンの Google API にアクセスする方法について説明します。
バックエンドの詳細については、バックエンドについてをご覧ください。
Private Service Connect に使用される内部アプリケーション ロードバランサには、共有 VPC ネットワークと接続済みのネットワークからアクセスできます。
ロール
このガイドで説明するタスクの実行に必要な権限は、Compute ロードバランサ管理者のロール(roles/compute.loadBalancerAdmin
)に含まれています。
サポート対象のサービス
サポートされているリージョンのサービス エンドポイントの一覧をご覧ください。
始める前に
プロジェクトで Compute Engine API を有効にします。
ロード バランシング転送ルールを Service Directory に登録するには、プロジェクトで Service Directory API を有効にします。Service Directory を構成するには、Google Cloud CLI または API を使用して転送ルールを作成する必要があります。
プロキシ専用サブネットを作成します(まだ存在しない場合)。内部アプリケーション ロードバランサを作成する VPC ネットワークとリージョンには、プロキシ専用のサブネットが 1 つ必要です。このサブネットは、そのネットワークとリージョン内のすべての内部アプリケーション ロードバランサで使用されます。
ドメインの秘密鍵とセルフマネージド証明書を作成します(まだ取得していない場合)。セルフマネージド SSL 証明書の使用手順 1 をご覧ください。ロードバランサを構成するときにターゲット HTTPS プロキシを作成する場合は、秘密鍵と証明書が必要です。
ネットワーク エンドポイント グループの作成
ロードバランサで使用可能にするサービスごとに、Private Service Connect ネットワーク エンドポイント グループ(NEG)を作成します。
コンソール
Google Cloud コンソールで、[ネットワーク エンドポイント グループ] ページに移動します。
[ネットワーク エンドポイント グループを作成] をクリックします。
ネットワーク エンドポイント グループの名前を入力します。
[ネットワーク エンドポイント グループの種類] で [ネットワーク エンドポイント グループ(Private Service Connect)] を選択します。
ネットワーク エンドポイント グループのリージョンを選択します。
ネットワーク エンドポイント グループのターゲット サービスを選択します。
[作成] をクリックします。
gcloud
gcloud compute network-endpoint-groups create NEG_NAME \ --network-endpoint-type=private-service-connect \ --psc-target-service=TARGET_SERVICE \ --region=REGION
次のように置き換えます。
NEG_NAME
: ネットワーク エンドポイント グループの名前。TARGET_SERVICE
: 接続先のターゲット サービス。サポートされているリージョンのサービス エンドポイントの一覧をご覧ください。REGION
: ネットワーク エンドポイント グループを作成するリージョン。接続するサービスと同じリージョンにする必要があります。
ロードバランサの構成
すべてのロードバランサ コンポーネントを Private Service Connect ネットワーク エンドポイント グループと同じリージョンに作成する必要があります。
コンソール
構成を開始する
Google Cloud コンソールで、[ロード バランシング] ページに移動します。
- [ロードバランサを作成] をクリックします。
- [ロードバランサの種類] で [アプリケーション ロードバランサ(HTTP / HTTPS)] を選択し、[次へ] をクリックします。
- [インターネット接続または内部] で [内部] を選択し、[次へ] をクリックします。
- [クロスリージョンまたはシングル リージョンのデプロイ] で [リージョン ワークロードに最適] を選択し、[次へ] をクリックします。
- [構成] をクリックします。
基本構成
- ロードバランサの名前を入力します。
- ロードバランサのリージョンを選択します。
ロードバランサのネットワークを選択します。
NEG とロードバランサを作成するリージョンにプロキシ専用サブネットを含める必要があります。サブネットがない場合は、[サブネットを予約] をクリックして作成できます。
ウィンドウを開いたままにして続行します。
バックエンドの構成
Private Service Connect ネットワーク エンドポイント グループは、ロードバランサのバックエンドの一種です。構成するバックエンドごとにバックエンド サービスを作成します。
- [バックエンドの構成] をクリックします。
構成する Private Service Connect ネットワーク エンドポイント グループごとに、バックエンド サービスを作成します。
- [バックエンド サービスの作成または選択] メニューから [バックエンド サービスを作成] を選択します。
- バックエンド サービスの [名前] を入力します。
- [バックエンド タイプ] を Private Service Connect ネットワーク エンドポイント グループに設定します。
- [Private Service Connect のターゲット タイプ] を [リージョン内 Google API] に設定します。
プロトコルに [HTTPS] を選択します。
[バックエンド] セクションで、[新しいバックエンド] メニューをクリックし、Private Service Connect ネットワーク エンドポイント グループを選択します。
新しい Private Service Connect ネットワーク エンドポイント グループを作成する必要がある場合は、[Private Service Connect ネットワーク エンドポイント グループを作成] をクリックします。
ルーティング ルール
受信 HTTPS リクエストを特定のバックエンド サービスまたはバックエンド バケットにルーティングするためのルールのセットは、URL マップと呼ばれます。URL マップの詳細については、URL マップの概要をご覧ください。
ロードバランサにバックエンド サービスを 1 つだけ構成する場合は、デフォルトのルーティング ルールで十分です。フロントエンドの構成に進んでください。
- バックエンド サービスが複数ある場合は、[ルーティング ルール] をクリックします。
- [単純なホストとパスのルール] を選択します。
- バックエンドごとに、次の操作を行います。
- ホストとパスのルールを追加します。
- [ホスト] に、このサービスにリクエストを送信するために使用するホストの名前を入力します(例:
pubsub.example.com
)。 - [パス] に、パスを入力します(例:
/*
)。 - [バックエンド] で、バックエンド サービスを選択します。
フロントエンドの構成
- [フロントエンドの構成] をクリックします。
- [フロントエンド IP とポートの追加] をクリックします。
- ロードバランサの名前を入力します。
- [プロトコル] フィールドで、[HTTPS(HTTP/2 を含む)] を選択します。
- ロードバランサのサブネットワークを選択します。
- HTTPS トラフィックを許可するように、ポートが
443
に設定されていることを確認します。 [IP アドレス] で、メニューから IP アドレスを選択します。
新しい IP アドレスを予約する場合は、[IP アドレスを作成] をクリックします。
[証明書] プルダウン リストをクリックします。
- 使用するセルフマネージド SSL 証明書リソースがすでにある場合は、メニューから選択します。
- そうでない場合は、[新しい証明書を作成] を選択します。
- 証明書リソースの名前を入力します。
- 該当するフィールドで、PEM 形式のファイルをアップロードします。
- 証明書
- 秘密鍵
- [作成] をクリックします。
[完了] をクリックします。
確認と完了
- [確認と完了] をクリックして構成を確認します。
- [作成] をクリックします。
gcloud
作成したネットワーク エンドポイント グループごとにバックエンド サービスを作成します。
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTPS \ --region=REGION
次のように置き換えます。
BACKEND_SERVICE_NAME
: バックエンド サービスの名前。REGION
: バックエンド サービスを作成するリージョン。
作成したバックエンド サービスごとに、対応する NEG をバックエンド サービスに追加します。
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=NEG_NAME \ --region=REGION
次のように置き換えます。
BACKEND_SERVICE_NAME
: バックエンド サービスの名前。NEG_NAME
: ネットワーク エンドポイント グループの名前。REGION
: バックエンドのリージョン。
ロードバランサの URL マップを作成します。
URL マップでは、デフォルトのバックエンド サービスを参照する必要があります。1 つのバックエンド サービスを使用してロードバランサを構成している場合は、そのバックエンド サービスをデフォルトとして設定します。次のステップで作成するホストルールとパスマッチャーで参照される複数のバックエンド サービスを使用するようにロードバランサを構成するには、バックエンド サービスの 1 つを URL マップのデフォルトに設定します。
gcloud compute url-maps create URL_MAP_NAME \ --default-service=DEFAULT_BACKEND_SERVICE_NAME \ --region=REGION
次のように置き換えます。
URL_MAP_NAME
: URL マップの名前。DEFAULT_BACKEND_SERVICE_NAME
: ロードバランサのデフォルトの名前。このデフォルトは、指定されたホスト名に一致するホストルールがない場合に使用されます。REGION
: URL マップを作成するリージョン。
URL マップにバックエンド サービスを追加します。
URL マップで 2 つ以上のバックエンド サービスを参照する必要がある場合は、次の手順を行います。URL マップが 1 つのバックエンド サービスのみを参照している場合は、この手順をスキップします。
バックエンド サービスごとにパスマッチャーを追加します。バックエンド サービスごとに 1 つのパスマッチャーを作成する必要があります。
gcloud compute url-maps add-path-matcher URL_MAP_NAME \ --path-matcher-name=PATH_MATCHER \ --default-service=BACKEND_SERVICE_NAME \ --region=REGION
次のように置き換えます。
URL_MAP_NAME
: URL マップの名前。PATH_MATCHER
: パスマッチャーの名前。BACKEND_SERVICE_NAME
: バックエンド サービスの名前。REGION
: URL マップのリージョン。
ホスト名ごとに、ホストルールを追加します。
各ホストルールが参照できるパスマッチャーは 1 つだけです。また、2 つ以上のホストルールが同じパスマッチャーを参照できます。
gcloud compute url-maps add-host-rule URL_MAP_NAME \ --hosts=HOST \ --path-matcher-name=PATH_MATCHER \ --region=REGION
次のように置き換えます。
URL_MAP_NAME
: URL マップの名前。HOST
: このサービスのリクエストを送信するホスト名。例:pubsub.example.com
PATH_MATCHER
: パスマッチャーの名前。REGION
: URL マップのリージョン。
ターゲット HTTPS プロキシを作成します。
gcloud compute ssl-certificates create
コマンドを使用してリージョン SSL 証明書リソースを作成します。内部アプリケーション ロードバランサでは Google マネージド証明書がサポートされません。gcloud compute ssl-certificates create CERTIFICATE \ --certificate=LB_CERT \ --private-key=LB_PRIVATE_KEY \ --region=REGION
次のように置き換えます。
CERTIFICATE
: 証明書の名前。LB_CERT
: セルフ マネージド証明書の PEM 形式の証明書ファイルのパス。LB_PRIVATE_KEY
: セルフ マネージド証明書の PEM 形式の秘密鍵ファイルのパス。REGION
: 証明書のリージョン。
リージョン SSL 証明書リソースを使用して、
gcloud compute target-https-proxies create
コマンドでターゲット HTTPS プロキシを作成します。gcloud compute target-https-proxies create PROXY_NAME \ --url-map=URL_MAP_NAME \ --region=REGION \ --ssl-certificates=CERTIFICATE
次のように置き換えます。
PROXY_NAME
: ターゲット HTTPS プロキシの名前。URL_MAP_NAME
: URL マップの名前。REGION
: 証明書リソースのリージョン。CERTIFICATE
: 証明書リソースの名前。
転送ルールにリージョン内部 IPv4 アドレスを予約します。
gcloud compute addresses create ADDRESS_NAME \ --ip-version=IPV4 \ --region=REGION \ --subnet=SUBNETWORK
次のように置き換えます。
ADDRESS_NAME
: IP アドレス リソースの名前。REGION
: IP アドレスを作成するリージョン。SUBNET
: IP アドレスを作成するサブネット。
予約済み IP アドレスを表示するには、次のコマンドを実行します。ロードバランサを作成したら、IP アドレスを使用して構成を確認できます。
gcloud compute addresses describe ADDRESS_NAME \ --format="get(address)" --region=REGION
転送ルールを作成します。
gcloud compute forwarding-rules create
コマンドを使用して転送ルールを作成します。gcloud compute forwarding-rules create FWD_RULE \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --address=ADDRESS_NAME \ --ports=443 \ --region=REGION \ --target-https-proxy=PROXY_NAME \ --target-https-proxy-region=PROXY_REGION \ [--service-directory-registration=SD_SERVICE_NAME]
次のように置き換えます。
FWD_RULE
: 転送ルールの名前。NETWORK
: 転送ルールを作成するリージョン。ADDRESS_NAME
: 予約済みの IP アドレス。REGION
: 転送ルールのリージョン。PROXY_NAME
: ターゲット HTTPS プロキシの名前。PROXY_REGION
: ターゲット HTTPS プロキシのリージョン。SD_SERVICE_NAME
: ロードバランサを登録する Service Directory サービスの URI。形式はprojects/PROJECT/locations/REGION/namespaces/NAMESPACE_NAME/services/SERVICE_NAME
です。--service-directory-registration
の指定は任意です。
構成を確認する
VM インスタンスを作成します。
gcloud compute instances create VM_NAME \ --network=NETWORK \ --image-project=debian-cloud --image-family=debian-12 \ --zone=ZONE
次のように置き換えます。
VM_NAME
: 仮想マシンの名前。NETWORK
: VM のネットワーク。ZONE
: VM のゾーン。
VM に接続します。
gcloud compute ssh VM_NAME --zone=ZONE
curl
を使用して、構成を確認します。このコマンドではHost
ヘッダーを設定し、ユーザー定義の IP アドレスを指定して DNS の解決をバイパスします。プロトコルでデフォルトのポートを使用している場合は、ポートを省略できます(HTTPS にポート 443 を使用する場合など)。必要に応じて、
-k
フラグを使用して、証明書の検証をスキップできます。自己署名証明書を使用してターゲット HTTPS プロキシを構成した場合、または証明書に署名した認証局の証明書が VM に存在しない場合は、検証のスキップが必要になることがあります。curl -iv --resolve HOSTNAME:443:IP_ADDRESS \ 'https://HOSTNAME/RESOURCE_URI'
次のように置き換えます。
HOSTNAME
: URL マップで構成したホスト名(例:pubsub.example.com
)。IP_ADDRESS
: ロードバランサの転送ルールの IP アドレス。RESOURCE_URI
: 検証に使用するリソースの URI の残り。たとえば、ロードバランサが Pub/Sub のリージョン エンドポイントにリクエストを転送している場合は、rest?version=v1
を使用できます。
DNS レコードを構成する
転送ルールの IP アドレスを参照するように、URL マップに追加したホストの DNS レコードを構成します。Cloud DNS を使用して DNS を管理している場合は、レコードの追加、変更、削除をご覧ください。それ以外の場合は、DNS サーバーで DNS レコードを構成します。
たとえば、次のような構成を作成したとします。
ターゲット サービス
pubsub.europe-west3.rep.googleapis.com
を使用する Private Service Connect NEG。この Private Service Connect NEG をバックエンドとして使用する内部アプリケーション ロードバランサ。
pubsub.example.com
のホストルールを定義する URL マップ。
この構成を正しく機能させるには、pubsub.example.com
が転送ルールの IP アドレスを参照する DNS レコードを作成する必要があります。
この構成では、pubsub.example.com
に送信されたリクエストはロードバランサに送信され、ロードバランサから pubsub.europe-west3.rep.googleapis.com
に転送されます。
バックエンドにリクエストを送信するようにクライアントを構成する
パブリック サービス エンドポイントではなくバックエンド経由でリクエストを送信するには、ロードバランサの URL マップで定義したホスト名(pubsub.example.com
など)にリクエストを送信するようにクライアントを構成する必要があります。カスタム エンドポイントを使用するように構成する方法については、クライアントまたはクライアント ライブラリのドキュメントをご覧ください。次のページでは、一般的なクライアントの構成手順について説明します。
Python: クライアント オプションで
api_endpoint
を構成できます。Go: ClientOptions で
WithEndpoint
を構成できます。.NET: クライアントのビルダークラスで
Endpoint
を構成できます。gcloud: gcloud CLI で
api_endpoint_overrides
を構成できます。
オンプレミス ホストからバックエンドにアクセスする
オンプレミス ネットワークが VPC ネットワークに接続されている場合、Private Service Connect バックエンドにトラフィックを送信できます。
オンプレミス ネットワークは、内部アプリケーション ロードバランサと同じリージョンで Cloud VPN トンネルまたは VLAN アタッチメントを使用して、内部アプリケーション ロードバランサが含まれる VPC ネットワークに接続する必要があります。
オンプレミス ネットワークには、内部アプリケーション ロードバランサへの適切なルートが必要です。Cloud VPN トンネルまたは VLAN アタッチメントの BGP セッションを管理する各 Cloud Router が、内部アプリケーション ロードバランサ転送ルールで使用されるサブネットのプライマリ IP アドレス範囲をアドバタイズするように構成されていることを確認します。Cloud Router は、デフォルトでサブネット ルートをアドバタイズします。
内部アプリケーション ロードバランサの URL マップのホスト名が内部アプリケーション ロードバランサの転送ルールの IP アドレスに解決されるように、オンプレミス システムを構成する必要があります。オンプレミスのネームサーバーに DNS レコードを作成するか、Cloud DNS を使用します。
Cloud DNS が管理する限定公開マネージド ゾーンを使用して DNS レコードを作成した場合は、次の手順を行います。
オンプレミス ネットワークが接続する VPC ネットワークにインバウンド サーバー ポリシーを作成します。
オンプレミス ネットワークが接続する VPC ネットワークで、Cloud VPN トンネルと VLAN アタッチメントが配置されているリージョンのインバウンド フォワーダー エントリポイントを特定します。
URL マップに含まれるホスト名に対する DNS リクエストを Cloud DNS インバウンド フォワーダーのエントリ ポイントに転送するように、オンプレミス DNS ネームサーバーを構成します。