内部直通网络负载均衡器作为下一个跃点

内部直通网络负载均衡器是一种区域级负载均衡器,可让您通过内部 IP 地址运行和扩缩服务。使用内部直通式网络负载均衡器时,您可以将其作为数据包沿其通往最终目的地的路径转发到的下一个跃点。为此,您需要将负载平衡器设置为自定义静态路由中的下一个跃点

在查看本页信息之前,您应该已熟悉以下概念:

内部直通式网络负载均衡器下一个跃点适用于以下情况:

  • 对充当网关或路由器虚拟机的多个虚拟机的流量进行负载平衡。

  • 将网关虚拟设备用作默认路由的下一个跃点。使用此配置时,Virtual Private Cloud (VPC) 网络中的虚拟机实例可通过一组负载均衡的虚拟网关虚拟机将流量发送到互联网。

  • 将同一组多 NIC 网关或路由器虚拟机用作后端,通过多个负载均衡器向两个或多个方向发送流量。为此,您需要创建一个负载均衡器,并将其用作每个 VPC 网络中自定义静态路由的下一个跃点。每个内部直通网络负载均衡器都在单个 VPC 网络中运行,将流量分配到该网络中后端虚拟机的网络接口。

架构

在下图中,路由器虚拟机的一个虚拟机实例组用作两个不同负载均衡器的后端。第一个内部直通网络负载均衡器将数据包发送到后端虚拟机的 nic0,第二个内部直通网络负载均衡器会将数据包发送到同一后端上的 nic1

将负载均衡到多个 NIC。
将负载均衡到多个 NIC(点击可放大)。

将内部直通网络负载均衡器用作下一个跃点的好处

如果负载平衡器是静态路由的下一个跃点,则在定义路由的 VPC 网络中的客户端虚拟机的客机操作系统内不需要进行特殊配置。客户端虚拟机以线缆串接设备的方式通过 VPC 网络路由将数据包发送到负载平衡器的后端。

通过使用内部直通网络负载均衡器作为静态路由的下一个跃点,您可以获得与独立内部直通网络负载均衡器相同的优势。负载均衡器的健康检查可以确保新连接路由到健康状况良好的后端虚拟机。通过将托管实例组用作后端,您可以配置自动扩缩功能以根据服务需求扩大或缩小虚拟机集。

规格

以下是将内部直通式网络负载均衡器用作下一个跃点的规范。

路由

您可以创建自定义静态路由,将 TCP、UDP 和其他协议流量传递到内部直通网络负载均衡器,其中负载均衡器是静态路由的下一个跃点。路由可以是可公开路由的外部(可公开路由)CIDR 前缀,也可以是内部 CIDR 前缀(如果前缀与子网路由不冲突)。例如,您可以将默认路由 (0.0.0.0/0) 替换为将流量定向到第三方后端虚拟机进行数据包处理的路由。

用于指定下一个跃点的选项

您可以通过以下两种方式之一指定内部直通式网络负载均衡器下一个跃点:

  • 使用转发规则的名称和区域
  • 使用转发规则的 IP 地址

如需详细了解内部直通式网络负载均衡器下一个跃点可以驻留的项目和 VPC 网络,请参阅下一个跃点和功能

您可以使用 VPC 网络对等互连与内部直通式网络负载均衡器的下一个跃点交换静态路由。如需了解详情,请参阅交换静态路由的选项

客户端 IP 地址会话粘性

内部直通式网络负载均衡器提供两个类似的“客户端 IP 地址”会话亲和性选项

  • 客户端 IP (CLIENT_IP):数据包的来源 IP 地址和目标 IP 地址的二元组哈希。当内部直通网络负载均衡器不是路由的下一个跃点时,发送到负载均衡器的转发规则 IP 地址的数据包将共享相同的目标 IP 地址,即转发规则 IP 地址。在这种情况下,二元组哈希使用的其中一个地址将保持不变。因此,如果已配置且运行状况良好的后端数量没有更改,且数据包具有相同的来源 IP 地址,则此二元组会话亲和性选项会选择同一后端。
  • 客户端 IP、无目标 (CLIENT_IP_NO_DESTINATION):数据包的来源 IP 地址的一元组哈希。使用内部直通网络负载均衡器作为下一个跃点时,目标 IP 地址通常会发生变化,因为目标 IP 地址是由路由的目标属性指定的地址。在这种情况下,即使已配置且运行状况良好的后端数量没有变化并且数据包具有相同的来源 IP 地址,二元组哈希客户端 IP (CLIENT_IP) 会话亲和性也无法选择同一后端。(此规则的一个例外是仅配置一个后端的情况。)如果您需要将具有相同来源 IP 地址的数据包路由到同一后端,则必须使用客户端 IP、无目标 (CLIENT_IP_NO_DESTINATION) 会话亲和性选项。

