管理项目默认出站流量 NAT

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

概览

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

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

默认情况下,Google Distributed Cloud (GDC) 网闸隔离配置会阻止项目中的工作负载离开组织。如果平台管理员 (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 时,Project 对象不会包含任何出站 IP。用户将能够通过列出分配给 Cloud NAT 网关的子网来列出该网关使用的 IP。