标准集群的 Cloud NAT 网关

Google Distributed Cloud (GDC) air-gapped 支持 标准集群,这是一种由应用 运维团队管理的 单项目自助式 Kubernetes 集群,可为自定义工作负载提供更大的灵活性。 本页面介绍了如何为标准集群设置 Cloud NAT,并介绍了对此集群类型的 NAT 配置的一些限制。

准备工作

在设置网关之前,您必须获取适当的 Identity and Access Management (IAM) 权限,确保您的项目具有适当的网络策略,并启用出站流量。

如需了解详情,请参阅 Cloud NAT 使用入门

Cloud NAT 网关使用外部 leaf 子网作为输入。如需详细了解如何为 Cloud NAT 配置外部子网,请参阅 为 Cloud NAT 创建外部子网

概览

显示标准集群的 Cloud NAT 网关设置的图表

您可以配置 Cloud NAT 网关,以通过以下两种方式处理在标准集群上运行的工作负载的出站流量:

  • 项目级网关 :适用于项目内集群上的所有工作负载流量的网关,其中包括所有共享集群和标准集群。 这是在 创建 Cloud NAT 网关 中所述的配置。
  • 集群级网关 :仅适用于单个指定标准集群中的工作负载的网关。这是本页面演示的网关类型。

这两种方法仅适用于工作负载,而不 适用于构成标准集群的节点。如需为构成标准集群的节点启用 Cloud NAT,请将标签 cluster.gdc.goog/enable-node-egress-to-outside-the-org: "true"添加到 标准集群对象。

创建 Cloud NAT 网关

为标准集群创建网关的过程与创建任何项目级 Cloud NAT 网关的过程相同。

在本例中,我们重点介绍标准集群 Cloud NAT 的集群过滤功能,并创建与第一个场景类似的设置,但指定了标准集群 user-vc-1 的名称,其中包含将通过网关路由流量的端点。因此,此网关将限定为此特定集群。

apiVersion: networking.gdc.goog/v1
kind: CloudNATGateway
metadata:
  namespace: project-1
  name: gateway-1
spec:
  workloadSelector:    # Immutable
    labelSelector:
      workloads:
        matchLabels:
          app: aa
      clusters:
        matchLabels:
          kubernetes.io/metadata.name: user-vc-1
  subnetRefs:           # Mutable
  - subnet-1
  - subnet-2

此配置将选择标准集群 user-vc-1 中所有命名空间中具有标签 app: aa 的所有工作负载。

检查网关的状态

运行以下 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:       # Immutable
    labelSelector:
      workloads:
        matchLabels:
          app: aa
      clusters:
        matchLabels:
          kubernetes.io/metadata.name: user-vc-1
  subnetRefs:       # Mutable
  - 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

测试流量

通过从分配给标准集群中网关的某个 pod 或虚拟机向外部端点发出 curl 命令来测试流量。接收端点应看到来自与网关关联的某个出站 IP 的数据包。具有相同标签的共享集群中的端点无法 使用此网关发出出站流量。

对集群专用网关配置的限制

集群级网关中的工作负载标签匹配器 (workloadSelector.labelSelector.workloads.matchLabels) 不得与其他项目级网关中的工作负载标签匹配器重叠。如 Cloud NAT 配置的限制 中所述,同一项目和可用区中的网关之间的 workloadSelector.labelSelector.workloads.matchLabels不得重叠。

Cloud NAT 配置的限制中列出的其他限制也适用于集群级网关配置。