管理项目默认出站流量 NAT

本页面介绍了现已废弃的项目默认出站流量 NAT 配置,该配置可用于让工作负载连接到组织外部。 本页面还包含有关如何迁移 到推荐解决方案 Cloud NAT 的说明。

概览

本页面介绍了您必须在项目中的虚拟机 (VM) 或 Pod 上执行的出站流量连接操作,以使用(已废弃的)项目默认出站流量 NAT 配置选项让工作负载离开组织。

默认项目出站流量 NAT 与 标准集群不兼容。 如果您需要控制标准 集群的出站流量,请使用 Cloud NAT

该过程展示了如何向部署添加所需标签,以明确启用出站流量并让工作负载在组织外部进行通信。

默认情况下,Google Distributed Cloud (GDC) air-gapped 会阻止项目中的工作负载离开组织。如果您的平台管理员 (PA) 已为项目停用数据渗漏防护,则工作负载可以离开组织。PA 可以通过将标签 networking.gdc.goog/enable-default-egress-allow-to-outside-the-org: "true"附加到 项目来实现此目的。除了停用数据渗漏防护之外, 应用运维人员 (AO) 还必须在 Pod 工作负载上添加标签 egress.networking.gke.io/enabled: true,以启用该 Pod 的出站流量连接。当您为项目分配和使用已知 IP 地址时,它会对来自组织的出站流量执行源网络地址转换 (NAT)。

您可以管理来自 Pod虚拟机中的工作负载的出站流量连接。

管理来自 Pod 中的工作负载的出站流量

如需为 Pod 中的工作负载配置出站流量连接,您首先必须确保 为 项目停用数据渗漏防护。 然后,确保在 Pod 上添加了 egress.networking.gke.io/enabled: true 标签。如果您使用更高级别的构造(例如 DeploymentDaemonset 构造)来管理一组 Pod,则必须在这些规范中配置 Pod 标签。

以下示例展示了如何从清单文件创建 Deployment。 示例文件在 labels 字段中包含值 egress.networking.gke.io/enabled: true,以明确启用来自项目的出站流量。此标签会添加到部署中的每个 Pod,并允许 Pod 中的工作负载离开组织。

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: DEPLOYMENT_NAME
spec:
  replicas: NUMBER_OF_REPLICAS
  selector:
    matchLabels:
      run: APP_NAME
  template:
    metadata:
      labels: # The labels given to each pod in the deployment, which are used
              # to manage all pods in the deployment.
        run: APP_NAME
        egress.networking.gke.io/enabled: true
    spec: # The pod specification, which defines how each pod runs in the deployment.
      containers:
      - name: CONTAINER_NAME
        image: CONTAINER_IMAGE
EOF

替换以下内容:

  • USER_CLUSTER_KUBECONFIG:您要将容器工作负载部署到的用户集群的 kubeconfig 文件。

  • DEPLOYMENT_NAME:您要将容器工作负载部署到的用户集群的 kubeconfig 文件。

  • APP_NAME:要在部署中运行的应用的名称。

  • NUMBER_OF_REPLICAS:部署管理的副本 Pod 对象的数量。

  • CONTAINER_NAME:容器的名称。

  • CONTAINER_IMAGE:容器映像的名称。您 必须添加容器注册表路径和映像的版本,例如 REGISTRY_PATH/hello-app:1.0

例如:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      run: my-app
  template:
    metadata:
      labels:
        run: my-app
        egress.networking.gke.io/enabled: true
    spec:
      containers:
      - name: hello-app
        image: REGISTRY_PATH/hello-app:1.0

管理来自虚拟机中的工作负载的出站流量

如需为虚拟机中的工作负载配置出站流量连接,您可以使用 GDC 控制台进行虚拟机配置,也可以创建 VirtualMachineExternalAccess 资源。如需了解如何为虚拟机启用外部访问权限以进行数据传输,请参阅启用外部访问权限部分中的连接到虚拟机

迁移到 Cloud NAT

随着 Cloud NAT 在 1.15 版中推出,每个项目的默认项目出站流量 NAT 配置已废弃。建议用户将其出站流量配置从默认项目出站流量 NAT 配置迁移到 Cloud NAT。

默认项目出站流量 NAT 和 Cloud NAT 彼此不兼容。换句话说,给定的 Pod 或虚拟机端点只能使用其中一个。如需将端点从一个配置迁移到另一个配置,您必须先停用一个配置中的端点,然后在另一个配置中启用这些端点。

如需开始迁移,请从要迁移的端点停用旧配置。有两种方法可以做到这一点:

  • 为整个项目停用项目默认出站流量 NAT:通过为项目分配标签 networking.gdc.goog/allocate-egress-ip: "false",为项目中的所有端点停用项目默认出站流量 NAT。
  • 为每个端点停用项目默认出站流量 NAT:通过从 Pod 或虚拟机中移除标签 egress.networking.gke.io/enabled:"true",为特定 Pod 或虚拟机端点停用项目默认 出站流量 NAT。

如需继续迁移,当每个端点从默认出站流量 NAT 中移除后,可以通过向端点添加与所选网关的标签选择器匹配的标签,将该端点添加到 Cloud NAT 网关。

如需了解如何设置 Cloud NAT,请参阅 Cloud NAT 和以下页面。

出站流量 IP 跟踪

使用默认出站流量 NAT 时,用于 NAT 出站流量的出站流量 IP 会包含在项目的状态中。使用 Cloud NAT 时,项目对象不会包含任何出站流量 IP。相反,用户可以通过列出分配给 Cloud NAT 网关的子网来列出 Cloud NAT 网关使用的 IP。