Cloud NAT 产品交互

本页面介绍了 Cloud NAT 与其他 Google Cloud 产品之间的重要交互。

路由交互

Public NAT 网关只能使用后续跃点为默认互联网网关的路由。每个 Virtual Private Cloud (VPC) 网络均以默认路由开始,该路由的目标为 0.0.0.0/0,它的下一个跃点是默认互联网网关。如需了解重要的背景信息,请参阅路由概览

以下示例说明了可能导致 Public NAT 网关无法使用的情况:

  • 如果您创建一个自定义静态路由,并将其后续跃点设置为任何其他类型的自定义静态路由下一跃点,则目标 IP 地址与该路由目标相匹配的数据包会发送到上述下一个跃点,而不是默认互联网网关。例如,如果您使用运行 NAT 网关、防火墙或代理软件的虚拟机 (VM) 实例,则可以创建自定义静态路由,将流量定向到这些虚拟机作为下一个跃点。下一个跃点虚拟机需要外部 IP 地址。因此,来自依赖于下一个跃点虚拟机或下一个跃点虚拟机本身的虚拟机的流量无法使用公共 NAT 网关。

  • 如果您创建的自定义静态路由的下一个跃点是 Cloud VPN 隧道,则 Public NAT 不会使用该路由。例如,使用目标 0.0.0.0/0 和下一个跃点 Cloud VPN 隧道的自定义静态路由会将流量引导至该隧道,而非默认互联网网关因此,Public NAT 网关无法使用该路由。同样,Public NAT 网关不能使用具有更具体的目标(包括 0.0.0.0/1128.0.0.0/1)的自定义静态路由。

  • 如果本地路由器向管理 Cloud VPN 隧道或 VLAN 连接的 Cloud Router 路由器通告自定义动态路由,则 Public NAT 网关不能使用该路由。例如,如果您的本地路由器通告目标为 0.0.0.0/0 的自定义动态路由,则 0.0.0.0/0 将被定向到 Cloud VPN 隧道或 VLAN 连接。即使对于更具体的目标(包括 0.0.0.0/1128.0.0.0/1)也是如此。

专用 NAT 使用以下路由:

  • 对于 Inter-VPC NAT,专用 NAT 仅使用由连接到 Network Connectivity Center hub 的两个 Network Connectivity Center VPC spoke 交换的子网路由。如需详细了解 Network Connectivity Center VPC spoke,请参阅 VPC spoke 概览
  • 对于混合 NAT(预览版),专用 NAT 使用 Cloud Router 通过 Cloud VPN 学习的动态路由

专用 Google 访问通道交互

Public NAT 网关从不对发送到所选 Google API 和服务的外部 IP 地址的流量执行 NAT。当您将 Public NAT 网关配置为应用于主要或次要子网域范围时,Google Cloud 会自动为子网 IP 地址范围启用专用 Google 访问通道。只要网关为子网范围提供 NAT,专用 Google 访问通道就会在该范围内有效,无法手动停用。

Public NAT 网关不会更改专用 Google 访问通道的工作方式。如需了解详情,请参阅专用 Google 访问通道

Private NAT 网关不适用于专用 Google 访问通道。

共享 VPC 交互

共享 VPC 允许单个组织中的多个服务项目在宿主项目中共用共享 VPC 网络。要为使用共享 VPC 网络的服务项目中的虚拟机提供 NAT,您必须在宿主项目中创建 Cloud NAT 网关。

VPC 网络对等互连交互

Cloud NAT 网关与单个地区和单个 VPC 网络中的子网 IP 地址范围相关联。即使对等互连网络中的虚拟机与网关位于同一区域,在一个 VPC 网络中创建的 Cloud NAT 网关也无法向使用 VPC 网络对等互连或使用 Network Connectivity Center VPC Spoke 连接的其他 VPC 网络中的虚拟机提供 NAT。

GKE 交互

Public NAT 网关可以为专用集群(这是一种 VPC 原生集群)中的节点和 Pod 执行 NAT。您必须对 Public NAT 网关进行配置,至少应用于您的集群所用子网的以下子网 IP 地址范围:

  • 子网主要 IP 地址范围(由节点使用)
  • 集群中用于 Pod 的子网次要 IP 地址范围
  • 集群中用于 Service 的子网次要 IP 地址范围

若要为整个专用集群提供 NAT,最简单的方法是配置 Public NAT 网关,使其应用到该集群所有子网 IP 地址范围中。

如需了解有关 VPC 原生集群如何使用子网 IP 地址范围的背景信息,请参阅 VPC 原生集群的 IP 范围

当 Public NAT 网关经过配置要为专用集群提供 NAT 时,它会为每个节点虚拟机预留 NAT 来源 IP 地址和来源端口。 Pod 可以使用这些 NAT 来源 IP 地址和来源端口,因为 Pod IP 地址是作为分配给每个节点虚拟机的别名 IP 地址范围实现的。

Google Kubernetes Engine (GKE) VPC 原生集群始终会为每个节点分配一个包含多个 IP 地址(网络掩码小于 /32)的别名 IP 地址范围。

  • 如果配置了静态端口分配,则 Public NAT 端口预留过程会为每个节点至少预留 1024 个来源端口。如果每个虚拟机的端口数下限值大于 1024,则使用该值。

  • 如果配置了动态端口分配,则最初为每个节点分配指定的端口数下限值。随后,分配的端口数会根据需要在每个虚拟机的指定端口数下限和上限值之间变化。

如需了解 Pod IP 地址范围和 VPC 原生集群,请参阅 Pod 的子网次要 IP 地址范围

