Cloud NAT 产品交互

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

路由交互

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

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

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

  • 对于 Network Connectivity Center spoke,Private NAT 使用子网路由和动态路由:
    • 对于连接到仅包含 VPC spoke 的 Network Connectivity Center hub 的两个 VPC spoke 之间的流量,Private NAT 会使用所连接 VPC spoke 交换的子网路由。如需了解 VPC spoke,请参阅 VPC spoke 概览
    • 如果 Network Connectivity Center hub 同时包含 VPC spoke 和混合 spoke(例如 Cloud Interconnect 的 VLAN 连接、Cloud VPN 隧道或路由器设备虚拟机),则专用 NAT 会使用混合 spoke 通过 BGP 学习到的动态路由,以及所连接 VPC spoke 交换的子网路由。如需了解混合 spoke,请参阅混合 spoke
  • 对于混合 NAT,专用 NAT 使用 Cloud Router 通过 Cloud Interconnect 或 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 网络对等互连连接的其他 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 地址,因此从该节点的主要内部 IP 地址发送的数据包绝不会被 Cloud NAT 处理。但是,如果同时满足以下两个条件,则非专用集群中的 Pod 发送的数据包可以由Public NAT网关处理:

  • 对于 VPC 原生集群,Public NAT网关被配置为应用到集群的 Pod 的次要 IP 地址范围。

  • 集群的 IP 伪装配置未配置为针对从 Pod 发送到互联网的数据包在集群内执行 SNAT。

以下示例展示了Public 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。

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

直接 VPC 出站流量互动

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

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

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

如果您配置的 Cloud Run 服务或作业的 --vpc-egress 标志设置为 private-ranges-only,则该服务或作业将仅向内部 IP 地址发送流量。您无需Public NAT网关即可将流量路由到内部目的地。

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

  • 使用 --nat-custom-subnet-ip-ranges 标志配置Public NAT网关。
  • --nat-custom-subnet-ip-ranges 标志的值设置为已部署 Cloud Run 服务或作业的子网名称,并将 --vpc-egress 标志设置为 all-traffic

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

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

您无法将 Private NAT 网关与直接 VPC 出站端点搭配使用。

Connectivity Tests 互动

您可以使用 Connectivity Tests 检查使用 Cloud NAT 配置的网络端点之间的连接情况。 您可以在使用 Public NAT 网关Private NAT 网关(或两者兼有)的网络上运行 Connectivity Tests。

连接测试详情页面的配置分析跟踪记录窗格中查看 NAT 配置详情。

Cloud Load Balancing 交互

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

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

后续步骤