1. 概览
Cloud NAT 是一项强大的工具:借助它,Compute Engine 和 Google Kubernetes Engine (GKE) 工作负载可以以可扩缩且安全的方式访问互联网资源,而无需使用外部 IP 将其上运行的工作负载暴露给外部访问。
Cloud NAT 采用无代理设计,直接在 Andromeda SDN 层实现 NAT。因此,您的工作负载不会受到性能影响,并且可以轻松扩展到多个虚拟机、区域和 VPC。
NAT 规则是 Cloud NAT 的扩展功能。借助 Cloud NAT 中的 NAT 规则功能,您可以创建访问规则,用于定义 Cloud NAT 如何连接到互联网。目前,NAT 规则支持基于目标地址的来源 NAT 地址选择。
如果不使用 NAT 规则,启用 Cloud NAT 的虚拟机将使用同一组 NAT IP 地址访问所有互联网地址。
有时,NAT 使用情形需要 Cloud NAT 为特定目的地使用不同的源 IP 地址。NAT 规则定义匹配条件和相应的操作。指定 NAT 规则后,数据包将与每个 NAT 规则匹配。如果匹配到规则,则会执行与该匹配对应的操作。
如需了解详情,请参阅有关 NAT 规则的文档部分 。
学习内容
- 如何设置 Cloud NAT 网关,以便为 NAT 规则做好准备。
- 如何使用通用表达式语言 (CEL) 设计 NAT 规则。
- 如何创建 NAT 规则并将其附加到 NAT 网关。
- 如何从实例测试 NAT 规则。
- 如何更新 NAT 网关的规则。
- 如何删除 NAT 规则并恢复为默认 Cloud NAT 行为。
所需条件
- Google Compute Engine 基础知识
- 网络组建和管理以及 TCP/IP 基础知识
- Unix/Linux 命令行基础知识
- 最好先完成 GCP 网络导览,例如“Google Cloud 中的网络”实验。
- 了解 Cloud NAT 的基本知识。
2. 使用 Google Cloud 控制台和 Cloud Shell
在本实验中,我们将使用 Google Cloud 控制台和 Cloud Shell 与 GCP 进行交互。
Google Cloud Console
您可以通过 https://console.cloud.google.com 访问 Cloud 控制台。

自定进度的环境设置



- 项目名称是您为此项目设置的个人标识符。只要您遵循其命名惯例,就可以使用任何名称,并且可以随时更新。
- 项目 ID 在所有 Google Cloud 项目中必须是唯一的,并且不可变(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用
PROJECT_ID标识),因此如果您不喜欢该 ID,可以再随机生成一个 ID,也可以尝试使用自己的 ID,看看是否可用。然后,项目创建后,ID 会处于“冻结”状态。
- 接下来,您需要在 Cloud 控制台中启用结算功能,才能使用 Google Cloud 资源。
运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。请务必按照“清理”部分中的所有说明操作,该部分介绍了如何关停资源,以免产生超出本教程范围的结算费用。Google Cloud 的新用户符合参与 $300 USD 免费试用计划的条件。
启动 Cloud Shell
虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。
在 GCP 控制台中,点击右上角工具栏上的 Cloud Shell 图标:

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

这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。只需一个浏览器,即可完成本实验中的所有工作。
3. 实验设置
在本实验中,您将使用一个项目,并创建两个 VPC,每个 VPC 中都有一个子网。您将预留外部 IP 地址,然后创建并配置 Cloud NAT 网关(使用 Cloud Router 路由器)、两个生产者实例以及一个消费者实例。验证默认 Cloud NAT 行为后,您将创建 Cloud NAT 自定义规则并验证其行为。
网络架构概览:

