1. はじめに
Private Service Connect を使用すると、サービス プロデューサーはサービス アタッチメントを介して VPC 環境でサービスを公開し、別の VPC 環境のコンシューマーが Private Service Connect エンドポイントを介してこれらのサービスにアクセスできるようにします。これらのプロデューサー サービスは、VM のクラスタとして設計されることがあります。各 VM は、同じポート番号で同じサービスを公開します。以前は、これらのサービス設計では、コンシューマー側に複数の Private Service Connect エンドポイントをデプロイするか、プロデューサー側で IP 転送を使用して正しいプロデューサー VM がターゲットに設定されるようにする必要がありました。
Private Service Connect は、ポート マッピングを使用して正しい宛先をネイティブにターゲットにできるようになりました。このラボでは、この機能が必要となるユースケースと、ポート マッピング NEG を Private Service Connect ワークロードにデプロイする方法について学びます。
学習内容
- Private Service Connect ポート マッピングのユースケース
- PSC ポート マッピングの主なメリット
- ネットワークの要件
- ポート マッピングを使用して Private Service Connect プロデューサー サービスを作成します。
- Private Service Connect エンドポイントを作成する
- Private Service Connect エンドポイントを介してプロデューサー サービスを呼び出す
必要なもの
- オーナー権限を持つ Google Cloud プロジェクト
2. Private Service Connect ポート マッピングのユースケース
ポート マッピング機能は、PSC ユースケース専用のポート マッピング NEG(ネットワーク エンドポイント グループ)を使用します。
ポート マッピングの使用のメリットを最も受けられるプロデューサーのタイプは、NoSQL データベース プロデューサーと Kafka プロデューサーです。ただし、特定の VM マッピング要件で同じサービスを同じポートで公開する VM クラスタを必要とするプロデューサーは、この機能を使用できます。
プロデューサーは、クライアント ポートとプロデューサー VM + 宛先ポート間のマッピングを定義します。プロデューサーは、この情報をコンシューマーと共有する必要があります。コンシューマーは、事前定義されたポートを使用して、到達する必要があるプロデューサー VM と宛先ポートを一意に識別します。コンシューマーが使用するポートは、プロデューサーが使用するポートとは異なります。
PSC ポート マッピングの主なメリット
- シンプル: プロデューサーはポート マッピングを使用して PSC コンポーネントをデプロイし、コンシューマーは PSC エンドポイントをデプロイします。PSC はネットワーク アドレス変換を自動的に処理します。
- 費用対効果が高い: 追加の PSC リソースやプロデューサー VM の CPU サイクルは必要ありません。料金は他のタイプの PSC デプロイと同じです
- 高パフォーマンス: ポート マッピングでは、他の PSC モードと同じラインレート スループットと低レイテンシが実現されます。
- スケーラブルで IP 効率が高い: コンシューマー VPC の 1 つの IP アドレスで、最大 1,000 個のプロデューサー VM と 1,000 個のポート マッピングにアクセスできます。
3. ネットワークの要件
- ポート マッピングでは、プロデューサー ロードバランサとして内部ネットワーク パススルー ロードバランサを使用する必要があります。
- ポート マッピングで使用できるのは PSC エンドポイントのみです(PSC バックエンドや PSC インターフェースは使用できません)。
- ポート マッピング NEG はリージョン コンストラクトです。
- ポート マッピング NEG は、PSC 接続でのみ使用できます。クライアント VM がプロデューサー ロードバランサの転送ルールを直接呼び出す場合、これらのルールは機能しません。これは、この Codelab でプロデューサー サービスをテストする方法に反映されています。
- PSC エンドポイントとプロデューサー サービス スタックは、異なる VPC に存在する必要があります。
4. Codelab のトポロジ

プロデューサー VPC には、それぞれ 2 つのウェブサーバーを実行する 2 つの VM が作成されます。1 つはポート 1000 で実行され、もう 1 つはポート 2000 で実行されます。Portmap NEG、内部ネットワーク パススルー ロードバランサ、サービス アタッチメントを設定する前に、各サービスをテストします。
コンシューマー VPC で PSC エンドポイントを設定し、クライアント VM からプロデューサー サービスへの接続をテストします。
5. 設定と要件
セルフペース型の環境設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。



- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は
PROJECT_IDと識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。 - なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
Cloud Shell を起動する
Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。
Google Cloud Console で、右上のツールバーにある Cloud Shell アイコンをクリックします。

プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。

この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 5 GB 用意されており、Google Cloud で稼働します。そのため、ネットワークのパフォーマンスと認証機能が大幅に向上しています。この Codelab での作業はすべて、ブラウザ内から実行できます。インストールは不要です。
6. 始める前に
API を有効にする
Cloud Shell で、プロジェクト ID が設定されていることを確認します。
gcloud config list project gcloud config set project [YOUR-PROJECT-ID] project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone
必要なサービスをすべて有効にする
gcloud services enable compute.googleapis.com
7. プロデューサー VPC ネットワークを作成する
VPC ネットワーク
Cloud Shell から
gcloud compute networks create producer-vpc --subnet-mode custom
サブネットを作成する
Cloud Shell から
gcloud compute networks subnets create producer-service-subnet --network producer-vpc --range 10.0.0.0/24 --region $region --enable-private-ip-google-access gcloud compute networks subnets create psc-nat-subnet --network producer-vpc --range 10.100.100.0/24 --region $region --purpose=PRIVATE_SERVICE_CONNECT
PSC サブネットは、ネットワーク アドレス変換の目的で PSC サービス アタッチメントに関連付けられます。本番環境のユースケースでは、このサブネットは、接続されているすべての PSC エンドポイントからの受信トラフィック量をサポートするように適切にサイズ設定する必要があります。詳細については、PSC NAT サブネットのサイジングに関するドキュメントをご覧ください。
ネットワーク ファイアウォール ポリシーとファイアウォール ルールを作成する
Cloud Shell から
gcloud compute network-firewall-policies create producer-vpc-policy --global gcloud compute network-firewall-policies associations create --firewall-policy producer-vpc-policy --network producer-vpc --name network-producer-vpc --global-firewall-policy
IAP に VM インスタンスへの接続を許可するには、次のファイアウォール ルールを作成します。
- IAP を使用してアクセス可能にするすべての VM インスタンスに適用されます。
- IP 範囲 35.235.240.0/20 からの上り(内向き)トラフィックを許可します。この範囲には、IAP が TCP 転送に使用するすべての IP アドレスが含まれています。
Cloud Shell から
gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy producer-vpc-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22 --global-firewall-policy
次のファイアウォール ルールは、PSC サブネットからネットワーク内のすべてのインスタンスへの TCP ポート 1000 ~ 2000 のトラフィックを許可します。本番環境では、このファイアウォール ルールは、特定のプロデューサー サービスに関連付けられたインスタンスのみに制限する必要があります。
Cloud Shell から
gcloud compute network-firewall-policies rules create 2000 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 10.100.100.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy
次のファイアウォール ルールは、TCP ポート 1000 ~ 2000 でサービス サブネット内のすべてのトラフィックを許可します。このルールは、プロデューサー サービスが適切に動作していることをテストするために使用されます。
Cloud Shell から
gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic within the service subnet" --direction INGRESS --src-ip-ranges 10.0.0.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy
プロデューサー VM を作成して構成する
VM を作成する
Cloud Shell から
gcloud compute instances create portmap-vm1 --zone=$zone --subnet=producer-service-subnet --no-address gcloud compute instances create portmap-vm2 --zone=$zone --subnet=producer-service-subnet --no-address gcloud compute instances create test-client-vm --zone=$zone --subnet=producer-service-subnet --no-address
次のセクションでは、各プロデューサー VM のポート 1000 と 2000 で HTTP サーバーを起動します。
VM を構成する
Cloud Shell から
gcloud compute ssh --zone $zone "portmap-vm1" --tunnel-through-iap --project $project
Cloud Shell の portmap-vm1 セッション
mkdir 1000 cd 1000 echo "portmap-vm1 1000">index.html sudo python3 -m http.server 1000 & cd .. mkdir 2000 cd 2000 echo "portmap-vm1 2000">index.html sudo python3 -m http.server 2000 &
新しい Cloud Shell ウィンドウを開く
まず、変数をリセットします。Cloud Shell で次の処理を行います。
project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone gcloud compute ssh --zone $zone "portmap-vm2" --tunnel-through-iap --project $project
Cloud Shell(portmap-vm2 セッション)
mkdir 1000 cd 1000 echo "portmap-vm2 1000">index.html sudo python3 -m http.server 1000 & cd .. mkdir 2000 cd 2000 echo "portmap-vm2 2000">index.html sudo python3 -m http.server 2000 &
8. テスト プロデューサー サービス
まず、portmap インスタンスの IP アドレスを取得する必要があります。これらの IP アドレスをメモしておきます。
新しい Cloud Shell ウィンドウを開く
まず、変数をリセットします。Cloud Shell で次の処理を行います。
project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone gcloud compute instances describe portmap-vm1 \ --format='get(networkInterfaces[0].networkIP)' --zone $zone gcloud compute instances describe portmap-vm2\ --format='get(networkInterfaces[0].networkIP)' --zone $zone
テスト インスタンスにログインします。Cloud Shell で次の処理を行います。
gcloud compute ssh --zone $zone "test-client-vm" --tunnel-through-iap --project $project curl [portmap-vm1 IP]:1000
想定される出力
portmap-vm1 1000
Cloud Shell で次の処理を行います。
curl [portmap-vm1 IP]:2000
想定される出力
portmap-vm1 2000
Cloud Shell で次の処理を行います。
curl [portmap-vm2 IP]:1000
想定される出力
portmap-vm2 1000
Cloud Shell で次の処理を行います。
curl [portmap-vm2 IP]:2000
想定される出力
portmap-vm2 2000
test-client-vm を終了する
9. ポートマップ NEG を使用してプロデューサー サービスを作成する
ロードバランサ コンポーネントを作成する
Cloud Shell から
gcloud compute network-endpoint-groups create portmap-neg --region=$region --network=producer-vpc --subnet=producer-service-subnet --network-endpoint-type=GCE_VM_IP_PORTMAP
Portmap NEG にエンドポイントを追加して、クライアント ポートからプロデューサー ポートへのマッピングを作成します。プロデューサーはこのマッピングを作成し、この情報をコンシューマーに伝える独自の方法を持ちます。特定のポート マッピングは PSC を介して共有されません。
Cloud Shell で次の処理を行います。
gcloud compute network-endpoint-groups update portmap-neg --region=$region --add-endpoint=client-destination-port=1001,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=1000 --add-endpoint=client-destination-port=1002,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=2000 --add-endpoint=client-destination-port=1003,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=1000 --add-endpoint=client-destination-port=1004,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=2000
ロードバランサの構築を完了します。
Cloud Shell で次の処理を行います。
gcloud compute backend-services create portmap-bes --load-balancing-scheme=internal --region=$region --network=producer-vpc gcloud compute backend-services add-backend portmap-bes --network-endpoint-group=portmap-neg --network-endpoint-group-region=$region gcloud compute forwarding-rules create portmap-fr --load-balancing-scheme=INTERNAL --network=producer-vpc --subnet=producer-service-subnet --ports=ALL --region=$region --backend-service=portmap-bes
サービス アタッチメントを作成する
Cloud Shell から
gcloud compute service-attachments create portmap-service-attachment --region=$region --producer-forwarding-rule=portmap-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet
次に、サービス アタッチメント URI を取得してメモし、コンシューマー環境で PSC エンドポイントを構成します。
Cloud Shell で次の処理を行います。
gcloud compute service-attachments describe portmap-service-attachment --region=$region
出力例
connectionPreference: ACCEPT_AUTOMATIC creationTimestamp: '2024-07-19T10:02:29.432-07:00' description: '' enableProxyProtocol: false fingerprint: LI8D6JNQsLA= id: '6207474793859982026' kind: compute#serviceAttachment name: portmap-service-attachment natSubnets: - https://www.googleapis.com/compute/v1/projects/$project/regions/$zone/subnetworks/psc-nat-subnet pscServiceAttachmentId: high: '94288091358954472' low: '6207474793859982026' reconcileConnections: false region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/portmap-service-attachment targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/portmap-fr
10. コンシューマー VPC ネットワークを作成する
VPC ネットワーク
Cloud Shell から
gcloud compute networks create consumer-vpc --subnet-mode custom
サブネットの作成
Cloud Shell から
gcloud compute networks subnets create consumer-client-subnet --network consumer-vpc --range=10.0.0.0/24 --region $region --enable-private-ip-google-access
ネットワーク ファイアウォール ポリシーとファイアウォール ルールを作成する
Cloud Shell から
gcloud compute network-firewall-policies create consumer-vpc-policy --global gcloud compute network-firewall-policies associations create --firewall-policy consumer-vpc-policy --network consumer-vpc --name network-consumer-vpc --global-firewall-policy gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy consumer-vpc-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22 --global-firewall-policy
コンシューマー ネットワークに必要なのは、IAP からの SSH アクセスのみです。
11. VM と PSC エンドポイントを作成して接続をテストする
この時点で、3 つの Cloud Shell ウィンドウが開いているはずです。portmap-vm1 とのセッションが開いている必要があります。1 つは portmap-vm2 とのオープン セッションで、もう 1 つは作業セッションである必要があります。
テスト VM を作成する
Cloud Shell から
gcloud compute instances create consumer-client-vm --zone $zone --subnet=consumer-client-subnet --no-address
PSC エンドポイントを作成する
Cloud Shell から
gcloud compute addresses create psc-endpoint-ip --region=$region --subnet=consumer-client-subnet --addresses 10.0.0.10 gcloud compute forwarding-rules create psc-portmap-endpoint --region=$region --network=consumer-vpc --address=psc-endpoint-ip --target-service-attachment=[SERVICE ATTACHMENT URI]
接続をテストする
Cloud Shell から
gcloud compute ssh --zone $zone "consumer-client-vm" --tunnel-through-iap --project $project curl 10.0.0.10:1001
想定される出力
portmap-vm1 1000
Cloud Shell から
curl 10.0.0.10:1002
想定される出力
portmap-vm1 2000
Cloud Shell から
curl 10.0.0.10:1003
想定される出力
portmap-vm2 1000
Cloud Shell から
curl 10.0.0.10:1004
想定される出力
portmap-vm2 2000
12. クリーンアップ手順
VM インスタンスを終了する(すべてのウィンドウ)
exit
単一の Cloud Shell ターミナルからラボ コンポーネントを削除する
gcloud compute forwarding-rules delete psc-portmap-endpoint --region=$region -q gcloud compute addresses delete psc-endpoint-ip --region=$region -q gcloud compute instances delete consumer-client-vm --zone=$zone -q gcloud compute network-firewall-policies rules delete 1000 --firewall-policy=consumer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies associations delete --firewall-policy=consumer-vpc-policy --name=network-consumer-vpc --global-firewall-policy -q gcloud compute network-firewall-policies delete consumer-vpc-policy --global -q gcloud compute networks subnets delete consumer-client-subnet --region=$region -q gcloud compute networks delete consumer-vpc -q gcloud compute service-attachments delete portmap-service-attachment --region=$region -q gcloud compute forwarding-rules delete portmap-fr --region=$region -q gcloud compute backend-services delete portmap-bes --region=$region -q gcloud compute network-endpoint-groups delete portmap-neg --region=$region -q gcloud compute instances delete test-client-vm --zone=$zone -q gcloud compute instances delete portmap-vm2 --zone=$zone -q gcloud compute instances delete portmap-vm1 --zone=$zone -q gcloud compute network-firewall-policies rules delete 2001 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies rules delete 2000 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies rules delete 1000 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies associations delete --firewall-policy=producer-vpc-policy --name=network-producer-vpc --global-firewall-policy -q gcloud compute network-firewall-policies delete producer-vpc-policy --global -q gcloud compute networks subnets delete psc-nat-subnet --region $region -q gcloud compute networks subnets delete producer-service-subnet --region $region -q gcloud compute networks delete producer-vpc -q
13. 完了
以上で、この Codelab は完了です。
学習した内容
- Private Service Connect ポート マッピングのユースケース
- PSC ポート マッピングの主なメリット
- ネットワークの要件
- ポート マッピングを使用して Private Service Connect プロデューサー サービスを作成します。
- Private Service Connect エンドポイントを作成する
- Private Service Connect エンドポイントを介してプロデューサー サービスを呼び出す