目标范围

自定义静态路由的目标不能等于子网路由,也不能比其更具体。请注意,更具体意味着子网掩码更长。此规则适用于所有自定义静态路由,包括下一个跃点是内部直通网络负载均衡器时。例如,假设您的子网路由为 10.140.0.0/20。自定义静态路由的目标不能是相同的 (10.140.0.0/20),并且不能比 10.140.0.0/22 中的更具体。

相同的 VPC 网络和区域

只有在以下场景下,自定义静态路由会将内部直通式网络负载均衡器用作下一个跃点:

  • 单个 VPC 网络。负载平衡器和自定义静态路由必须位于同一个 VPC 网络中。

  • 单个区域或所有区域。除非您配置全球访问权限,否则自定义静态路由只能供与负载平衡器位于同一区域的资源使用。即使路由本身是整个 VPC 网络的路由表的一部分,系统也会强制实施此区域限制。如果您启用全球访问权限,则自定义静态路由可供任何区域中的资源使用。

通告自定义静态路由

要通告自定义静态路由的前缀(目的地),您可以使用 Cloud Router 路由器自定义路由通告。路由通告的范围取决于负载均衡器的全局访问设置,如下所示:

  • 停用全球访问权限后,内部直通网络负载均衡器仅适用于与负载均衡器位于同一区域的虚拟机、Cloud VPN 隧道和 Cloud Interconnect 连接 (VLAN)。因此,只有当 Cloud Router 路由器和负载均衡器位于同一区域时,自定义静态路由前缀的自定义路由通告才有意义。

  • 启用全球访问权限后,内部直通网络负载均衡器可用于任何区域中的虚拟机、Cloud VPN 隧道和 Cloud Interconnect 连接 (VLAN)。通过全局动态路由,本地系统可以使用来自任何连接区域的自定义静态路由。

下表总结了负载均衡器的可访问性。

全球访问权限 VPC 网络动态路由模式 负载平衡器访问权限
已停用 区域 可由同一区域中的路由器访问
已停用 全球 可由同一区域中的路由器访问
已启用 区域 任何区域中的所有路由器均可访问
已启用 全球 任何区域中的所有路由器均可访问

如需了解详情,请参阅内部直通式网络负载均衡器和连接的网络

操作顺序

您必须先创建内部直通网络负载均衡器,然后才能创建将该负载均衡器用作下一个跃点的自定义静态路由。负载平衡器必须已存在,您才能创建路由。如果您尝试创建路由,但路由引用的负载均衡器不存在,则 Google Cloud 会返回错误。

如需指定内部直通网络负载均衡器下一个跃点,您可以使用转发规则的名称和负载均衡器的区域,或使用与转发规则关联的内部 IP 地址。

使用下一个跃点(引用内部直通网络负载均衡器)创建路由后,除非先删除路由,否则无法删除负载均衡器。具体来说,您不能删除内部转发规则,除非没有自定义静态路由将该负载均衡器用作下一个跃点。

后端要求

  • 您必须将内部直通网络负载均衡器的所有后端虚拟机配置为允许 IP 转发(--can-ip-forward = True)。如需了解详情,请参阅基于实例或基于负载均衡器的路由的注意事项

  • 您不能将后端为 Google Kubernetes Engine (GKE) 节点的内部直通网络负载均衡器用作自定义静态路由的下一个跃点。如果目标与集群管理的 IP 地址匹配,则节点上的软件只能将流量路由到 Pod,而不是任意目标。

TCP、UDP 和其他协议流量的处理

在内部直通网络负载均衡器部署为下一个跃点后,无论以下因素如何,Google Cloud 都会将所有端口上的所有流量转发到后端虚拟机

  • 转发规则的协议和端口配置
  • 后端服务的协议配置

作为路由的下一个跃点的内部直通式网络负载均衡器可无缝支持转发 Google Cloud VPC 网络支持的协议(例如 TCP、UDP 和 ICMP)的所有流量。

