1. 簡介
透過 Private Service Connect,服務供應商可以透過服務連結,在虛擬私有雲環境中公開服務,並允許其他虛擬私有雲環境中的使用者透過 Private Service Connect 端點存取這些服務。有時,這些生產端服務會設計為 VM 叢集,每個 VM 都會在相同的通訊埠編號上公開相同的服務。先前,這類服務設計需要在用戶端部署多個 Private Service Connect 端點,或是在供應端使用 IP 轉送功能,以確保指定正確的供應端 VM。
Private Service Connect 現在可以使用通訊埠對應功能,針對正確的目的端進行原生指定。在本實驗室中,您將瞭解需要這項功能的用途,以及如何將 Port Mapping 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 (網路端點群組)。
最常見的產生器類型,可從使用 Port Mapping 獲益,包括 NoSQL 資料庫產生器和 Kafka 產生器。不過,任何需要 VM 叢集在相同的連接埠上公開相同服務,且具有特定 VM 對應需求的內容供應者,都可以使用這項功能。
供應者定義用戶端通訊埠與供應者 VM + 目的地通訊埠之間的對應關係。接著,生產者需要將這項資訊提供給消費者。消費者會使用預先定義的通訊埠,以便唯一識別需要存取的產生者 VM 和目的地通訊埠。消費者使用的端口與生產者使用的端口不同。
PSC 通訊埠對應的主要優點
- 簡單:供應端會透過連接埠對應部署 PSC 元件,而用戶端會部署 PSC 端點。PSC 會自動處理網路位址轉譯。
- 省錢:不需要額外的 PSC 資源或生產者 VM CPU 週期。定價與其他類型的 PSC 部署相同
- 高效能:連接埠對應可提供與其他 PSC 模式相同的線路速率處理量和低延遲時間
- 可擴充且 IP 效率高:消費者 VPC 中的一個 IP 位址最多可存取 1000 個產生者 VM 和 1000 個通訊埠對應
3. 網路需求
- 使用通訊埠對應功能時,必須使用內部網路直通式負載平衡器做為產生者負載平衡器。
- 只有 PSC 端點可搭配通訊埠對應功能使用 (PSC 後端或 PSC 介面不適用)。
- 通訊埠對應 NEG 是區域性結構。
- 通訊埠對應 NEG 只能用於 PSC 連線。如果用戶端 VM 直接呼叫產生者負載平衡器轉送規則,這些規則就無法運作。這一點反映在本程式碼研究室中測試內容供應者服務的方式。
- PSC 端點和供應者服務堆疊必須位於不同的 VPC。
4. 程式碼研究室拓樸圖
在生產端虛擬私有雲中,系統會建立兩個 VM,每個 VM 都會執行兩個網路伺服器,一個在 1000 號通道上執行,另一個在 2000 號通道上執行。我們會先測試各項服務,再設定 Portmap NEG、內部網路直通式負載平衡器和服務附件。
在消費者虛擬私有雲網路中,我們會設定 PSC 端點,並測試從用戶端 VM 連線至供應商服務。
5. 設定和需求
自助式環境設定
- 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請務必建立帳戶。
- 「Project name」是這個專案參與者的顯示名稱。這是 Google API 不會使用的字元字串。您隨時可以更新。
- 專案 ID 在所有 Google Cloud 專案中都是不重複的值,且無法變更 (設定後即無法變更)。Cloud 控制台會自動產生專屬字串,您通常不需要特別在意。在大多數程式碼研究室中,您都需要參照專案 ID (通常會以
PROJECT_ID
表示)。如果您不喜歡系統產生的 ID,可以隨機產生另一個 ID。或者,您也可以自行嘗試,看看是否可用。在這個步驟完成後就無法變更,且會在整個專案期間維持不變。 - 提醒您,有些 API 會使用第三個值,也就是「專案編號」。如要進一步瞭解這三個值,請參閱說明文件。
- 接下來,您需要在 Cloud 控制台中啟用帳單功能,才能使用 Cloud 資源/API。執行這個程式碼研究室不會產生太多費用,甚至可能完全不會產生費用。如要關閉資源,避免在本教學課程結束後繼續產生費用,您可以刪除建立的資源或專案。Google Cloud 新使用者可享有價值 $300 美元的免費試用期。
啟動 Cloud Shell
雖然 Google Cloud 可透過筆記型電腦遠端操作,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是在雲端運作的指令列環境。
在 Google Cloud 控制台中,按一下右上方工具列的 Cloud Shell 圖示:
佈建並連線至環境的作業需要一些時間才能完成。完成後,畫面應如下所示:
這個虛擬機器會載入您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,大幅提升網路效能和驗證功能。您可以在瀏覽器中完成本程式碼研究室的所有工作。您不需要安裝任何東西。
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. 建立供應商虛擬私有雲網路
虛擬私有雲網路
透過 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
在下一個章節中,我們會在每個 Producer 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 建立 Producer 服務
建立負載平衡器元件
透過 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. 建立用戶虛擬私有雲網路
虛擬私有雲網路
透過 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 端點及測試連線能力
此時應該會開啟三個 Cloud Shell 視窗。其中一個工作階段應與 portmap-vm1 建立連線。其中一個工作階段應使用 portmap-vm2,另一個則應為工作階段。
建立測試 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. 恭喜!
恭喜您完成程式碼研究室!
涵蓋內容
- Private Service Connect 連接埠對應用途
- PSC 連接埠對應的主要優點
- 網路需求
- 使用連接埠對應建立 Private Service Connect 供應端服務。
- 建立 Private Service Connect 端點
- 透過 Private Service Connect 端點向供應端服務發出呼叫