Google Kubernetes Engine 与 Public NAT 无关,当 Pod 向互联网发送数据包时,Google Kubernetes Engine 会使用每个节点上运行的软件执行源网络地址转换(源 NAT 或 SNAT),除非您更改了集群的 IP 地址伪装配置。如果您需要对 Pod 的出站流量进行精细控制,可以使用网络政策

在某些情况下,Public NAT 也可用于非专用 VPC 原生集群。由于非专用集群中的节点具有外部 IP 地址,因此 Cloud NAT 绝不会处理从节点的主要内部 IP 地址发送的数据包。但是,如果您希望公共集群使用公共 NAT 网关提供的静态外部 IP 地址,请执行以下操作:

  • 将公共 NAT 网关配置为仅应用于集群 Pod 对象的次要 IP 地址范围。
  • 将集群配置为停用默认 SNAT,以便 GKE 保留发送到互联网的数据包的来源 Pod 对象的 IP 地址。
  • 通过将适当的 CIDR 指定为非伪装目标来配置 IP 伪装代理,使代理保留发送到非伪装目标的数据包的源 Pod 对象的 IP 地址。

以下示例展示了公共 NAT 与 GKE 的典型交互:

Public NAT 与 GKE。
Public NAT 与 GKE(点击可放大)。

在此例中,您希望对容器进行 NAT 转换。如需为所有容器和 GKE 节点启用 NAT,您必须选择 Subnet 1 的所有 IP 范围作为 NAT 候选项。

  • 子网主要 IP 地址范围:10.240.0.0/24
  • 用于 Pod 的子网次要 IP 地址范围:10.0.0.0/16

不能仅对 Pod1Pod2 启用 NAT。

专用 NAT 网关可以为专用集群和非专用集群中的节点和 Pod 执行 NAT。Private NAT 网关会自动应用于集群使用的专用子网的所有子网 IP 地址范围。

直接 VPC 出站流量交互

公共 NAT 网关可以为配置了直接 VPC 出站流量的 Cloud Run 服务或作业执行 NAT。如需让 Cloud Run 使用公共 NAT 网关,请使用以下设置配置公共 NAT 网关:

  • 如需配置与 Cloud Run 实例关联的子网和子网 IP 地址范围可以使用公共 NAT 网关,请指定 --nat-all-subnet-ip-ranges--nat-custom-subnet-ip-ranges 标志:
    • 如需允许区域中所有子网的所有 IP 地址范围都使用公共 NAT 网关,请指定 --nat-all-subnet-ip-ranges 标志。
    • 如需仅允许特定子网和子网 IP 地址范围使用公共 NAT 网关,请使用 --nat-custom-subnet-ip-ranges 标志指定它们。
  • --endpoint-types 标志的值设置为 ENDPOINT_TYPE_VM。此值可确保只有虚拟机和直接 VPC 出站虚拟机端点可以使用公共 NAT 网关。
  • 对于静态端口分配,请将 --min-ports-per-vm 标志的值设置为单个 Cloud Run 实例所需端口数量的四倍。
  • 如果手动分配 NAT IP 地址,请为公共 NAT 网关分配适当数量的 IP 地址,以考虑 VPC 网络中部署的 Google Cloud 实例数量和 Cloud Run 实例数量的总和。

除了网关配置之外,如需发送来自 Cloud Run 服务或作业的出站流量,您必须在创建服务或作业时将 --vpc-egress 标志设置为 all-traffic

如果您已配置将 --vpc-egress 标志设置为 private-ranges-only 的 Cloud Run 服务或作业,则该服务或作业只会将流量发送到内部 IP 地址。您不需要使用公共 NAT 网关将流量路由到内部目的地。

如需阻止 --vpc-egress 标志设置为 private-ranges-only 的 Cloud Run 服务或作业使用公共 NAT 网关,请执行以下操作:

  • 使用 --nat-custom-subnet-ip-ranges 标志配置公共 NAT 网关。
  • --nat-custom-subnet-ip-ranges 标志的值设置为您已在其中部署 Cloud Run 服务或作业(--vpc-egress 标志设置为 all-traffic)的子网名称。

以下限制适用于使用公共 NAT 网关的 Cloud Run 服务和作业:

  • 直接 VPC 出站端点的 Cloud NAT 指标不会导出到 Cloud Monitoring。
  • 直接 VPC 出站流量的 Cloud NAT 日志不显示 Cloud Run 服务、修订版本或作业的名称。

专用 NAT 网关不能与直接 VPC 出站端点搭配使用。

Connectivity Tests 交互

您可以使用 Connectivity Tests 检查使用 Cloud NAT 配置的网络端点之间的连接。您可以在使用公共 NAT 网关和/或专用 NAT 网关的网络上运行 Connectivity Tests。

您可以在连接测试详情页面的配置分析跟踪记录窗格中查看 NAT 配置详细信息。

Cloud Load Balancing 交互

Google Cloud 区域级内部应用负载平衡器区域级外部应用负载平衡器会与多个区域级互联网网络端点组 (NEG) 后端通信。通过为区域互联网 NEG 配置 Cloud NAT 网关,您可以分配自己的一组外部 IP 地址范围,即 Google Cloud 流量应源自的位置。健康检查和数据平面流量来自您分配的 NAT IP 地址。

其他 Google Cloud 外部负载平衡器和健康检查系统使用特殊路由与虚拟机进行通信。后端虚拟机不需要外部 IP 地址,Cloud NAT 网关也不需要管理负载平衡器和健康检查的通信。如需了解详情,请参阅 Cloud Load Balancing 概览健康检查概览

后续步骤