其他注意事项

  • 支持的转发规则。Google Cloud 仅支持下一个跃点内部直通式网络负载均衡器转发规则。Google Cloud 不支持其他负载均衡器、协议转发或作为 Private Service Connect 端点使用的下一个跃点转发规则。

  • 规范方法以及转发规则网络和项目。您可以使用以下三种方法之一指定下一个跃点转发规则。您使用的规范方法决定了转发规则的网络是否必须与路由的网络匹配,以及转发规则可位于哪个项目中:

    • 按转发规则名称 (--next-hop-ilb) 和区域 (--next-hop-ilb-region):按名称和区域指定下一个跃点转发规则时,转发规则的网络必须与路由的 VPC 网络匹配。转发规则必须位于包含转发规则的网络的项目(独立项目或共享 VPC 宿主项目)中。

    • 通过转发规则资源链接:转发规则的资源链接使用以下格式 /projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE_NAME,其中 PROJECT_ID 是包含转发规则的项目的 ID,REGION 是转发规则的区域,FORWARDING_RULE_NAME 是转发规则的名称。按资源链接指定下一个跃点转发规则时,转发规则的网络必须与路由的 VPC 网络匹配。转发规则可以位于包含转发规则的网络的项目(独立项目或共享 VPC 宿主项目)中共享 VPC 服务项目中。

    • 按转发规则 IPv4 地址:当您按 IPv4 地址指定下一个跃点转发规则时,转发规则的网络可以是路由的 VPC 网络或对等互连的 VPC 网络。转发规则可以位于包含转发规则网络的项目(独立项目或共享 VPC 宿主项目)或共享 VPC 服务项目。

  • 全球访问权限的影响。使用内部直通式网络负载均衡器下一个跃点的自定义静态路由在所有区域进行编程。下一个跃点是否可用取决于负载均衡器的全球访问权限设置。启用全球访问权限后,负载均衡器下一个跃点可在 VPC 网络的所有区域中访问。停用全球访问权限后,负载均衡器下一个跃点只能在与负载均衡器相同的区域中访问。停用全球访问权限后,系统会丢弃从另一个区域发送到使用内部直通式网络负载均衡器下一个跃点的路由的数据包。

  • 当所有后端运行状况不佳时。当内部直通式网络负载均衡器的所有后端都未通过健康检查时,使用该负载均衡器下一个跃点的路由仍然有效。该路由处理的数据包根据流量分配发送到其中一个下一个跃点负载均衡器的后端。

  • 不支持使用公共内部 IP 地址 (--purpose=SHARED_LOADBALANCER_VIP) 的转发规则。下一个跃点内部直通式负载均衡器和具有相同 IP 地址的内部直通式网络负载均衡器转发规则是互斥的功能。下一个跃点内部直通式网络负载均衡器必须使用负载均衡器的转发规则独有的 IP 地址,以便明确引用一个后端服务(一个负载均衡器)。转发规则可以使用公共内部 IP 地址来引用不同的后端服务(不同的内部直通式网络负载均衡器)。

  • 相同的目的地和多个下一个跃点内部直通式网络负载均衡器。如果您使用不同的内部直通式网络负载均衡器下一个跃点创建两个或多个目的地相同的自定义静态路由,则 Google Cloud 绝不会使用 ECMP 在负载均衡器下一个跃点之间分配流量。如果路由具有唯一的优先级,则 Google Cloud 会使用具有最高优先级的路由的下一个跃点内部直通式网络负载均衡器。如果路由具有相同的优先级,则 Google Cloud 仍会只选择一个下一个跃点内部直通式网络负载均衡器。在后一种情况下,如下图所示,Google Cloud 使用确定性的内部算法来选择单个下一个跃点转发规则 (forwarding-rule-a),并忽略具有相同优先级的其他路由。

    当具有不同内部直通式网络负载均衡器下一跃点的静态路由具有相同的优先级和目的地时,Google Cloud 会选择单个下一跃点。
  • 多个目的地、相同的下一个跃点内部直通式网络负载均衡器

    使用实例标记

    如果您使用实例标记(也称为网络标记),则可以将同一下一个跃点内部直通式网络负载均衡器用于多个自定义静态路由,这些路由具有相同的目的地和优先级。

    不使用实例标记:如果不使用网络标记,则无法创建多个具有相同目的地、优先级和内部直通式网络负载均衡器下一个跃点组合的自定义静态路由。例如,route-xroute-yroute-z 全都可以创建,但 route-x-copy 无法创建。

    不能使用相同的目的地、优先级和内部直通式网络负载均衡器下一跃点创建没有实例标记的静态路由。
  • 实例标记

    您可以指定实例标记(也称为网络标记),以使下一个跃点路由仅应用于已配置该标记的客户端实例。这样,您就可以选择用哪个带标记的下一个跃点路由填充哪些客户端实例,以及将流量路由到哪组设备。

    您无需将不同的客户端实例隔离到单独的 VPC 网络中,每个客户端实例均指向将一组设备作为前端的首选内部直通式网络负载均衡器。

  • 指向同一目的地前缀的多个路由。使用实例标记,您可以指定多个指向同一目的地的路由,并将不同内部负载均衡器作为下一个跃点。您可以为这些相同的目的地路由使用不同的实例标记或不同的优先级。

