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 つの VM が作成され、それぞれ 2 つのウェブサーバーを実行します。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 の Service サブネット内のすべてのトラフィックを許可します。このルールは、プロデューサー サービスが適切に動作していることをテストするために使用します。
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
portmap-vm1 セッションの Cloud Shell で
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
portmap-vm2 セッションの Cloud Shell で
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. Portmap 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 ウィンドウが開いているはずです。1 つは 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
1 つの 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 エンドポイントを介してプロデューサー サービスに呼び出しを行う