Private Service Connect:使用 Private Service Connect 透過 Cloud Run 發布及使用服務

程式碼研究室簡介
schedule61 分鐘
subject上次更新時間:2025年3月28日
account_circle作者:Lorin Price

Private Service Connect (PSC) 是 Google Cloud 網路的功能,可讓消費者從虛擬私有雲網路內,以私密方式存取代管服務。同樣地,這項功能也允許代管服務供應商在自己的獨立虛擬私有雲網路中代管這些服務,並為消費者提供私人連線。

Cloud Run 是代管運算平台,能讓您直接在 Google 可擴充的基礎架構上執行容器。

Cloud Run 可透過兩種方式做為 PSC 服務使用。

  1. 透過 Google API 的 PSC,透過 Cloud Run 提供的 run.app 網址呼叫 Cloud Run
  2. 透過自訂 PSC 供應者服務,在內部應用程式負載平衡器 (含無伺服器 NEG) 中,透過服務連結公開 Cloud Run。

本程式碼研究室將探討如何針對這兩種情況設定 Cloud Run 和 PSC

  • 在 Cloud Run 上部署基本應用程式
  • Cloud Run 輸入和輸出控制項
  • 透過內部應用程式負載平衡器和無伺服器 NEG 部署 Cloud Run
  • 透過服務連結設定 PSC 生產端服務
  • 部署 PSC 端點

軟硬體需求

  • 具備擁有者權限的 Google Cloud 專案

2. 程式碼研究室拓樸圖

455a040761a8fab9.png

在這個程式碼研究室中,您將部署兩項可透過 PSC 存取的 Cloud Run 服務,第一項是使用 PSC 發布的自訂服務,第二項是 Google API 的 PSC。您將建立兩個虛擬私有雲端網路:consumer-vpc 和 producer-vpc。您會先部署 Hello World Cloud Run 服務,並透過 producer-vpc 中的區域內部應用程式負載平衡器和無伺服器 NEG 存取該服務。您必須先驗證服務是否透過產生器用戶端透過負載平衡器運作,再設定 Cloud Run 服務,以便透過服務附件做為 PSC 產生器服務存取。

接著,您會在 consumer-vpc 中部署 PSC 端點,指向我們在 producer-vpc 中設定的 Cloud Run 服務連結。接著,您將驗證是否能透過 PSC 從消費者 VPC 中的消費者端存取服務。接下來,您將建立另一個會呼叫 PSC 端點的 Cloud Run 服務。最後,您將為 Google API 部署 PSC 端點。您將透過消費者端用戶端存取 Cloud Run,這會使用 Google API 的 PSC 端點。

3. 設定和需求

自助式環境設定

  1. 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請務必建立帳戶

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 「專案名稱」是這個專案參與者的顯示名稱。這是 Google API 不會使用的字元字串。您隨時可以更新。
  • 專案 ID 在所有 Google Cloud 專案中都是不重複的值,且無法變更 (設定後即無法變更)。Cloud 控制台會自動產生專屬字串,您通常不需要特別在意。在大多數程式碼研究室中,您都需要參照專案 ID (通常會以 PROJECT_ID 表示)。如果您不喜歡系統產生的 ID,可以隨機產生另一個 ID。或者,您也可以自行嘗試,看看是否可用。在這個步驟完成後就無法變更,且會在專案期間維持不變。
  • 提醒您,有些 API 會使用第三個值「專案編號」。如要進一步瞭解這三個值,請參閱說明文件
  1. 接下來,您需要在 Cloud 控制台中啟用帳單功能,才能使用 Cloud 資源/API。執行這個程式碼研究室不會產生太多費用,甚至可能完全不產生費用。如要關閉資源,避免在本教學課程結束後繼續產生費用,您可以刪除建立的資源或專案。Google Cloud 新使用者可享有價值 $300 美元的免費試用期

啟動 Cloud Shell

雖然 Google Cloud 可透過筆記型電腦遠端操作,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是在雲端運作的指令列環境。

Google Cloud 控制台中,按一下右上方工具列的 Cloud Shell 圖示:

55efc1aaa7a4d3ad.png

佈建並連線至環境的作業需要一些時間才能完成。完成後,畫面應如下所示:

7ffe5cbb04455448.png

這個虛擬機器會載入您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,可大幅提升網路效能和驗證功能。您可以在瀏覽器中完成本程式碼研究室的所有工作。您不需要安裝任何東西。

4. 事前準備

啟用 API

在 Cloud Shell 中,確認專案已設定並設定變數。