4. 预留外部 IP 地址
我们来预留本实验中要使用的所有外部 IP 地址。这有助于您在服务使用方 VPC 和服务提供方 VPC 中编写所有相关的 NAT 和防火墙规则。
在 Cloud Shell 中:
gcloud compute addresses create nat-address-1 nat-address-2 nat-address-3 producer-address-1 producer-address-2 --region us-east4
输出:
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-1]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-2]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-3]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-1]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-2].
将预留的 IP 地址填充为环境变量。
export natip1=`gcloud compute addresses list --filter name:nat-address-1 --format="get(address)"` export natip2=`gcloud compute addresses list --filter name:nat-address-2 --format="get(address)"` export natip3=`gcloud compute addresses list --filter name:nat-address-3 --format="get(address)"` export producerip1=`gcloud compute addresses list --filter name:producer-address-1 --format="get(address)"` export producerip2=`gcloud compute addresses list --filter name:producer-address-2 --format="get(address)"`
无需输出,但要确认地址已正确填充。我们来输出所有环境变量的值。
$ env | egrep '^(nat|producer)ip[1-3]'
输出:
producerip1=<Actual Producer IP 1> producerip2=<Actual Producer IP 2> natip1=<NAT IP 1> natip2=<NAT IP 2> natip3=<NAT IP 3>
5. 提供方 VPC 和实例设置。
现在,我们将为生产者资源创建资源。在提供方 VPC 中运行的实例将使用两个公共 IP 地址“producer-address-1”和“producer-address-2”提供面向互联网的服务。
首先,我们来创建 VPC。在 Cloud Shell 中:
gcloud compute networks create producer-vpc --subnet-mode custom
输出:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/networks/producer-vpc]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 producer-vpc CUSTOM REGIONAL Instances on this network will not be reachable until firewall rules are created. As an example, you can allow all internal traffic between instances as well as SSH, RDP, and ICMP by running: $ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp,udp,icmp --source-ranges <IP_RANGE> $ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp:22,tcp:3389,icmp
接下来,我们将在 us-east4 中创建子网。在 Cloud Shell 中:
gcloud compute networks subnets create producer-e4 \ --network producer-vpc --range 10.0.0.0/24 --region us-east4
输出:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/regions/us-east4/subnetworks/producer-e4]. NAME REGION NETWORK RANGE producer-e4 us-east4 producer-vpc 10.0.0.0/24
接下来,我们来创建 VPC 防火墙规则,以允许 NAT IP 地址通过端口 8080 访问提供方实例。
对于第一条规则,请在 Cloud Shell 中执行以下操作:
gcloud compute firewall-rules create producer-allow-8080 \ --network producer-vpc --allow tcp:8080 \ --source-ranges $natip1,$natip2,$natip3
输出:
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/firewalls/producer-allow-8080]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED producer-allow-8080 producer-vpc INGRESS 1000 tcp:8080 False
下一步是创建两个提供方实例。
生产者实例将在 Docker Hub 上提供的 Docker 容器中运行 IP 回显服务(源代码可在服务作者的 GitHub 代码库中找到)。
为了快速预配包含所有必需软件的实例,我们将使用 Compute Engine 上的容器部署功能。
为了能够编写 NAT 规则,我们将为每个实例预配不同的预留 IP 地址。
创建第一个实例。在 Cloud Shell 中:
gcloud compute instances create-with-container producer-instance-1 \ --zone=us-east4-a --machine-type=e2-medium \ --network-interface=address=producer-address-1,network-tier=PREMIUM,subnet=producer-e4 \ --container-image=mpolden/echoip --container-restart-policy=always
输出:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/zones/us-east4-a/instances/producer-instance-1]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS producer-instance-1 us-east4-a e2-medium 10.0.0.2 <producer IP 1> RUNNING
然后创建第二个实例。在 Cloud Shell 中:
gcloud compute instances create-with-container producer-instance-2 \ --zone=us-east4-a --machine-type=e2-medium \ --network-interface=address=producer-address-2,network-tier=PREMIUM,subnet=producer-e4 \ --container-image=mpolden/echoip --container-restart-policy=always
输出:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/zones/us-east4-a/instances/producer-instance-2]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS producer-instance-2 us-east4-a e2-medium 10.0.0.3 <producer IP 2> RUNNING
6. 设置使用方 VPC、Cloud NAT 和实例
现在,您已创建提供方服务,接下来可以创建使用方 VPC 及其 Cloud NAT 网关了。
创建 VPC 和子网后,我们将添加一条简单的入站防火墙规则,以允许 IAP 访问 TCP 源 IP 地址范围。这样,我们就可以使用 gcloud 直接通过 SSH 连接到消费者实例。
然后,我们将以手动分配模式创建一个简单的 Cloud NAT 网关,并将其与预留地址“nat-address-1”相关联。在本 Codelab 的后续部分中,我们将更新网关的配置以添加自定义规则。。
首先,我们来创建 VPC。在 Cloud Shell 中:
gcloud compute networks create consumer-vpc --subnet-mode custom
输出:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/networks/consumer-vpc]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 consumer-vpc CUSTOM REGIONAL Instances on this network will not be reachable until firewall rules are created. As an example, you can allow all internal traffic between instances as well as SSH, RDP, and ICMP by running: $ gcloud compute firewall-rules create <FIREWALL_NAME> --network consumer-vpc --allow tcp,udp,icmp --source-ranges <IP_RANGE> $ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp:22,tcp:3389,icmp
接下来,我们将在 us-east4 中创建一个子网。在 Cloud Shell 中:
gcloud compute networks subnets create consumer-e4 \ --network consumer-vpc --range 10.0.0.0/24 --region us-east4
输出:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/regions/us-east4/subnetworks/consumer-e4]. NAME REGION NETWORK RANGE consumer-e4 us-east4 consumer-vpc 10.0.0.0/24
接下来,我们来创建 VPC 防火墙规则,以允许 IAP 范围地址通过端口 22 访问使用方实例。
对于第一个防火墙规则,请在 Cloud Shell 中运行以下命令:
gcloud compute firewall-rules create consumer-allow-iap \ --network consumer-vpc --allow tcp:22 \ --source-ranges 35.235.240.0/20
输出:
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/firewalls/consumer-allow-iap]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED consumer-allow-iap consumer-vpc INGRESS 1000 tcp:22 False
在创建 NAT 网关之前,我们需要先创建一个 Cloud Router 实例(我们使用专用 ASN 编号,但它与本实验的活动无关)。在 Cloud Shell 中:
gcloud compute routers create consumer-cr \ --region=us-east4 --network=consumer-vpc \ --asn=65501
输出:
Creating router [consumer-cr]...done. NAME REGION NETWORK consumer-cr us-east4 consumer-vpc
然后,创建 NAT 网关实例。在 Cloud Shell 中:
gcloud compute routers nats create consumer-nat-gw \
--router=consumer-cr \
--router-region=us-east4 \
--nat-all-subnet-ip-ranges \
--nat-external-ip-pool=nat-address-1
输出:
Creating NAT [consumer-nat-gw] in router [consumer-cr]...done.
创建使用方测试实例。我们在此处填充预留的制作方 IP,以便稍后在实例中引用它们。在 Cloud Shell 中:
gcloud compute instances create consumer-instance --zone=us-east4-a \ --machine-type=e2-medium --network-interface=subnet=consumer-e4,no-address \ --metadata=producer-service-ip1=$producerip1,producer-service-ip2=$producerip2
输出:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/zones/us-east4-a/instances/consumer-instance]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS consumer-instance us-east4-a e2-medium 10.0.0.2 RUNNING
7. 验证默认 Cloud NAT 行为
此时,消费者实例使用默认 Cloud NAT 行为,即使用同一预留 IP 地址“nat-address-1”与所有外部地址通信。
在 Cloud NAT 中使用新的 NAT 规则功能之前,我们先验证此行为。
通过 SSH 连接到消费者实例。在 Cloud Shell 中:
gcloud compute ssh consumer-instance --zone=us-east4-a
您现在应该位于实例 shell 中。
示例输出(为简洁起见,完整输出已被截断)
No zone specified. Using zone [us-east4-a] for instance: [consumer-instance]. External IP address was not found; defaulting to using IAP tunneling. ... ... <username>@consumer-instance:~$
从使用方实例中,我们先获取两个提供方 IP,并将其填充为环境变量
export producerip1=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip1" -H "Metadata-Flavor: Google"` export producerip2=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip2" -H "Metadata-Flavor: Google"`
然后尝试对两个提供方实例执行 curl 命令,并观察返回的源 IP 地址。
<username>@consumer-instance:~$ curl http://$producerip1:8080 34.136.8.83 <username>@consumer-instance:~$ curl http://$producerip2:8080 34.136.8.83
您应该会看到两个端点返回的 IP 地址相同,即等于外部预留 IP“nat-address-1”的值。
同样,对任何外部 IP 反射器服务的 curl 都应显示相同的 IP,例如:
<username>@consumer-instance:~$ curl http://ifconfig.co 34.136.8.83 <username>@consumer-instance:~$ curl http://ifconfig.me 34.136.8.83 <username>@consumer-instance:~$ curl http://ip.fyr.io 34.136.8.83
暂时退出实例的 SSH 会话,我们将在配置 NAT 规则后重新通过 SSH 连接到该实例。
8. 创建 Cloud NAT 规则
NAT 规则使用通用表达式语言语法编写。如需详细了解规则表达式语言,请参阅规则表达式语言。
您还可以使用 gcloud 命令向现有 NAT 网关添加 NAT 规则。我们将探讨这两种创建 Cloud NAT 规则的方法。
首先,我们来创建一个 NAT 规则 YAML 文件。
在 Cloud Shell 中:
export projectid=`gcloud config get-value project`
cat <<EOF >natrulesfile.txt
rules:
- ruleNumber: 100
match: destination.ip == '$producerip2'
action:
sourceNatActiveIps:
- /projects/$projectid/regions/us-east4/addresses/nat-address-2
EOF
接下来,我们使用此规则文件更新现有 NAT 网关。在 Cloud Shell 中:
gcloud alpha compute routers nats update consumer-nat-gw \
--router=consumer-cr \
--rules=natrulesfile.txt \
--router-region=us-east4
您应该会看到以下输出:
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
验证规则是否已成功配置。在 Cloud Shell 中:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4
您应该会看到以下输出:
RULE_NUMBER MATCH 100 destination.ip == '35.192.142.134'
我们来尝试仅使用 gcloud 命令重新创建同一规则。首先删除现有规则。在 Cloud Shell 中:
gcloud alpha compute routers nats rules delete 100 \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --quiet
您应该会看到以下输出:
Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]
然后,使用此 gcloud 命令重新创建规则。在 Cloud Shell 中:
gcloud alpha compute routers nats rules create 100 \ --match='destination.ip == "'$producerip2'"' \ --source-nat-active-ips=nat-address-2 --nat=consumer-nat-gw \ --router=consumer-cr --router-region=us-east4
您应该会看到以下输出:
Creating Rule [100] in NAT [consumer-nat-gw]...done.
再次运行之前的命令,验证规则是否已成功创建。这次,我们将添加 YAML 格式设置开关,以查看规则的完整详细信息。
在 Cloud Shell 中:
gcloud alpha compute routers nats rules list\ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --format=yaml
您应该会看到以下输出:
--- action: sourceNatActiveIps: - https://www.googleapis.com/compute/alpha/projects/<Project-ID>/regions/us-east4/addresses/nat-address-2 match: destination.ip == <actual IP for producer-IP 2> ruleNumber: 100
最后,请注意,“nat-address1”和“nat-address-2”这两个外部地址现在都显示为“IN_USE”。如需查看,请在 Cloud Shell 中运行以下命令:
$ gcloud compute addresses list
您应该会看到以下输出(实际 IP 地址应与您预留的地址一致):
NAME ADDRESS/RANGE TYPE PURPOSE NETWORK REGION SUBNET STATUS nat-address-1 34.136.8.83 EXTERNAL us-east4 IN_USE nat-address-2 34.70.137.35 EXTERNAL us-east4 IN_USE nat-address-3 34.135.103.88 EXTERNAL us-east4 RESERVED producer-address-1 34.66.0.105 EXTERNAL us-east4 IN_USE producer-address-2 35.192.142.134 EXTERNAL us-east4 IN_USE
9. 验证 Cloud NAT 规则的行为
此时,消费者实例应使用创建的 Cloud NAT 规则,通过 nat-address-2 与 producer-address-2 进行通信。
我们来验证一下这种行为。通过 SSH 连接到消费者实例。在 Cloud Shell 中:
gcloud compute ssh consumer-instance --zone=us-east4-a
您现在应该位于实例 shell 中。
示例输出(为简洁起见,完整输出已被截断)
No zone specified. Using zone [us-east4-a] for instance: [consumer-instance]. External IP address was not found; defaulting to using IAP tunneling. ... ... <username>@consumer-instance:~$
从使用方实例中,我们先获取两个提供方 IP,并将其填充为环境变量
export producerip1=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip1" -H "Metadata-Flavor: Google"` export producerip2=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip2" -H "Metadata-Flavor: Google"`
然后尝试对两个提供方实例执行 curl 命令,并观察返回的源 IP 地址。
<username>@consumer-instance:~$ curl http://$producerip1:8080 34.136.8.83 <username>@consumer-instance:~$ curl http://$producerip2:8080 34.70.137.35
现在,您应该会看到两个端点返回了不同的 IP 地址,第一个 IP 地址应该与默认行为相同。添加新的 NAT 规则后,第二个 IP 地址应等于“nat-address-2”。
对任何外部 IP 反射器服务的 curl 仍应显示与默认行为相同的 IP,例如:
<username>@consumer-instance:~$ curl http://ifconfig.co 34.136.8.83 <username>@consumer-instance:~$ curl http://ifconfig.me 34.136.8.83 <username>@consumer-instance:~$ curl http://ip.fyr.io 34.136.8.83
暂时退出实例的 SSH 会话,稍后我们将通过 SSH 重新连接,以测试地址耗尽。
10. 更新和删除 Cloud NAT 规则
您可以更新现有的 Cloud NAT 规则。例如,您可以关联新的 IP 地址,并排空与现有规则关联的现有 IP 地址。
让我们按如下所示更新 NAT 规则文件
在 Cloud Shell 中:
export projectid=`gcloud config get-value project`
cat <<EOF >natrulesfile.txt
rules:
- ruleNumber: 100
match: destination.ip == '$producerip2'
action:
sourceNatDrainIps:
- /projects/$projectid/regions/us-east4/addresses/nat-address-2
sourceNatActiveIps:
- /projects/$projectid/regions/us-east4/addresses/nat-address-3
EOF
此新文件所做的操作是将“nat-address-2”置于排空状态。并添加处于有效状态的“nat-address-3”。这样一来,使用 nat-address-2 的现有连接应该可以正常终止,而创建的新连接只能使用 nat-address-3。
接下来,我们使用此规则文件更新现有 NAT 网关。在 Cloud Shell 中:
gcloud alpha compute routers nats update consumer-nat-gw \
--router=consumer-cr \
--rules=natrulesfile.txt \
--router-region=us-east4
您应该会看到以下输出:
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
验证规则是否已成功配置。在 Cloud Shell 中:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --format=yaml
您应该会看到以下输出:
--- action: sourceNatActiveIps: - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-3 sourceNatDrainIps: - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-2 match: destination.ip == '35.192.142.134' ruleNumber: 100
请注意,“nat-address-2”现在已处于排空状态。我们留给您一个练习,让您验证来自使用方 VPC 的新连接现在是否使用了正确的 NAT IP。
最后,从 Cloud NAT 网关中删除 NAT 规则并恢复为默认行为。您可以使用以下 gcloud 命令。在 Cloud Shell 中:
gcloud alpha compute routers nats rules delete 100 \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --quiet
您应该会看到以下输出:
Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]
为了验证是否不再存在 NAT 规则,我们来使用 NAT 网关 describe 命令
gcloud alpha compute routers nats describe consumer-nat-gw \ --router=consumer-cr --router-region=us-east4
您应该会看到以下输出:
enableEndpointIndependentMapping: false name: consumer-nat-gw natIpAllocateOption: MANUAL_ONLY natIps: - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-1 sourceSubnetworkIpRangesToNat: ALL_SUBNETWORKS_ALL_IP_RANGES
请注意,输出 YAML 中没有“rules:”部分。表示未配置任何 NAT 规则。
11. 清理步骤
为避免重复收费,您应删除与本 Codelab 关联的所有资源。
首先删除所有实例。
在 Cloud Shell 中:
gcloud compute instances delete consumer-instance \ producer-instance-1 producer-instance-2 \ --zone us-east4-a --quiet
预期输出:
Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/consumer-instance]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/producer-instance-1]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/producer-instance-2].
接下来,删除 Cloud Router。在 Cloud Shell 中:
gcloud compute routers delete consumer-cr \ --region us-east4 --quiet
您应该会看到以下输出:
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/routers/consumer-cr].
释放所有外部 IP 地址。在 Cloud Shell 中:
gcloud compute addresses delete nat-address-1 \ nat-address-2 nat-address-3 producer-address-1 \ producer-address-2 --region us-east4 --quiet
您应该会看到以下输出:
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-1]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-2]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-3]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-1]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-2].
删除 VPC 防火墙规则。在 Cloud Shell 中:
gcloud compute firewall-rules delete consumer-allow-iap \ producer-allow-8080 --quiet
您应该会看到以下输出:
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/firewalls/consumer-allow-iap]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/firewalls/producer-allow-8080].
删除子网。在 Cloud Shell 中:
gcloud compute networks subnets delete consumer-e4 \ producer-e4 --region=us-east4 --quiet
您应该会看到以下输出:
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/consumer-e4]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/producer-e4].
最后,我们来删除 VPC。在 Cloud Shell 中:
gcloud compute networks delete consumer-vpc \ producer-vpc --quiet
您应该会看到以下输出:
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/networks/consumer-vpc]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/networks/producer-vpc].
12. 恭喜!
您已完成 Cloud NAT 规则实验!
所学内容
- 如何设置 Cloud NAT 网关,以便为 NAT 规则做好准备。
- 如何使用通用表达式语言 (CEL) 设计 NAT 规则。
- 如何创建 NAT 规则并将其附加到 NAT 网关。
- 如何从实例测试 NAT 规则。
- 如何更新 NAT 网关的规则。
- 如何删除 NAT 规则并恢复为默认 Cloud NAT 行为。
后续步骤
- 尝试创建更复杂的 NAT 规则,例如此示例
- 探索排空 NAT IP 地址并观察连接影响。
- 详细了解 Google Cloud Platform 上的网络
©Google, Inc. 或其关联公司。保留所有权利。请勿分发。