标准集群的 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 配置的限制中列出的其他限制也适用于集群级网关配置。