gcloud auth login
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
export projectid=[YOUR-PROJECT-ID]
export projectnum=[YOUR-PROJECT-NUM]
export region=us-central1
export zone=us-central1-a
echo $projectid
echo $projectnum
echo $region
echo $zone

啟用所有必要的服務

gcloud services enable compute.googleapis.com
gcloud services enable run.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable dns.googleapis.com
gcloud services enable cloudbuild.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com

5. 建立供應商虛擬私有雲網路

虛擬私有雲網路

透過 Cloud Shell

gcloud compute networks create producer-vpc --subnet-mode custom

建立子網路

透過 Cloud Shell

gcloud compute networks subnets create producer-subnet \
    --network=producer-vpc \
    --range=10.0.0.0/28 \
    --region=$region

gcloud compute networks subnets create lb-proxy-subnet \
    --network=producer-vpc \
    --range=10.100.100.0/24 \
    --region=$region \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE

gcloud compute networks subnets create psc-nat-subnet \
    --network=producer-vpc \
    --region=$region \
    --range=10.100.101.0/24 \
    --purpose=PRIVATE_SERVICE_CONNECT

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

6. 建立 Hello World Cloud Run

請按照這裡的說明,使用 Python 編寫應用程式範例。請在 Cloud Shell 中執行下列指令。完成「編寫範例應用程式」中的步驟 3 後,請返回本程式碼研究室,並按照下方說明,從原始碼部署至 Cloud Run。

在部署 Cloud Run 服務前,請執行下列指令,確認預設的 Compute 服務帳戶具備適當權限。

透過 Cloud Shell

gcloud projects add-iam-policy-binding $projectid --member=serviceAccount:$projectnum-compute@developer.gserviceaccount.com --role=roles/run.builder

注意:本程式碼研究室假設貴機構未啟用「網域限定共用」組織政策。如果您已啟用這項政策,就必須執行額外步驟,才能部署有驗證機制的 Cloud Run、設定 OAuth 同意畫面,以及為負載平衡器後端設定 IAP。建議您在正式環境中執行所有這些設定步驟。

透過 Cloud Shell

gcloud beta run deploy helloworld \
    --source . \
    --platform=managed \
    --ingress=internal \
    --allow-unauthenticated \
    --no-default-url \
    --region=$region

使用 --no-default-url 標記時,系統會在未提供 run.app 網址的情況下部署 Cloud Run 服務。我們不會使用這項服務的網址。截至本程式碼研究室發布時,這項功能仍處於預先發布版階段。

繼續操作前,請先切換回 Cloud Shell 的主目錄。

透過 Cloud Shell

cd ..

7. 透過內部應用程式負載平衡器公開 Hello World Cloud Run

為負載平衡器轉送規則保留靜態內部 IP 位址。

在 Cloud Shell 中

gcloud compute addresses create cloudrun-ip \
 --region=$region \
 --subnet=producer-subnet

gcloud compute addresses describe cloudrun-ip --region=$region

輸出內容範例

address: 10.0.1.31
addressType: INTERNAL
creationTimestamp: '2025-03-17T09:04:06.620-07:00'
description: ''
id: 'xxxx'
kind: compute#address
labelFingerprint: xxxx
name: cloudrun-ip
networkTier: PREMIUM
purpose: GCE_ENDPOINT
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/addresses/cloudrun-ip
status: RESERVED
subnetwork: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/producer-subnet

請記下剛剛建立的 IP 位址。

建立區域性內部應用程式負載平衡器

在 Cloud Shell 中

gcloud compute network-endpoint-groups create cloudrun-producer-neg \
    --region=$region \
    --network-endpoint-type=serverless \
    --cloud-run-service=helloworld

gcloud compute backend-services create cloudrun-producer-bes \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --protocol=HTTP \
    --region=$region

gcloud compute backend-services add-backend cloudrun-producer-bes \
        --region=$region \
        --network-endpoint-group=cloudrun-producer-neg \
        --network-endpoint-group-region=$region

gcloud compute url-maps create producer-urlmap \
        --default-service=cloudrun-producer-bes \
        --region=$region

gcloud compute target-http-proxies create producer-http-proxy \
        --url-map=producer-urlmap \
        --region=$region

在 Cloud Shell 中

gcloud compute forwarding-rules create cloudrun-fr \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=producer-vpc \
        --subnet=producer-subnet \
        --address=cloudrun-ip \
        --target-http-proxy=producer-http-proxy \
        --target-http-proxy-region=$region \
        --region=$region \
        --ports=80 \
        --allow-global-access