使用场景

您可以将内部直通式网络负载均衡器用作多个部署和拓扑中的下一个跃点。

对于每个示例,请注意以下准则:

  • 每个虚拟机接口必须位于单独的 VPC 网络中。

  • 您无法使用后端虚拟机或负载平衡器在同一 VPC 网络的子网之间路由流量,因为无法替换子网路由。

  • 内部直通式网络负载均衡器是软件定义的直通负载均衡器。数据包传送到后端虚拟机,无需更改来源或目标信息(地址或地址及端口)。

    充当内部直通网络负载均衡器后端的虚拟设备负责路由、数据包过滤、代理和地址转换。

将内部直通网络负载均衡器用作 NAT 网关的下一个跃点

在此使用场景中,系统通过负载平衡将流量从内部虚拟机路由到多个 NAT 网关实例,这些实例将流量路由到互联网。

NAT 使用场景。
NAT 使用场景(点击可放大)。

中心辐射型拓扑:使用 VPC 网络对等互连来交换下一个跃点路由

除了交换子网路由之外,您还可以配置 VPC 网络对等互连以导出和导入自定义静态和动态路由。不包括具有默认互联网网关的下一个跃点的自定义静态路由。包括使用下一个跃点内部直通式网络负载均衡器的自定义静态路由。

通过执行以下操作,您可以使用位于 hub VPC 网络中的下一个跃点防火墙虚拟设备来配置一个中心辐射型拓扑:

  • hub VPC 网络中,创建内部直通网络负载均衡器,将防火墙虚拟设备作为后端。
  • hub VPC 网络中,创建自定义静态路由,并将下一个跃点设置为内部直通网络负载均衡器。
  • 使用 VPC 网络对等互连将 hub VPC 网络连接到每个 spoke VPC 网络。
  • 对于每个对等互连,配置 hub 网络以导出其自定义路由,并配置相应的 spoke 网络以导入自定义路由。具有负载平衡器下一个跃点的路由是 hub 网络导出的路由之一。

根据路由顺序hub VPC 网络中的下一个跃点防火墙设备负载平衡器在辐射网络中可用于:

  • 与负载均衡器位于同一区域的客户端(如果全球访问权限已停用)
  • 所有区域的客户端,依照路由顺序(如果全球访问权限已启用)。
中心辐射型。
中心辐射型拓扑(点击可放大)。

将负载平衡到多个 NIC

在以下使用场景中,后端虚拟机是在多个 VPC 网络中具有 NIC 的虚拟设备实例(例如数据包检查、路由或网关虚拟机)。这些虚拟设备实例可以是第三方提供的商业解决方案,也可以是您自行构建的解决方案。虚拟设备是具有多个 NIC 的 Compute Engine 虚拟机。

此示例显示了托管虚拟机实例组中的一组后端虚拟设备。

在名为 testing 的 VPC 网络中,内部直通式网络负载均衡器具有一条名为 fr-ilb1 的转发规则。在此示例中,此负载均衡器会将流量分配到 nic0 接口。

在名为 production 的 VPC 网络中,不同的内部直通网络负载均衡器具有一个名为 fr-ilb2 的转发规则。此负载平衡器会将流量分配到不同的接口(本例中为 nic1)。

流量进行了多 NIC 负载均衡。
流量进行了多 NIC 负载平衡(点击可放大)。

如需了解详细的配置设置,请参阅将负载平衡到多个后端 NIC

对称哈希

上面的示例不使用来源网络地址转换 (SNAT)。Google Cloud 使用对称哈希技术,因此无需使用 SNAT。这意味着当数据包属于同一流时,Google Cloud 会计算相同的哈希。换句话说,当来源 IP 地址:端口与目标 IP 地址:端口交换时,哈希不会更改。

备注:

  • 您在 2021 年 6 月 22 日当天或之后创建内部直通网络负载均衡器转发规则时,系统会自动启用对称哈希。

  • 如需在现有内部直通网络负载均衡器上启用对称哈希,您必须重新创建转发规则和下一个跃点路由,如启用对称哈希中所述。

  • 只有内部直通网络负载均衡器支持对称哈希。

  • 协议 TCP 和 UDP 的以下会话亲和性类型支持对称哈希:

    • 客户端 IP(2 元组)
    • 客户端 IP 和协议(3 元组)
    • 客户端 IP、协议和端口(5 元组)
  • 如果您的使用场景由于某种原因需要 SNAT,您可以选择使用 SNAT。

后续步骤