概览
在此使用场景中,我们将创建一个 Cloud NAT 网关,并为其分配多个出站 IP。这些网关将从与网关中配置的匹配标签匹配的 pod 和虚拟机出站流量。网关会自动为每个可以通过它出站流量的端点分配一个出站 IP。

前提条件
在设置网关之前,您必须获取适当的 Identity and Access Management (IAM) 权限,确保您的项目具有适当的网络策略,并启用出站流量。
如需了解详情,请参阅 Cloud NAT 使用入门 。
Cloud NAT 网关使用外部 leaf 子网作为输入。如需详细了解如何为 Cloud NAT 配置外部子网,请参阅
为 Cloud NAT 创建外部子网。
确保 pod 或虚拟机配置兼容
如 NAT 概览中所述,Cloud NAT 与默认项目出站流量配置
不兼容。确保您要与 Cloud NAT 搭配使用的任何 pod 或虚拟机都没有标签 egress.networking.gke.io/enabled:true。
默认情况下,虚拟机外部访问 (VMEA) 会将虚拟机配置为使用默认项目出站流量配置出站流量。换句话说,它
会自动将标签 egress.networking.gke.io/enabled:"true" 添加到
虚拟机。如果该虚拟机也配置为使用 Cloud NAT 网关出站流量,则会导致 NAT 配置之间发生冲突。为避免此
冲突,对于与配置为通过 Cloud NAT 网关出站
流量的虚拟机关联的每个 VMEA,请确保与该虚拟机关联的 VMEA 具有注解 egress.networking.gke.io/use-cloud-nat:"true"。
然后,关联的虚拟机将仅通过 Cloud NAT 网关出站流量。
创建 Cloud NAT 网关
以下示例定义了一个 Cloud NAT 网关,其中包含两个外部叶子子网(subnet-1 和 subnet-2)。该网关将使用这些子网中的所有 IP(一个来自 subnet-1,四个来自 subnet-2),并自动将它们分配给具有指定标签的每个虚拟机或 pod 中的端点。多个 pod 或虚拟机可以获得相同的出站 IP 分配。
apiVersion: networking.gdc.goog/v1
kind: CloudNATGateway
metadata:
namespace: project-1
name: gateway-1
spec:
workloadSelector: # Immutable
labelSelector:
workloads:
matchLabels:
app: aa
subnetRefs: # Mutable
- subnet-1
- subnet-2
检查网关的状态
运行以下 kubectl 命令,检查网关的状态。
export MGMT_KUBECONFIG=<path_to_management_kubeconfig>
kubectl get cloudnatgateways gateway-1 -n project-1 --kubeconfig "${MGMT_KUBECONFIG:?}"
如果配置正确,Cloud NAT 网关的状态条件字段应显示类型为 Ready 的条件设置为 true,并且子网标记为 OK,如以下示例输出所示。
apiVersion: networking.gdc.goog/v1
kind: CloudNATGateway
metadata:
namespace: project-1
name: gateway-1
spec:
workloadSelector:
labelSelector:
workloads:
matchLabels:
app: aa
subnetRefs:
- subnet-1
- subnet-2
status:
conditions:
- lastTransitionTime: "2025-08-20T21:31:36Z"
message: ""
observedGeneration: 1
reason: Ready
status: "True"
type: Ready
- lastTransitionTime: "2025-08-20T21:31:36Z"
message: ""
observedGeneration: 1
reason: Ready
status: "True"
type: SubnetsReady
- lastTransitionTime: "2025-08-20T21:31:36Z"
message: ""
observedGeneration: 1
reason: Ready
status: "True"
type: PerimeterConfigurationReady
- lastTransitionTime: "2025-08-20T21:31:36Z"
message: ""
observedGeneration: 1
reason: Ready
status: "True"
type: EgressRoutesReady
subnets:
- name: subnet-1
status: OK
- name: subnet-2
status: OK
Cloud NAT 网关状态包含以下 4 种类型的条件:
Ready:此条件总结了 Cloud NAT 网关的状态。如果网关已完全设置,则此 条件设置为 true。SubnetsReady:此条件指示分配给网关的子网是否有效。PerimeterConfigurationReady:此条件指示是否已配置边界配置(例如,分配给面向外部的节点的外部 IP 等)。EgressRoutesReady:此条件指示是否已配置从来源端点到出站流量的路由。
测试流量
我们可以通过从分配给网关的某个 pod 或虚拟机向外部端点发出 curl 命令来测试流量。接收端点应看到与网关关联的某个出站 IP。