8. 測試透過負載平衡器公開的 Hello World Cloud Run

建立測試 VM

透過 Cloud Shell

gcloud compute instances create producer-client \
    --zone=$zone \
    --subnet=producer-subnet \
    --no-address \
    --scopes=cloud-platform

在 Cloud Shell 中

gcloud compute ssh \
    --zone "$zone" "producer-client" \
    --tunnel-through-iap \
    --project $projectid

將 <loadbalancer-ip> 替換為您先前建立的 IP 位址 (例如 10.0.0.2)。

測試 Hello World

在 producer-vm 中

curl <loadbalancer-ip>

預期輸出

Hello World!

退出 VM。

在 producer-vm 中

exit

9. 建立服務附件

透過 Cloud Shell

gcloud compute service-attachments create cloudrun-attachment \
    --region=$region \
    --producer-forwarding-rule=cloudrun-fr \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=$projectid=5 \
    --nat-subnets=psc-nat-subnet

接著,請擷取並記下服務連結 URI,以便在消費者環境中設定 PSC 端點。

在 Cloud Shell 中

gcloud compute service-attachments describe cloudrun-attachment --region=$region

預期輸出內容範例

connectionPreference: ACCEPT_MANUAL
consumerAcceptLists:
- connectionLimit: 5
  projectIdOrNum: $projectid
creationTimestamp: '2025-03-10T08:49:08.134-07:00'
description: ''
enableProxyProtocol: false
fingerprint: -F0Kpe3Fi8o=
id: '2679595584727463707'
kind: compute#serviceAttachment
name: cloudrun-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: 'xxxxx'
  low: 'xxxx'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/serviceAttachments/cloudrun-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$projectid/forwardingRules/cloudrun-fr

10. 建立用戶虛擬私有雲網路

虛擬私有雲網路

透過 Cloud Shell

gcloud compute networks create consumer-vpc --subnet-mode custom

建立子網路

透過 Cloud Shell

gcloud compute networks subnets create consumer-subnet \
    --network=consumer-vpc \
    --range=10.0.0.0/24 \
    --region=$region \
    --enable-private-ip-google-access

gcloud compute networks subnets create cloudrun-egress \
    --network=consumer-vpc \
    --range=10.0.1.0/24 \
    --region=$region \
    --enable-private-ip-google-access

建立 Cloud NAT

透過 Cloud Shell

gcloud compute routers create central-cr \
    --network=consumer-vpc \
    --region=$region

gcloud compute routers nats create central-nat \
    --router=central-cr \
    --region=$region \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

建立消費者網路防火牆政策和防火牆規則

我們會為 consumer-vpc 建立另一個網路防火牆政策。

透過 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

11. 為 Hello World Cloud Run 服務建立 PSC 端點

此時,我們會建立 PSC 端點,並將其連結至您透過服務連結公開的 Cloud Run 服務。您將使用先前在本節中記下的服務附件 URI。確認 gcloud 指令中的 URI 格式與您的 URI 相符。

建立 PSC 端點

透過 Cloud Shell

gcloud compute addresses create cloudrun-service-ip --region=$region --subnet=consumer-subnet --ip-version=IPV4


gcloud compute forwarding-rules create cloudrun-ep --region=$region --network=consumer-vpc --address=cloudrun-service-ip --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/cloudrun-attachment

取得您剛建立的 PSC 端點的 IP 位址。您會在下一個步驟中使用 IP 位址測試端點。

透過 Cloud Shell

gcloud compute addresses list --filter="name=cloudrun-service-ip"

預期輸出內容範例

NAME: cloudrun-service-ip
ADDRESS/RANGE: 10.0.0.2
TYPE: INTERNAL
PURPOSE: GCE_ENDPOINT
NETWORK: 
REGION: us-central1
SUBNET: consumer-subnet
STATUS: IN_USE

12. 建立消費者用戶端 VM 並測試連線至端點

建立消費者用戶端 VM

透過 Cloud Shell

gcloud compute instances create consumer-client \
    --zone=$zone \
    --subnet=consumer-subnet \
    --no-address \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install dnsutils -y'

測試連線能力

透過 Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

請將 <cloudrun-service-ip> 替換為實際的 IP 位址。

從消費者用戶端 VM

curl <cloudrun-service-ip>

預期輸出

Hello World!

從消費者用戶端 VM

exit

13. 建立 Cloud Run 迴圈服務

