Private Service Connect:使用 Private Service Connect 通过 Cloud Run 发布和使用服务

1. 简介

Private Service Connect (PSC) 是 Google Cloud 网络的一项功能,允许使用方从其 VPC 网络内部以私密方式访问托管式服务。同样,它允许托管式服务提供方在其各自的 VPC 网络中托管这些服务,并为其使用方提供专用连接。

Cloud Run 是一个代管式计算平台,可让您直接在 Google 可伸缩的基础架构之上运行容器。

Cloud Run 可通过两种不同的方式作为 PSC 服务使用。

  1. 通过 PSC for Google API(通过 Cloud Run 提供的 run.app 网址调用 Cloud Run)
  2. 通过自定义 PSC 生产者服务,其中 Cloud Run 通过服务连接公开,并通过具有无服务器 NEG 的内部应用负载平衡器进行转发。

此 Codelab 将探索如何针对这两种场景使用 PSC 设置 Cloud Run

学习内容

  • 在 Cloud Run 上部署基本应用
  • Cloud Run 入站流量和出站流量控制
  • 通过具有无服务器 NEG 的内部应用负载平衡器部署 Cloud Run
  • 通过服务连接设置 PSC 提供方服务
  • 部署 PSC 端点

所需条件

  • 具有所有者权限的 Google Cloud 项目

2. Codelab 拓扑

455a040761a8fab9.png

在本 Codelab 中,您将部署两个可通过 PSC 访问的 Cloud Run 服务:第一个是使用 PSC 的自定义发布服务,第二个是 PSC for Google API。您将创建两个 VPC,一个是 consumer-vpc,另一个是 producer-vpc。您将首先部署 Hello World Cloud Run 服务,并使其可通过生产者 VPC 中的区域级内部应用负载平衡器和无服务器 NEG 访问。您将先验证服务是否通过生产方客户端通过负载平衡器正常运行,然后再将 Cloud Run 服务设置为可通过服务连接作为 PSC 生产方服务访问。

接下来,在 consumer-vpc 中,您将部署一个指向我们在 provider-vpc 中设置的 Cloud Run 服务连接的 PSC 端点。然后,您将验证是否可以通过 PSC 从使用方 VPC 中的使用方客户端访问该服务。接下来,您将创建另一个用于调用 PSC 端点的 Cloud Run 服务。最后,您将为 Google API 部署 PSC 端点。从使用方客户端,您将通过 Cloud Run 提供的网址访问 Cloud Run,该网址将使用 PSC for Google API 端点。

3. 设置和要求

自定进度的环境设置

  1. 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
  • 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用 PROJECT_ID 标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。
  • 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档
  1. 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。

启动 Cloud Shell

虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。

Google Cloud 控制台 中,点击右上角工具栏中的 Cloud Shell 图标:

55efc1aaa7a4d3ad.png

预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:

7ffe5cbb04455448.png

这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5 GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。您在此 Codelab 中的所有工作都可以在浏览器中完成。您无需安装任何程序。

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. 创建提供方 VPC 网络

VPC 网络

通过 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 连接到您的虚拟机实例,请创建一个防火墙规则,该规则:

  • 适用于您希望使用 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 步后,返回此 Codelab,然后按照以下说明通过源代码部署到 Cloud Run。

在部署 Cloud Run 服务之前,请运行以下命令,确保您的默认计算服务账号具有适当的权限。

通过 Cloud Shell

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

注意:本 Codelab 假定您的组织未启用“限制分享的网域”组织政策。如果您已启用此政策,则必须执行额外的步骤才能部署启用了身份验证的 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 标志将部署 Cloud Run 服务,而无需提供 run.app 网址。我们不会使用此服务的网址。在此 Codelab 发布时,此功能仍处于预览版阶段。

在继续操作之前,请改回 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

创建测试虚拟机

通过 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

在生产者虚拟机中

curl <loadbalancer-ip>

预期输出

Hello World!

退出虚拟机。

在生产者虚拟机中

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. 创建使用方 VPC 网络

VPC 网络

通过 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. 创建使用方客户端虚拟机并测试与端点的连接

创建使用方客户端虚拟机

通过 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 地址。

从使用方客户端虚拟机

curl <cloudrun-service-ip>

预期输出

Hello World!

从使用方客户端虚拟机

exit

13. 创建 Cloud Run Loop 服务

接下来,我们将创建一个 Cloud Run 服务,该服务将向 consumer-vpc 进行私有回调,以调用我们之前通过 PSC 公开的 Cloud Run HelloWorld 服务。

按照此处的“编写示例应用”说明,使用 PHP 编写循环应用。请将目录命名为 cloudrun-loop,而不是 helloworld-php。在 Cloud Shell 中运行以下命令。在第 2 步中,在 index.php 文件中使用以下 PHP 代码。当您准备好部署到 Cloud Run 时,请返回此 Codelab。请勿按照文档中的说明执行此步骤。

将此代码用于 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 子网进行直接 VPC 出站流量。我们将所有流量定向到通过直接 VPC 出站子网出站,然后再返回 VPC。

通过 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 网址测试与 CloudRun-Loop 的连接

通过 Cloud Shell

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

将 <Cloud-Run-Service网址> 替换为您在上一步中记下的服务网址。

从使用方客户端虚拟机

curl <Cloud-Run-ServiceURL>

预期输出

Hello World!

此结果表明,我们的 CloudRun-Loop 服务已成功回调到 consumer-vpc,以调用与 Hello World Cloud Run 服务关联的 PSC 端点。不过,此时,我们的消费者客户端虚拟机会通过 Cloud NAT 出站到互联网,以调用我们的公共 Cloud Run 网址。我们可以对该网址运行 dig 命令,以显示它会解析为公共 IP 地址。

从使用方客户端虚拟机

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,将此解析更改为私有,以防止流量进入公共互联网。

从使用方客户端虚拟机

exit

15. 为 Google API 端点创建 PSC

此 PSC 端点与我们之前创建的 PSC 端点不同。适用于 Google API 的 PSC 指向一组 Google API(所有 API 或 VPC-SC 兼容 API)。IP 地址并非来自区域性子网,而是作为单个 /32 IP 地址创建的,该地址是全球性的,不能与任何现有 VPC 子网、对等互连的 VPC 子网或混合路由重叠。

通过 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 专用 Service Connect 端点后,系统会为 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 解析

我们将重新登录使用方客户端虚拟机并再次运行 dig,现在我们应该会看到 Cloud Run 网址会解析为 Google API 的 PSC 端点。

通过 Cloud Shell

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

首先,我们将清除 DNS 缓存。将 <Cloud-Run-Service网址> 替换为您之前记下的服务网址。

从使用方客户端虚拟机

sudo resolvectl flush-caches

curl <CloudRun-Loop-ServiceURL>

curl 应该仍会像之前一样运行。

从使用方客户端虚拟机

curl <CloudRun-Loop-ServiceURL>

预期输出

Hello World!

从使用方客户端虚拟机

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. 清理步骤

退出虚拟机实例

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

运行接下来的两个命令可能会失败,并显示“资源正在使用”错误。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. 恭喜!

恭喜您完成此 Codelab。

所学内容

  • 在 Cloud Run 上部署基本应用
  • Cloud Run 入站流量和出站流量控制
  • 通过具有无服务器 NEG 的内部应用负载平衡器部署 Cloud Run
  • 通过服务连接设置 PSC 提供方服务
  • 部署 PSC 端点