1. 簡介
Private Service Connect 可讓服務供應商從一個虛擬私有雲網路,將服務私密地公開至另一個虛擬私有雲網路。使用者可以透過 PSC 端點或 PSC 後端存取供應商服務。
本程式碼研究室著重於 PSC 後端。PSC 後端會與 Google Cloud 代理負載平衡器 (應用程式或網路) 搭配使用。使用 PSC 後端可提供更精細的消費者端控制項,例如:
- 更深入的觀測能力和記錄
- Cloud Armor 整合
- 自訂網址
- 進階流量管理
- 自訂 TLS 憑證
在本程式碼研究室中,您將瞭解如何使用全球外部應用程式負載平衡器建立 Private Service Connect 後端,以私密方式存取其他網路中的供應者服務。
課程內容
- 建立並設定與全域外部應用程式負載平衡器相關聯的 PSC 後端
- 設定 Apache 代管的網路服務,並透過服務附件將其公開為 PSC 服務
- 建立 SSL 憑證,在內部和外部應用程式負載平衡器上終止 SSL
- 設定 Cloud DNS 公開可用區,以便存取 PSC 服務
軟硬體需求
- 具備擁有者權限的 Google Cloud 專案
2. 測試環境
您建立的環境將包含用戶虛擬私有雲和供應商虛擬私有雲。在 Producer VPC 中,您將從建構開放原始碼 Apache 網路服務的執行個體範本,部署代管執行個體群組。您也需要部署測試 VM,確保服務的本機功能正常運作。您將透過服務連結,將 Apache 服務公開為 PSC 供應工具服務。
在消費者 VPC 中,您會部署全域外部應用程式負載平衡器,並使用 PSC 後端服務指向 Apache 服務。接著,您將設定公開 DNS 區域,以便在公開網際網路上存取 PSC 服務。
3. 設定和需求
自助式環境設定
- 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請務必建立帳戶。
- 「專案名稱」是這個專案參與者的顯示名稱。這是 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 中運作,可大幅提升網路效能和驗證功能。您可以在瀏覽器中完成本程式碼研究室的所有工作。您不需要安裝任何東西。
4. 事前準備
啟用 API
在 Cloud Shell 中,確認專案 ID 已設定
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] export project=YOUR-PROJECT-NAME export region=us-central1 echo $project echo $region
啟用所有必要的服務
gcloud services enable compute.googleapis.com gcloud services enable servicedirectory.googleapis.com gcloud services enable dns.googleapis.com
5. 供應商虛擬私有雲設定
建立虛擬私有雲網路
透過 Cloud Shell
gcloud compute networks create producer-vpc --subnet-mode custom
建立子網路
系統會在 producer-vpc 中部署兩個一般用途子網路。服務子網路將用於部署 Apache 網路服務 VM 和負載平衡器轉送規則。test-client-subnet 會位於不同的區域,並用於部署 VM,以便測試啟用全球存取權的 Apache 服務。
透過 Cloud Shell
gcloud compute networks subnets create service-subnet \ --network=producer-vpc \ --range=10.0.0.0/28 \ --region=$region
透過 Cloud Shell
gcloud compute networks subnets create test-client-subnet \ --network=producer-vpc \ --range=10.0.1.0/28 \ --region=us-east4
我們也必須部署 Proxy 專用子網路,才能與區域性內部應用程式負載平衡器搭配使用。
透過 Cloud Shell
gcloud compute networks subnets create central-proxy-subnet \ --network=producer-vpc \ --range=10.100.101.0/24 \ --region=$region \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE
部署 PSC 服務時,每個獨特服務都需要對應的 PSC NAT 子網路,才能與服務附件建立關聯。這個子網路的大小應視預期連線端點數量而定。
透過 Cloud Shell
gcloud compute networks subnets create psc-nat-subnet \ --network=producer-vpc \ --region=$region \ --range=10.100.100.0/24 \ --purpose=PRIVATE_SERVICE_CONNECT
建立 Cloud NAT
您必須使用 Cloud NAT,才能為我們的內容供應者服務安裝適當的套件。
透過 Cloud Shell
gcloud compute routers create central-cr \ --network=producer-vpc \ --region=$region
透過 Cloud Shell
gcloud compute routers nats create central-nat \ --router=central-cr \ --region=$region \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips
建立網路防火牆政策和規則
透過 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
您需要另外設定兩個防火牆規則,允許負載平衡器後端從負載平衡器 Proxy 專用子網路 (2000) 傳入流量,以及允許負載平衡器在後端執行個體 (2001) 上執行健康狀態檢查的規則。
透過 Cloud Shell
gcloud compute network-firewall-policies rules create 2000 \ --action ALLOW \ --firewall-policy producer-vpc-policy \ --description "allow traffic from load balancer proxy subnet" \ --direction INGRESS \ --src-ip-ranges 10.100.101.0/24 \ --layer4-configs tcp:443 \ --global-firewall-policy gcloud compute network-firewall-policies rules create 2001 \ --action ALLOW \ --firewall-policy producer-vpc-policy \ --description "allow load balancer health checks" \ --direction INGRESS \ --src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \ --layer4-configs tcp:443 \ --global-firewall-policy
6. 建立 Apache 網路服務
我們將建立簡易的 Apache Web 服務,顯示「PSC Service」。
建立執行個體範本
透過 Cloud Shell
gcloud compute instance-templates create apache-service-template \ --network producer-vpc \ --subnet service-subnet \ --region $region \ --no-address \ --metadata startup-script='#! /bin/bash sudo apt-get update apt-get install apache2 -y a2enmod ssl sudo a2ensite default-ssl echo "PSC Service" | \ tee /var/www/html/index.html systemctl restart apache2'
為 MIG 建立健康狀態檢查
透過 Cloud Shell
gcloud compute health-checks create https service-mig-healthcheck \ --port=443 \ --global
建立代管執行個體群組
透過 Cloud Shell
gcloud compute instance-groups managed create psc-service-mig \ --region $region \ --size=2 \ --template=apache-service-template \ --health-check=service-mig-healthcheck gcloud compute instance-groups managed set-named-ports psc-service-mig \ --named-ports=https:443 \ --region=$region
7. 建立自行簽署的憑證
請按照這篇文章中的步驟完成第 1 步,建立自行簽署的憑證。您可以在 Cloud Shell 中執行所有指令。完成步驟 1 後,請返回這個頁面。您的通用名稱必須設定為 example.com。
建立憑證資源,以便與負載平衡器建立關聯。請將憑證和私密金鑰參數替換為特定檔案名稱。
透過 Cloud Shell
gcloud compute ssl-certificates create producer-service-cert \ --certificate=<your-producer-certfile.cert> \ --private-key=<your-producer-keyfile.pem> \ --region=$region
8. 建立內部區域性應用程式負載平衡器
接下來,我們會為服務建立負載平衡器元件。我們使用內部區域應用程式負載平衡器,但您可以選擇使用任何 Google Cloud 內部負載平衡器。請按照負載平衡器的相關說明文件處理 TLS。
建立內部 IP 位址,用於負載平衡器的轉送規則,並記下稍後用於測試呼叫服務的 IP 位址。
透過 Cloud Shell
gcloud compute addresses create apache-service-ip \ --region=$region \ --subnet=service-subnet gcloud compute addresses describe apache-service-ip \ --format="get(address)" \ --region=$region
建立負載平衡器健康檢查。
透過 Cloud Shell
gcloud compute health-checks create https lb-apache-service-hc \ --region=$region \ --port-name=https
建立後端服務。
透過 Cloud Shell
gcloud compute backend-services create apache-bes\ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTPS \ --port-name=https \ --health-checks=lb-apache-service-hc \ --health-checks-region=$region \ --region=$region gcloud compute backend-services add-backend apache-bes \ --balancing-mode=UTILIZATION \ --instance-group=psc-service-mig \ --region=$region
建立網址對應。
透過 Cloud Shell
gcloud compute url-maps create producer-url-map \ --default-service=apache-bes \ --region=$region
建立目標 HTTPS Proxy。
透過 Cloud Shell
gcloud compute target-https-proxies create https-proxy \ --url-map=producer-url-map \ --region=$region \ --ssl-certificates=producer-service-cert
建立轉送規則。
透過 Cloud Shell
gcloud compute forwarding-rules create apache-fr \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=producer-vpc \ --subnet=service-subnet \ --address=apache-service-ip \ --ports=443 \ --region=$region \ --target-https-proxy=https-proxy \ --target-https-proxy-region=$region \ --allow-global-access
9. 建立測試 VM 並在本機測試服務
在建立服務附件之前,我們會在其他區域建立測試用戶端 VM,以測試負載平衡器是否已正確設定全域存取權和 TLS。
透過 Cloud Shell
gcloud compute instances create vm-client \ --zone=us-east4-a \ --subnet=test-client-subnet \ --no-address
請等待大約一分鐘,讓佈建作業完成,然後透過 SSH 連線至執行個體。
透過 Cloud Shell
gcloud compute ssh \ --zone "us-east4-a" "vm-client" \ --tunnel-through-iap \ --project $project
透過負載平衡器連線至 443,測試 Apache 服務。內部 IP 位址是指您先前保留並記下的位址。
curl https://example.com:443 -k --connect-to example.com:443:<YOUR-INTERNAL-IP>:443
預期結果
PSC Service
退出 VM。
從 vm-client
exit
10. 建立服務附件
在這個範例中,我們會設定服務附件,只允許來自這個專案的 PSC 連線。這項設定可接受一或多個特定專案或網路,但無法同時接受這兩者。我們已將連線數量上限設為 5 個連線。每個專案或聯播網都必須設定上限。
透過 Cloud Shell
gcloud compute service-attachments create apache-service-attachment \ --region=$region \ --producer-forwarding-rule=apache-fr \ --connection-preference=ACCEPT_MANUAL \ --consumer-accept-list=$project=5 \ --nat-subnets=psc-nat-subnet
請記下服務附件 URI (selfLink),因為您在下一個步驟的 PSC 後端設定中會用到這個值。您可以在 Cloud Shell 中執行下列指令來取得。
透過 Cloud Shell
gcloud compute service-attachments describe apache-service-attachment \ --region $region
複製從「projects」開始的 URI
範例:projects/$project/regions/$region/serviceAttachments/apache-service-attachment
11. 用戶虛擬私有雲設定
建立虛擬私有雲網路
透過 Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
建立子網路
在要部署 Private Service Connect 網路端點群組 (NEG) 的消費者端,必須有子網路。
透過 Cloud Shell
gcloud compute networks subnets create consumer-subnet \ --network=consumer-vpc \ --region=$region \ --range=10.0.0.0/28
12. 保留外部 IP 並建立消費者端自行簽署的憑證
外部 IP
建立稍後用於負載平衡器轉送規則的外部靜態 IP 位址,並在 Cloud Shell 變數中擷取 IP 位址。
透過 Cloud Shell
gcloud compute addresses create external-psc-ip \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global export externalip=$(gcloud compute addresses describe external-psc-ip \ --format="get(address)" \ --global) echo $externalip
消費者自行簽署的憑證
請再次按照這篇文章中的步驟 1 建立自行簽署的憑證。您可以在 Cloud Shell 中執行所有指令。完成步驟 1 後,請返回這個頁面。我們將使用名為 nip.io 的開放原始碼公開萬用字元 DNS 服務,而非擁有自己的公開 DNS 區域。PSC 服務的公開網址會使用您剛剛設定的外部 IP 位址。您的通用名稱必須與 <YOUR-EXTERNAL-IP.nip.io> 搭配使用
建立憑證資源,以便與外部負載平衡器建立關聯。請將憑證和私密金鑰參數替換為特定檔案名稱。
透過 Cloud Shell
gcloud compute ssl-certificates create consumer-service-cert \ --certificate=<your-consumer-certfile.cert> \ --private-key=<your-consumer-keyfile.pem> \ --global
13. 建立負載平衡器元件
我們將建立全域外部應用程式負載平衡器,並使用 PSC NEG 將其指向新建立的服務連結,做為後端服務。
請備妥上一個步驟中記下的服務附件 URI。將下方的 psc-target-service 替換為您的 URI。
透過 Cloud Shell
gcloud compute network-endpoint-groups create apache-psc-neg \ --network-endpoint-type=private-service-connect \ --psc-target-service=projects/$project/regions/$region/serviceAttachments/apache-service-attachment \ --region=$region \ --network=consumer-vpc \ --subnet=consumer-subnet
建立後端服務。
透過 Cloud Shell
gcloud compute backend-services create apache-pscneg-bes \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --global gcloud compute backend-services add-backend apache-pscneg-bes \ --network-endpoint-group=apache-psc-neg \ --network-endpoint-group-region=$region \ --global
建立網址對應
透過 Cloud Shell
gcloud compute url-maps create consumer-url-map \ --default-service=apache-pscneg-bes \ --global
建立目標 HTTPS Proxy。
透過 Cloud Shell
gcloud compute target-https-proxies create psc-https-proxy \ --url-map=consumer-url-map \ --ssl-certificates=consumer-service-cert
建立轉送規則
透過 Cloud Shell
gcloud compute forwarding-rules create external-fr \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=external-psc-ip \ --global \ --target-https-proxy=psc-https-proxy \ --ports=443
14. 建立公開 DNS 區域
透過 Cloud Shell
gcloud dns managed-zones create "psc-service" \ --dns-name=$externalip.nip.io. \ --description="public dns for psc service" \ --visibility=public
透過 Cloud Shell
gcloud dns record-sets transaction start \ --zone="psc-service" gcloud dns record-sets transaction add $externalip \ --name=$externalip.nip.io \ --ttl=300 \ --type=A \ --zone="psc-service" gcloud dns record-sets transaction execute \ --zone="psc-service"
15. 測試消費者 PSC 連線
請等待 7 到 10 分鐘,讓公開 DNS 傳播後再進行測試。
透過 Cloud Shell
curl https://$externalip.nip.io -k
您也可以在瀏覽器或電腦終端機中輸入 https://<YOUR-EXTERNAL-IP>.nip.io,透過瀏覽器進行測試。
預期結果
PSC Service
16. 清理步驟
從單一 Cloud Shell 終端機刪除實驗室元件
gcloud dns record-sets delete $externalip.nip.io --zone="psc-service" --type=A -q gcloud dns managed-zones delete "psc-service" -q gcloud compute forwarding-rules delete external-fr --global -q gcloud compute target-https-proxies delete psc-https-proxy -q gcloud compute url-maps delete consumer-url-map --global -q gcloud compute backend-services delete apache-pscneg-bes --global -q gcloud compute network-endpoint-groups delete apache-psc-neg --region=$region -q gcloud compute ssl-certificates delete consumer-service-cert --global -q gcloud compute addresses delete external-psc-ip --global -q gcloud compute networks subnets delete consumer-subnet --region $region -q gcloud compute networks delete consumer-vpc -q gcloud compute instances delete vm-client --zone=us-east4-a -q gcloud compute service-attachments delete apache-service-attachment --region $region -q gcloud compute forwarding-rules delete apache-fr --region $region -q gcloud compute target-https-proxies delete https-proxy --region $region -q gcloud compute url-maps delete producer-url-map --region $region -q gcloud compute backend-services delete apache-bes --region $region -q gcloud compute health-checks delete lb-apache-service-hc --region $region -q gcloud compute addresses delete apache-service-ip --region $region -q gcloud compute ssl-certificates delete producer-service-cert --region $region -q gcloud compute instance-groups managed delete psc-service-mig --region $region -q gcloud compute health-checks delete service-mig-healthcheck --global -q gcloud compute instance-templates delete apache-service-template -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 routers nats delete central-nat --router=central-cr --region $region -q gcloud compute routers delete central-cr --region $region -q gcloud compute networks subnets delete psc-nat-subnet --region $region -q gcloud compute networks subnets delete service-subnet --region $region -q gcloud compute networks subnets delete test-client-subnet --region us-east4 -q gcloud compute networks subnets delete central-proxy-subnet --region $region -q gcloud compute networks delete producer-vpc -q
17. 恭喜!
恭喜您完成程式碼研究室!
涵蓋內容
- 建立與全域外部應用程式負載平衡器相關聯的 PSC 後端設定
- 設定 Apache 代管的網路服務,並透過服務附件將其公開為 PSC 服務
- 建立 SSL 憑證,在內部和外部應用程式負載平衡器上終止 SSL
- 設定 Cloud DNS 公開可用區,以便存取 PSC 服務