接下來,我們將建立 Cloud Run 服務,以便將私人回呼傳送至 consumer-vpc,呼叫我們先前透過 PSC 公開的 Cloud Run HelloWorld 服務。

請按照這裡的「編寫範例應用程式」指示,在 PHP 中編寫迴圈應用程式。請將目錄命名為 cloudrun-loop,而非 helloworld-php。請在 Cloud Shell 中執行下列指令。在步驟 2 中,請在 index.php 檔案中使用以下 PHP 程式碼。準備好部署至 Cloud Run 時,請返回程式碼實驗室。請勿按照說明文件中的指示操作。

請在 index.php 檔案中使用以下程式碼。將 <cloudrun-service-ip> 替換為您在上一個步驟中測試的 PSC 端點 IP 位址。

透過 Cloud Shell

<?php 

if(!function_exists('curl_init')) {
    die('cURL not available!');
}

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://<cloudrun-service-ip>/');
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$output = curl_exec($curl);
if ($output === FALSE) {
    echo 'An error has occurred: ' . curl_error($curl) . PHP_EOL;
}
else {
    echo $output;
}
?>

我們會在這個 Cloud Run 部署中指定網路和子網路,因為 Cloud Run 流量需要輸出至 VPC,才能存取 PSC 端點。我們會指示 Cloud Run 使用 cloudrun-egress 子網路來處理直接虛擬私有雲輸出。我們會將所有流量導向至透過直接虛擬私有雲輸出子網路返回虛擬私有雲。

透過 Cloud Shell

gcloud run deploy cloudrun-loop \
    --source . \
    --platform=managed \
    --ingress=internal \
    --allow-unauthenticated  \
    --vpc-egress=all-traffic \
    --network=consumer-vpc \
    --subnet=cloudrun-egress \
    --region=$region

Cloud Run 服務部署完成後,系統會提供格式為 https://cloudrun-loop-<projectnum>.<region>.run.app 的服務網址。請記下這個網址,並在下一個步驟中進行測試。

14. 透過 Cloud Run URL 測試連線至 CloudRun-Loop

透過 Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

將 <Cloud-Run-ServiceURL> 替換成您在上一個步驟中記下的服務網址。

從消費者用戶端 VM

curl <Cloud-Run-ServiceURL>

預期輸出

Hello World!

這項結果顯示,CloudRun-Loop 服務已成功回呼至 consumer-vpc,以呼叫與 Hello World Cloud Run 服務連結的 PSC 端點。不過,此時消費者端 VM 會透過 Cloud NAT 傳出至網際網路,以呼叫公開的 Cloud Run URL。我們可以對網址執行 dig 作業,證明該網址會解析為公開 IP 位址。

從消費者用戶端 VM

dig <Cloud-Run-ServiceURL>

輸出內容範例

; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> https://cloudrun-loop-<projectnum>.<region>.run.app
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1938
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;https://cloudrun-loop-<projectnum>.<region>.run.app.        IN A

;; ANSWER SECTION:
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.38.53
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.36.53
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.32.53
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.34.53

;; Query time: 4 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Tue Mar 11 19:05:36 UTC 2025
;; MSG SIZE  rcvd: 147

我們可以為 Google API 端點建立 PSC,將解析結果變更為私人,避免流量透過公開網際網路傳送。

從消費者用戶端 VM

exit

15. 為 Google API 端點建立 PSC

這個 PSC 端點與先前建立的端點不同。Google API 專用的 PSC 會指向一組 Google API (所有 API 或與 VPC-SC 相容的 API)。IP 位址並非來自區域子網路,而是以單一 /32 IP 位址的形式建立,且為全球性 IP 位址,因此不會與任何現有的虛擬私有雲子網路、對等虛擬私有雲子網路或混合路徑重疊。

透過 Cloud Shell

export pscgoogip=100.100.100.100

echo $pscgoogip

gcloud compute addresses create psc-goog-ep-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=$pscgoogip \
    --network=consumer-vpc

透過 Cloud Shell

gcloud compute forwarding-rules create psc4googapi \
    --global \
    --network=consumer-vpc \
    --address=psc-goog-ep-ip \
    --target-google-apis-bundle=all-apis

16. 為 run.app 建立 Cloud DNS 私人區域

建立 Google API 端點的 PSC 時,系統會為所有屬於 googleapis.com 網域的 API 建立 Cloud Run 私人 DNS 區域。由於 Cloud Run 使用 run.app,我們需要建立另一個私人區域,將 run.app 對應至 Google API 的 PSC 端點。

透過 Cloud Shell

gcloud dns managed-zones create "cloudrun" \
    --dns-name=run.app \
    --description="run.app psc resolution" \
    --visibility=private \
    --networks=consumer-vpc

gcloud dns record-sets transaction start \
   --zone="cloudrun"

gcloud dns record-sets transaction add $pscgoogip \
   --name=*.run.app \
   --ttl=300 \
   --type=A \
   --zone="cloudrun"

gcloud dns record-sets transaction execute \
   --zone="cloudrun"

17. 測試私人 DNS 解析

我們將重新登入消費者用戶端 VM,並再次執行 dig,現在應該會看到 Cloud Run 網址會解析為 Google API 的 PSC 端點。

透過 Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

首先,我們要清除 DNS 快取。將 <Cloud-Run-ServiceURL> 替換成您先前記下的服務網址。

從消費者用戶端 VM

sudo resolvectl flush-caches

curl <CloudRun-Loop-ServiceURL>

curl 應仍可正常運作。

從消費者用戶端 VM

curl <CloudRun-Loop-ServiceURL>

預期輸出

Hello World!

從消費者用戶端 VM

dig <CloudRun-Loop-ServiceURL>

dig 應顯示 Cloud Run Loop 服務現在會解析為 Google API 端點的 PSC。

輸出內容範例

; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> https://cloudrun-loop-<projectnum>.<region>.run.app
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30179
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;https://cloudrun-loop-<projectnum>.<region>.run.app.        IN A

;; ANSWER SECTION:
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 100.100.100.100

;; Query time: 8 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Tue Mar 11 20:04:05 UTC 2025
;; MSG SIZE  rcvd: 99

成功!

18. 清理步驟

退出 VM 執行個體

exit

透過 Cloud Shell

gcloud dns record-sets delete *.run.app --zone="cloudrun" --type=A -q

gcloud dns managed-zones delete "cloudrun" -q

gcloud compute instances delete consumer-client --zone=$zone --project=$projectid -q

gcloud compute forwarding-rules delete psc4googapi --global -q

gcloud compute addresses delete psc-goog-ep-ip --global -q

gcloud run services delete cloudrun-loop --region=$region -q 

gcloud artifacts docker images delete $region-docker.pkg.dev/$projectid/cloud-run-source-deploy/cloudrun-loop -q

gcloud compute forwarding-rules delete cloudrun-ep --region=$region -q

gcloud compute addresses delete cloudrun-service-ip --region=$region -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 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 consumer-subnet --region $region -q

執行下兩個指令時,可能會出現「resource in use」錯誤。Cloud Run 說明文件指出,Cloud Run 服務刪除後,Cloud Run 有時需要 1 到 2 小時才能釋放子網路資源。如果刪除作業失敗,請略過這兩個指令,繼續執行下一個部分,然後過一段時間再返回本節刪除。

透過 Cloud Shell

gcloud compute networks subnets delete cloudrun-egress --region $region -q

gcloud compute networks delete consumer-vpc -q

透過 Cloud Shell

gcloud compute service-attachments delete cloudrun-attachment --region=$region -q

gcloud compute instances delete producer-client --zone=$zone --project=$projectid -q

gcloud compute forwarding-rules delete cloudrun-fr --region=$region -q

gcloud compute target-http-proxies delete producer-http-proxy --region=$region -q

gcloud compute url-maps delete producer-urlmap --region=$region -q

gcloud compute backend-services delete cloudrun-producer-bes --region=$region -q

gcloud compute network-endpoint-groups delete cloudrun-producer-neg --region=$region -q

gcloud compute addresses delete cloudrun-ip --region=$region -q

gcloud run services delete helloworld --region=$region -q 

gcloud artifacts docker images delete $region-docker.pkg.dev/$projectid/cloud-run-source-deploy/helloworld -q

gcloud artifacts repositories delete cloud-run-source-deploy --location=$region -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 lb-proxy-subnet --region $region -q

gcloud compute networks subnets delete psc-nat-subnet --region $region -q

gcloud compute networks subnets delete producer-subnet --region $region -q

gcloud compute networks delete producer-vpc -q

19. 恭喜!

恭喜您完成程式碼研究室!

涵蓋內容

  • 在 Cloud Run 上部署基本應用程式
  • Cloud Run 輸入和輸出控制項
  • 透過內部應用程式負載平衡器和無伺服器 NEG 部署 Cloud Run
  • 透過服務連結設定 PSC 生產端服務
  • 部署 PSC 端點