基于后端服务的外部直通式网络负载均衡器概览

外部直通式网络负载均衡器是区域级第 4 层负载均衡器,用于在负载均衡器所在区域中的后端(实例组或网络端点组 (NEG))之间分配外部流量。这些后端必须位于同一区域和项目中,但可以位于不同的 VPC 网络中。 这些负载均衡器基于 MaglevAndromeda 网络虚拟化栈构建。

外部直通式网络负载均衡器可以接收以下来源的流量:

  • 互联网上的任何客户端
  • 具有外部 IP 的 Google Cloud 虚拟机
  • 可通过 Cloud NAT 或基于实例的 NAT 访问互联网的 Google Cloud 虚拟机

外部直通式网络负载均衡器不是代理。该负载均衡器本身不会终止用户连接。经过负载均衡的数据包会发送到后端虚拟机,并且数据包的来源和目的地 IP 地址、协议和端口(如适用)保持不变。然后,后端虚拟机会终止用户连接。来自后端虚拟机的响应会直接发送到客户端,而不是通过负载均衡器返回。此过程称为直接服务器返回 (DSR)。

基于后端服务的外部直通式网络负载均衡器支持以下功能:

  • 托管式和非托管式实例组后端。基于后端服务的外部直通式网络负载均衡器支持托管式和非托管式实例组作为后端。与非托管式实例组相比,托管式实例组将后端管理的某些方面自动化,并可提供更好的可伸缩性和可靠性。
  • 可用区级 NEG 后端。基于后端服务的外部直通式网络负载均衡器支持使用具有 GCE_VM_IP 端点的可用区级 NEG。通过可用区级 NEG GCE_VM_IP 端点,您可以执行以下操作:
    • 将数据包转发到任何网络接口,而不仅仅是 nic0
    • 将同一 GCE_VM_IP 端点放在连接到不同后端服务的两个或更多可用区级 NEG 中。
  • 支持多种协议。基于后端服务的外部直通式网络负载均衡器可以对 TCP、UDP、ESP、GRE、ICMP 和 ICMPv6 流量进行负载均衡。
  • 支持 IPv6 连接。基于后端服务的外部直通式网络负载均衡器可以处理 IPv4 和 IPv6 流量。
  • 精细的流量分配控制。后端服务允许根据可配置的会话亲和性连接跟踪模式加权负载均衡分配流量。后端服务还可以配置为启用连接排空并为负载均衡器指定故障切换后端。其中大多数设置都具有默认值,可以帮助您快速上手。
  • 支持非旧版健康检查。借助基于后端服务的外部直通式网络负载均衡器,您可以使用与其分配的流量类型(TCP、SSL、HTTP、HTTPS 或 HTTP/2)相匹配的健康检查
  • Google Cloud Armor 集成。Google Cloud Armor 支持外部直通式网络负载均衡器的高级网络 DDoS 防护。如需了解详情,请参阅配置高级网络 DDoS 防护
  • GKE 集成。如果您要在 GKE 中构建应用,我们建议您使用内置的 GKE Service 控制器,该控制器会代表 GKE 用户部署 Google Cloud 负载均衡器。该负载均衡器与本页面上介绍的独立负载均衡架构相同,只不过它的生命周期由 GKE 完全自动化和控制。

    相关 GKE 文档:

架构

下图展示了外部直通式网络负载均衡器的组件:

具有区域级后端服务的外部直通式网络负载均衡器
具有区域级后端服务的外部直通式网络负载均衡器

负载均衡器由多个配置组件组成。单个负载均衡器可能具有以下组件:

  • 一个或多个区域级外部 IP 地址
  • 一个或多个区域级转发规则
  • 一个区域级外部后端服务
  • 一个或多个后端:所有实例组或所有可用区级 NEG 后端(GCE_VM_IP 端点)
  • 与后端服务关联的健康检查

此外,您必须创建防火墙规则以允许负载均衡流量和健康检查探测到达后端虚拟机。

IP 地址

外部直通式网络负载均衡器至少需要一个转发规则。转发规则引用可在互联网的任何位置访问的区域级外部 IP 地址。

  • 对于 IPv4 流量,转发规则引用单个区域级外部 IPv4 地址。区域级外部 IPv4 地址来自每个 Google Cloud 区域独有的池。该 IP 地址可以是预留的静态地址,也可以是临时地址。
  • 对于 IPv6 流量,转发规则引用来自具有 VPC 网络中外部 IPv6 子网范围的双栈子网的 /96 范围。外部 IPv6 地址仅在高级层级中提供。IPv6 地址范围可以是预留的静态地址,也可以是临时地址。

如果您需要在删除转发规则后保留与项目关联的地址以供重复使用,或者您需要多个转发规则引用相同的 IP 地址,请使用转发规则的预留的 IP 地址。

外部直通式网络负载均衡器同时支持标准层级和高级层级区域级外部 IPv4 地址。IP 地址和转发规则必须使用相同的网络层级。区域级外部 IPv6 地址仅在高级层级中提供。

转发规则

区域级外部转发规则指定负载均衡器接受流量的协议和端口。由于外部直通式网络负载均衡器不是代理,因此如果数据包包含端口信息,则网络负载均衡器会将流量传递到使用相同协议和端口的后端。转发规则与 IP 地址的结合构成了负载均衡器的前端。

负载均衡器会保留传入数据包的来源 IP 地址。传入数据包的目标 IP 地址是与负载均衡器的转发规则关联的 IP 地址。

传入流量与转发规则匹配,转发规则是特定 IP 地址(IPv4 地址或 IPv6 地址范围)、协议的组合,如果协议是基于端口的,则是端口之一、端口范围或所有端口。然后,转发规则会将流量传送到负载均衡器的后端服务。

  • 如果转发规则引用 IPv4 地址,则转发规则不与任何子网关联。也就是说,其 IP 地址来自任何 Google Cloud 子网范围之外。

  • 如果转发规则引用 /96 IPv6 地址范围,则转发规则必须与子网关联,并且该子网必须 (a) 是双栈子网并且 (b) 具有外部 IPv6 子网范围(将 --ipv6-access-type 设置为 EXTERNAL)。转发规则引用的子网可以是后端实例使用的子网;但是,如果需要,后端实例可以使用单独的子网。当后端实例使用单独的子网时,必须满足以下条件:

外部直通式网络负载均衡器至少需要一个转发规则。转发规则可以配置为将来自特定范围的来源 IP 地址的流量定向到特定的后端服务(或目标实例)。如需了解详情,请参阅流量导向。如多个转发规则中所述,您可以为同一负载均衡器定义多个转发规则。

如果您希望负载均衡器同时处理 IPv4 和 IPv6 流量,请创建两条转发规则:一条指向 IPv4 流量(其指向 IPv4(或双栈)后端),另一条指向 IPv6 流量(其仅指向双栈后端)。IPv4 和 IPv6 转发规则可以引用相同的后端服务,但后端服务必须引用双栈后端。

转发规则协议

外部直通式网络负载均衡器支持每条转发规则的以下协议选项:TCPUDPL3_DEFAULT

使用 TCPUDP 选项配置 TCP 或 UDP 负载平衡。L3_DEFAULT 协议选项可让外部直通式网络负载均衡器对 TCP、UDP、ESP、GRE、ICMP 和 ICMPv6 流量进行负载均衡。

除了支持 TCP 和 UDP 以外的协议之外,L3_DEFAULT 还可以让单个转发规则提供多个协议。例如,IPSec 服务通常会处理 ESP 和基于 UDP 的 IKE 和 NAT-T 流量的某些组合。L3_DEFAULT 选项允许配置一条转发规则来处理所有这些协议。

使用 TCPUDP 协议的转发规则可以引用使用与转发规则相同的协议或协议为 UNSPECIFIED 的后端服务。L3_DEFAULT 转发规则只能引用协议为 UNSPECIFIED 的后端服务

如果您使用的是 L3_DEFAULT 协议,则必须将转发规则配置为接受所有端口上的流量。如需配置所有端口,请使用 Google Cloud CLI 设置 --ports=ALL,或使用 API allPorts 设置为 True

下表总结了如何针对不同协议使用这些设置。

要进行负载均衡的流量 转发规则协议 后端服务协议
TCP TCP TCPUNSPECIFIED
L3_DEFAULT UNSPECIFIED
UDP UDP UDPUNSPECIFIED
L3_DEFAULT UNSPECIFIED
ESP、GRE、
ICMP/ICMPv6(仅限回显请求)
L3_DEFAULT UNSPECIFIED

多个转发规则

您可以为同一外部直通式网络负载均衡器配置多个区域级外部转发规则。每个转发规则可以具有不同的区域级外部 IP 地址,或者多个转发规则可以具有相同的区域级外部 IP 地址。

配置多个区域级外部转发规则在以下使用场景中非常有用:

  • 您需要为同一后端服务配置多个外部 IP 地址。
  • 您需要为同一外部 IP 地址配置不同的协议或不重叠的端口或端口范围。
  • 您需要将来自某些来源 IP 地址的流量定向到特定负载均衡器后端。

Google Cloud 要求传入的数据包最多只能匹配一个转发规则。除下一部分中介绍的导向转发规则之外,根据以下限制条件,使用同一区域级外部 IP 地址的两个或更多个转发规则必须具有唯一的协议和端口组合:

  • 为协议的所有端口配置的转发规则会阻止创建其他使用相同协议和 IP 地址的转发规则。使用 TCPUDP 协议的转发规则可以配置为使用所有端口,也可以配置为使用特定端口。例如,如果您创建了使用 IP 地址 198.51.100.1TCP 协议的转发规则,则无法创建任何其他使用 IP 地址 198.51.100.1TCP 协议的转发规则。您可以创建两个同时使用 IP 地址 198.51.100.1TCP 协议的转发规则,前提是每个转发规则都具有唯一的端口或不重叠的端口范围。例如,您可以创建两个使用 IP 地址 198.51.100.1 和 TCP 协议转发规则,其中一个转发规则的端口为 80,443,另一个转发规则使用端口范围 81-442
  • 每个 IP 地址只能创建一个 L3_DEFAULT 转发规则。这是因为 L3_DEFAULT 协议会根据定义使用所有端口。在此上下文中,“所有端口”这一术语包括不含端口信息的协议。
  • 单个 L3_DEFAULT 转发规则可以与使用特定协议(TCPUDP)的其他转发规则共存。当存在使用同一 IP 地址但更具体协议的转发规则时,L3_DEFAULT 转发规则可用作最后的补救手段。L3_DEFAULT 转发规则会处理发送到其目的地 IP 地址的数据包,前提是当且仅当该数据包的目的地 IP 地址、协议和目的地端口与特定于协议的转发规则不匹配时。

    为便于说明,请考虑以下两种场景。这两种场景中的转发规则使用同一 IP 地址 198.51.100.1

    • 场景 1。第一个转发规则使用 L3_DEFAULT 协议。第二个转发规则使用 TCP 协议和所有端口。发送到 198.51.100.1 的任何目标端口的 TCP 数据包都由第二个转发规则处理。使用其他协议的数据包则由第一个转发规则处理。
    • 场景 2。第一个转发规则使用 L3_DEFAULT 协议。第二个转发规则使用 TCP 协议和端口 8080。发送到 198.51.100.1:8080 的 TCP 数据包由第二个转发规则处理。所有其他数据包(包括发送到其他目标端口的 TCP 数据包)均由第一个转发规则处理。

转发规则选择

Google Cloud 按照以下消除过程(从与数据包的目的地 IP 地址匹配的一组候选转发规则开始),选择一个或零个转发规则来处理传入的数据包:

  • 消除其协议与数据包协议不匹配的转发规则(L3_DEFAULT 转发规则除外)。此步骤绝不会消除使用 L3_DEFAULT 协议的转发规则,因为 L3_DEFAULT 与所有协议匹配。例如,如果数据包的协议为 TCP,则仅会消除使用 UDP 协议的转发规则。

  • 消除其端口与数据包的端口不匹配的转发规则。此步骤绝不会消除为所有端口配置的转发规则,因为所有端口转发规则与任何端口都匹配。

  • 如果其余候选转发规则同时包含 L3_DEFAULT 和特定于协议的转发规则,请消除 L3_DEFAULT 转发规则。如果其余候选转发规则都是 L3_DEFAULT 转发规则,则此步骤不会消除任何规则。

  • 此时,其余任一候选转发规则均属于以下类别之一:

    • 与数据包的目的地 IP 地址、协议和端口匹配且用于路由数据包的单个转发规则保留。
    • 与数据包的目的地 IP 地址、协议和端口匹配的两个或更多个候选转发规则保留。这意味着其余候选转发规则包括导向转发规则(下一部分对此进行了介绍)。选择其来源范围包括最具体(最长前缀匹配)CIDR(包含数据包的来源 IP 地址)的导向转发规则。如果没有导向转发规则具有来源范围(包括数据包的来源 IP 地址),请选择父级转发规则。
    • 零个候选转发规则保留,且数据包被丢弃。

使用多个转发规则时,请确保将后端虚拟机上运行的软件配置为绑定到负载均衡器转发规则的所有外部 IP 地址。

流量导向

外部直通式网络负载均衡器的转发规则可以配置为将来自特定来源 IP 地址范围的流量定向到特定的后端服务(或目标实例)。

流量导向对于问题排查和高级配置非常有用。通过流量导向,您可以将某些客户端定向到不同的后端组和/或不同的后端服务配置。例如:

  • 流量导向可让您创建两个通过两项后端服务将流量定向到同一后端(实例组或 NEG)的转发规则。两项后端服务可以配置为具有不同的健康检查、不同的会话亲和性或不同的流量分配控制政策(连接跟踪、连接排空和故障切换)。
  • 流量导向可让您创建转发规则,以将流量从低带宽后端服务重定向到高带宽后端服务。两项后端服务包含同一组后端虚拟机或端点,但使用加权负载均衡通过不同的权重进行负载均衡。
  • 流量导向可让您创建两个通过不同后端(实例组或 NEG)将流量定向到不同后端服务的转发规则。例如,您可以使用不同的机器类型配置一个后端,以便更好地处理来自一组特定来源 IP 地址的流量。

流量导向使用称为 sourceIPRanges 的转发规则 API 参数进行配置。至少配置了一个来源 IP 范围的转发规则称为“导向转发规则”

导向转发规则可以有一个最多包含 64 个来源 IP 范围的列表。您可以随时更新为导向转发规则配置的来源 IP 范围列表。

每个导向转发规则都要求您先创建父级转发规则。父级转发规则和导向转发规则共用相同的区域级外部 IP 地址、IP 协议和端口信息;但是,父级转发规则没有任何来源 IP 信息。例如:

  • 父级转发规则:IP 地址:198.51.100.1,IP 协议:TCP,端口:80
  • 导向转发规则:IP 地址:198.51.100.1,IP 协议:TCP,端口:80,sourceIPRanges:203.0.113.0/24

指向后端服务的父级转发规则可以与指向后端服务或目标实例的导向转发规则相关联。

对于给定的父级转发规则,两个或更多个导向转发规则可以具有重叠但不相同的来源 IP 范围。例如,一个导向转发规则可以具有来源 IP 范围 203.0.113.0/24,而同一父级的另一导向转发规则可以具有来源 IP 范围 203.0.113.0

您必须先删除所有导向转发规则,然后才能删除它们依赖的父级转发规则。

如需了解如何在使用导向转发规则时处理传入的数据包,请参阅转发规则选择

导向更改时的会话亲和性行为

本部分介绍了当导向转发规则的来源 IP 地址范围更新时,会话亲和性可能被破坏的条件:

  • 如果在更改导向转发规则的来源 IP 范围后现有连接仍与相同的转发规则匹配,则会话亲和性不会被破坏。如果更改使现有连接与其他转发规则匹配,则:
  • 在以下情况下,会话亲和性始终会被破坏
    • 新匹配的转发规则将已建立的连接定向到未引用之前所选后端虚拟机的后端服务(或目标实例)。
    • 新匹配的转发规则将已建立的连接定向到引用之前所选后端虚拟机的后端服务,但该后端服务未配置为后端健康状况不佳时保留连接,并且后端虚拟机未通过后端服务的健康检查。
  • 如果新匹配的转发规则将已建立的连接定向到后端服务,并且该后端服务引用之前所选的虚拟机,但后端服务的会话亲和性和连接跟踪模式结合生成不同的连接跟踪哈希,则会话亲和性可能会被破坏。

导向更改时保留会话亲和性

本部分介绍了如何在更新导向转发规则的来源 IP 地址范围时避免破坏会话亲和性:

  • 指向后端服务的导向转发规则。如果父级转发规则和导向转发规则都指向后端服务,则您需要手动确保会话亲和性连接跟踪政策的设置相同。如果这两个配置不同,Google Cloud 不会自动拒绝这些配置。
  • 指向目标实例的导向转发规则。指向后端服务的父级转发规则可以与指向目标实例的导向转发规则相关联。在这种情况下,导向转发规则会继承父级转发规则中的会话亲和性连接跟踪政策设置。

如需了解如何配置流量导向,请参阅配置流量导向

一项区域性后端服务

每个外部直通式网络负载均衡器都有一个区域级后端服务,该服务定义负载均衡器的行为以及流量如何分配到其后端。后端服务的名称是 Google Cloud 控制台中显示的外部直通式网络负载均衡器的名称。

每个后端服务会定义以下后端参数:

  • 协议。后端服务接受由一个或多个区域转发规则指定的 IP 地址和端口(如果已配置)上的流量。后端服务将数据包传递到后端虚拟机,同时保留数据包的来源和目标 IP 地址、协议,以及协议和端口(如果协议基于端口)。

    与外部直通式网络负载均衡器搭配使用的后端服务支持以下协议选项:TCPUDPUNSPECIFIED

    无论转发规则协议如何,具有 UNSPECIFIED 协议的后端服务都可以与任何转发规则结合使用。具有特定协议(TCPUDP)的后端服务只能由具有相同协议(TCPUDP)的转发规则引用。具有 L3_DEFAULT 协议的转发规则只能引用具有 UNSPECIFIED 协议的后端服务。

    如需查看包含可能的转发规则和后端服务协议组合的表,请参阅转发规则协议规范

  • 流量分配。后端服务允许根据可配置的会话亲和性连接跟踪模式加权负载均衡分配流量。后端服务还可以配置为启用连接排空并为负载均衡器指定故障切换后端

  • 健康检查。后端服务必须有关联的区域健康检查

  • 后端:每个后端服务都在单个区域内运行,并将流量分配给同一区域中的实例组或可用区级 NEG。您可以将实例组或可用区级 NEG 用作外部直通式网络负载均衡器的后端,但不能将实例组或可用区级 NEG 组合使用:

    • 如果您选择实例组,则可以使用非托管式实例组、可用区级托管式实例组、区域级托管式实例组或这些实例组类型的组合。
    • 如果选择可用区级 NEG,就必须使用 GCE_VM_IP 可用区级 NEG。

    每个实例组或 NEG 后端都有一个关联的 VPC 网络,即使该实例组或 NEG 尚未连接到后端服务也是如此。如需详细了解网络如何与每种类型的后端相关联,请参阅实例组后端和网络接口以及可用区级 NEG 后端和网络接口

实例组

外部直通式网络负载均衡器在托管式或非托管式实例组中的后端虚拟机之间分配连接。实例组的范围可以是区域级,也可以是可用区级。

外部直通式网络负载均衡器仅将流量分配到后端虚拟机的第一个网络接口 (nic0)。只要 VPC 网络与后端服务位于同一项目中,负载均衡器就会支持其成员实例使用同一区域的任何 VPC 网络的实例组。(给定实例组中的所有虚拟机必须使用同一 VPC 网络。)

每个实例组都有一个关联的 VPC 网络,即使该实例组尚未连接到后端服务也是如此。如需详细了解网络如何与实例组相关联,请参阅实例组后端和网络接口

  • 区域代管式实例组。如果您可以使用实例模板来部署软件,请使用区域代管式实例组。区域代管式实例组可自动在多个可用区之间分配流量,提供最佳选择以避免在任何给定可用区发生潜在问题。

    使用区域代管式实例组的部署示例如下所示。实例组具有一个定义实例预配方式的实例模板,每个实例组在 us-central1 区域的三个可用区内部署实例。

    具有区域级代管式实例组的外部直通式网络负载均衡器
    具有区域级代管式实例组的外部直通式网络负载均衡器
  • 可用区代管式或非代管式实例组。使用同一区域内不同可用区中的可用区级实例组可防止任何给定可用区发生潜在问题。

    使用可用区级实例组的部署示例如下所示。此负载均衡器可提供跨两个可用区的可用性。

    具有可用区级实例组的外部直通式网络负载均衡器
    具有可用区级实例组的外部直通式网络负载均衡器

可用区级 NEG

外部直通式网络负载均衡器在可用区级网络端点组中包含的 GCE_VM_IP 端点之间分配连接。这些端点必须位于负载均衡器所在的区域。如需了解一些推荐的可用区级 NEG 用例,请参阅可用区级网络端点组概览

NEG 中的端点必须是可用区级 NEG 所在子网和可用区内的虚拟机网络接口的主要内部 IPv4 地址。多 NIC 虚拟机实例的任何网络接口的主要内部 IPv4 地址都可以添加到 NEG 中,只要该地址位于 NEG 的子网中即可。

可用区级 NEG 同时支持 IPv4 和双栈(IPv4 和 IPv6)虚拟机。对于 IPv4 和双栈虚拟机,在将端点连接到 NEG 时仅指定虚拟机实例就足够了。您无需指定端点的 IP 地址。虚拟机实例必须始终与 NEG 位于同一可用区。

每个可用区级 NEG 都有一个关联的 VPC 网络和子网,即使该可用区级 NEG 尚未连接到后端服务也是如此。如需详细了解网络如何与可用区级 NEG 关联,请参阅可用区级 NEG 后端和网络接口

实例组后端和网络接口

与实例组关联的 VPC 网络是每个成员虚拟机的 nic0 网络接口将要使用的 VPC 网络。

  • 对于托管式实例组 (MIG),实例组的 VPC 网络是在实例模板中定义的。
  • 对于非代管式实例组,实例组的 VPC 网络将被定义为您添加到非代管式实例组的第一个虚拟机实例的 nic0 网络接口所用的 VPC 网络。

在一个给定实例组中(无论是代管式还是非代管式),所有虚拟机实例的 nic0 网络接口都必须位于同一 VPC 网络中。每个成员虚拟机都可以有选择性地具有其他网络接口(nic1nic7),但每个网络接口必须连接到不同的 VPC 网络。这些网络还必须不同于与该实例组关联的 VPC 网络。

后端服务无法将流量分配到非 nic0 接口上的实例组成员虚拟机。如果您希望通过非默认网络接口(nic1nic7)接收流量,您必须使用包含 GCE_VM_IP 端点的可用区级 NEG。

可用区级 NEG 后端和网络接口

创建具有 GCE_VM_IP 端点的新可用区级 NEG 时,您必须先将 NEG 与 VPC 网络的子网明确关联,然后才能向 NEG 添加任何端点。创建 NEG 后,子网和 VPC 网络都无法更改。

在一个给定 NEG 中,每个 GCE_VM_IP 端点实际上是一个网络接口;网络接口必须位于与 NEG 关联的子网中。作为 Compute Engine 实例来说,网络接口可以使用任何标识符(nic0nic7);而作为 NEG 中的端点来说,网络接口使用其主要 IPv4 地址来标识。

您可以通过以下两种方式向 NEG 添加 GCE_VM_IP 端点:

  • 如果在添加端点时仅指定了虚拟机名称(而没有指定任何 IP 地址),则 Google Cloud 会要求虚拟机具有的网络接口在与 NEG 关联的子网中。Google Cloud 为端点选择的 IP 地址是与 NEG 关联的子网中虚拟机网络接口的主要内部 IPv4 地址。
  • 如果您在添加端点时同时指定了虚拟机名称和 IP 地址,则您提供的 IP 地址必须是虚拟机其中一个网络接口的主要内部 IPv4 地址。该网络接口必须位于与 NEG 关联的子网中。请注意,指定 IP 地址是多余的操作,因为与 NEG 关联的子网中只能有一个网络接口。

后端服务和 VPC 网络

后端服务不与任何 VPC 网络相关联;但是,如前所述,每个后端实例组或可用区级 NEG 都与 VPC 网络相关联。只要所有后端都位于同一区域和项目中,并且所有后端都是同一类型(实例组或可用区级 NEG),您就可以添加使用相同或不同 VPC 网络的后端。

如需通过 nic7nic1 分发数据包,您必须使用可用区级 NEG 后端(具有 GCE_VM_IP 端点),因为实例组的关联 VPC 网络始终匹配所有成员实例的 nic0 接口所用的 VPC 网络。

双栈后端(IPv4 和 IPv6)

如果您希望负载均衡器支持 IPv6 流量,则后端必须满足以下要求:

  • 后端必须在与负载均衡器的 IPv6 转发规则位于同一区域的双栈子网中配置。对于后端,您可以使用将 ipv6-access-type 设置为 EXTERNALINTERNAL 的子网。若要使用 ipv6-access-type 设置为 INTERNAL 的子网,您需要使用针对负载均衡器的外部转发规则将 ipv6-access-type 设置为 EXTERNAL 的单独双栈子网。如需了解相关说明,请参阅添加双栈子网
  • 后端必须配置为双栈,并将 --ipv6-network-tier 设置为 PREMIUM。如需了解相关说明,请参阅使用 IPv6 地址创建实例模板

健康检查

外部直通式网络负载均衡器使用区域健康检查来确定哪些实例可以接收新连接。每个外部直通式网络负载均衡器的后端服务必须与区域健康检查相关联。负载均衡器使用健康检查来确定如何将新连接路由到后端实例。

如需详细了解 Google Cloud 健康检查的工作原理,请参阅健康检查原理

外部直通式网络负载均衡器支持以下类型的健康检查:

  • HTTP、HTTPS 或 HTTP/2。如果您的后端虚拟机使用 HTTP、HTTPS 或 HTTP/2 来传送流量,则最好使用与该协议匹配的健康检查。如需了解详情,请参阅 HTTP、HTTPS 和 HTTP/2 健康检查成功标准
  • SSL 或 TCP。如果您的后端虚拟机不传送 HTTP 类型的流量,则应使用 SSL 或 TCP 健康检查。如需了解详情,请参阅 SSL 和 TCP 健康检查成功标准

针对其他协议流量的健康检查

Google Cloud 不提供此处列出之外的任何其他特定于协议的健康检查。当您使用外部直通式网络负载均衡器对 TCP 以外的其他协议执行负载均衡时,您仍必须在后端虚拟机上运行基于 TCP 的服务,以提供所需的健康检查信息。

例如,如果您要对 UDP 流量进行负载均衡,则使用 UDP 协议对客户端请求进行负载均衡,并且必须运行 TCP 服务以向 Google Cloud 健康检查探测器提供信息。为此,您可以在每个后端虚拟机上运行一个简单的 HTTP 服务器,该服务器会向健康检查探测工具返回 HTTP 200 响应。您应该使用在后端虚拟机上运行的专属逻辑来确保仅当 UDP 服务已正确配置并运行时,HTTP 服务器才会返回 200。

防火墙规则

外部直通式网络负载均衡器是直通式负载均衡器,因此您使用 Google Cloud 防火墙规则来控制对负载均衡器后端的访问权限。您必须创建入站允许防火墙规则或入站允许分层防火墙政策,以便允许健康检查以及您要进行负载均衡的流量。

转发规则和入站允许防火墙规则或分层防火墙政策通过以下方式协同工作:转发规则指定协议以及数据包必须满足才能转发到后端虚拟机的端口要求(如已定义)。入站允许防火墙规则控制转发的数据包是传送到虚拟机还是被丢弃。所有 VPC 网络都具有隐式拒绝入站防火墙规则,这些规则会阻止来自任何来源的传入数据包。Google Cloud 默认 VPC 网络包含一组受限的预填充的入站允许防火墙规则

  • 如需接受来自互联网上任何 IP 地址的流量,您必须使用 0.0.0.0/0 来源范围创建入站允许防火墙规则。如需仅允许来自某些 IP 地址范围的流量,请使用限制性更高的来源范围。

  • 为安全起见,入站允许防火墙规则应仅允许您需要的 IP 协议和端口。在使用协议设置为 L3_DEFAULT 的转发规则时,限制协议(以及在可能的情况下,端口)配置尤为重要。L3_DEFAULT 转发规则会转发所有受支持的 IP 协议(如果协议和数据包具有端口信息,则在所有端口上)的数据包。

  • 外部直通式网络负载均衡器使用 Google Cloud 健康检查。因此,您必须始终允许来自健康检查 IP 地址范围的流量。这些入站允许防火墙规则可以配置为专门针对负载均衡器的健康检查的协议和端口。

请求和返回数据包的 IP 地址

当后端虚拟机从客户端接收负载均衡数据包时,数据包的来源和目标如下:

  • 来源:与连接到负载均衡器的系统的 Google Cloud 虚拟机或可通过互联网路由的 IP 地址关联的外部 IP 地址。
  • 目标:负载均衡器转发规则的 IP 地址。

由于负载均衡器是直通负载均衡器(而非代理),因此数据包到达负载均衡器的转发规则的目的地 IP 地址。在后端虚拟机上运行的软件应配置为执行以下操作:

  • 监听(绑定到)负载均衡器的转发规则 IP 地址或任何 IP 地址(0.0.0.0::
  • 如果负载均衡器转发规则的协议支持端口:监听(绑定到)负载均衡器的转发规则中包含的端口

返回数据包直接从负载均衡器的后端虚拟机发送到客户端。返回数据包的来源 IP 地址和目的地 IP 地址取决于协议:

  • TCP 面向连接,因此后端虚拟机的来源 IP 地址必须与转发规则的 IP 地址匹配,以便客户端可以将响应数据包与相应的 TCP 连接相关联。
  • UDP、ESP、GRE 和 ICMP 是无连接的。后端虚拟机可以发送其来源 IP 地址与转发规则的 IP 地址或为虚拟机分配的任何外部 IP 地址相匹配的响应数据包。实际上,大多数客户端都期望响应来自作为其数据包发送目的地的同一 IP 地址。

下表总结了响应数据包的来源和目的地:

流量类型 来源 目的地
TCP 负载均衡器转发规则的 IP 地址 请求数据包的来源
UDP、ESP、GRE、ICMP 对于大多数用例,负载均衡器转发规则的 IP 地址 请求数据包的来源。

如果虚拟机具有外部 IP 地址或使用 Cloud NAT,您还可以将响应数据包的来源 IP 地址设置为虚拟机 NIC 的主要内部 IPv4 地址。Google Cloud 或 Cloud NAT 会将响应数据包的来源 IP 地址更改为 NIC 的外部 IPv4 地址,或者 Cloud NAT 外部 IPv4 地址,以便将响应数据包发送到客户端的外部 IP 地址。不使用转发规则的 IP 地址作为来源属于一种高级方案,因为客户端从外部 IP 地址接收到响应数据包,而该外部 IP 地址与发送请求数据包的 IP 地址不匹配。

返回路径

外部直通式网络负载均衡器使用 VPC 网络外部的特殊路由将传入请求和健康检查探测定向到每个后端虚拟机。

负载均衡器会保留数据包的来源 IP 地址。来自后端虚拟机的响应直接发送到客户端,而不是通过负载均衡器返回。其行业术语称为直接服务器返回

共享 VPC 架构

除 IP 地址外,外部直通式网络负载均衡器的所有组件必须位于同一个项目中。下表总结了外部直通式网络负载均衡器的共享 VPC 组件:

IP 地址 转发规则 后端组件
区域级外部 IP 地址必须在负载均衡器所在的项目中或者在共享 VPC 宿主项目中定义。 A 区域级外部转发规则必须在后端服务中的实例所在项目中定义。

区域级后端服务必须在后端(实例组或可用区级 NEG)所在的项目和区域中定义。

与后端服务关联的健康检查必须在后端服务所在的项目和区域中定义。

流量分配

外部直通式网络负载均衡器分配新连接的方式取决于您是否配置了故障切换:

  • 如果您未配置故障切换,并且至少有一个后端虚拟机健康状况良好,则外部直通式网络负载均衡器会为其健康状况良好的后端虚拟机分配新连接。当所有后端虚拟机均运行状况不佳时,作为最后的补救手段,负载均衡器会在所有后端之间分配新连接。在这种情况下,负载均衡器会将每个新连接路由到运行状况不佳的后端虚拟机。
  • 如果已配置故障切换,外部直通式网络负载均衡器会根据您配置的故障切换政策,在其活跃池中运行状况良好的虚拟机之间分配新连接。当所有后端虚拟机运行状况都不佳时,您可以从以下行为中选择一个
    • (默认)负载均衡器仅将流量分配到主虚拟机。这是最后的补救措施。此连接分配的最后补救措施不包括备用虚拟机。
    • 负载均衡器丢弃流量。

如需详细了解如何分配连接,请参阅下一部分后端选择和连接跟踪

如需详细了解故障切换的工作原理,请参阅故障切换部分。

后端选择和连接跟踪

外部直通式网络负载均衡器使用可配置的后端选择和连接跟踪算法来确定流量如何分配到后端虚拟机。

外部直通式网络负载均衡器使用以下算法在后端虚拟机之间(如果已配置故障切换,则在其活跃池中)分配数据包:

  1. 如果负载均衡器的连接跟踪表中包含一个与传入数据包的特征匹配的条目,则该数据包会发送到由该连接跟踪表条目指定的后端。该数据包被视为之前建立的连接的一部分,因此数据包会发送到负载均衡器之前确定并记录在其连接跟踪表中的后端虚拟机。
  2. 当负载均衡器收到没有对应的连接跟踪条目的数据包时,负载均衡器会执行以下操作:

    1. 负载均衡器选择一个后端。负载均衡器根据配置的会话亲和性计算哈希值。它使用此哈希值从当前健康状况良好的后端中选择一个后端(除非所有后端健康状况不佳,在这种情况下,只要故障切换政策尚未配置为在这种情况下丢弃流量。默认会话亲和性 NONE 使用以下哈希算法:

      • 对于 TCP 和未分段的 UDP 数据包,使用数据包来源 IP 地址、来源端口、目的地 IP 地址、目的地端口和协议的 5 元组哈希。
      • 对于分段的 UDP 数据包和所有其他协议,使用数据包来源 IP 地址、目的地 IP 地址和协议的 3 元组哈希。

      您可以通过使用较少信息的哈希算法自定义后端选择。如需查看所有受支持的选项,请参阅会话亲和性选项

      此外,请注意以下事项:

      如果您启用加权负载均衡,则基于哈希的后端选择会根据后端实例报告的权重进行加权。例如:

      • 假设后端服务配置了设置为 NONE 的会话亲和性以及协议为 UDP 的转发规则。如果有两个健康状况良好的后端实例(权重为 1 和 4),则后端会分别收到 20% 和 80% 的 UDP 数据包。
      • 假设后端服务配置了 3 元组会话亲和性和连接跟踪。会话亲和性为 CLIENT_IP_PROTO,连接跟踪模式为 PER_SESSION。如果有三个运行状况良好的后端实例(权重分别为 0、2 和 6),则后端将分别获得 0%、25% 和 75% 的新来源 IP 地址(不存在现有的连接跟踪表条目的来源 IP 地址)的流量。现有连接的流量会流向之前分配的后端。
    2. 负载均衡器向其连接跟踪表中添加一个条目。此条目记录了所选数据包连接的后端,以便来自此连接的所有未来数据包都发送到同一后端。是否使用连接跟踪取决于协议:

      • TCP 数据包。连接跟踪始终处于启用状态,且无法关闭。默认情况下,连接跟踪为 5 元组,但也可以将其配置为小于 5 元组。如果是 5 元组,TCP SYN 数据包的处理方式会有所不同。与非 SYN 数据包不同,此类数据包会舍弃所有匹配的连接跟踪条目,并始终选择新的后端。

        在以下情况下,使用默认的 5 元组连接跟踪:

        • 跟踪模式为 PER_CONNECTION(所有会话亲和性),或
        • 跟踪模式为 PER_SESSION 且会话亲和性为 NONE,或
        • 跟踪模式为 PER_SESSION 且会话亲和性为 CLIENT_IP_PORT_PROTO
      • UDP、ESP 和 GRE 数据包。仅当会话亲和性设置为 NONE 以外的其他值时,系统才会启用连接跟踪。

      • ICMP 和 ICMPv6 数据包。无法使用连接跟踪。

      如需详细了解启用连接跟踪的时间以及启用连接跟踪时使用的跟踪方法,请参阅连接跟踪模式

      此外,请注意以下事项:

      • 在负载均衡器处理最后一个与条目匹配的数据包后 60 秒,连接跟踪表中的条目会过期。这个 60 秒的空闲超时值无法进行配置。
      • 根据协议,负载均衡器可能会在后端运行状况不佳时移除连接跟踪表条目。如需了解详情以及如何自定义此行为,请参阅不健康的后端上的连接持久性

会话亲和性选项

会话亲和性控制从客户端到负载均衡器的后端虚拟机的新连接分配。会话亲和性是为整个区域级外部后端服务(而非单个后端)指定的。

外部直通式网络负载均衡器支持以下会话亲和性选项:

  • 无 (NONE)。来源 IP 地址、来源端口、协议、目的地 IP 地址和目的地端口的 5 元组哈希
  • 客户端 IP、目的地 IP (CLIENT_IP)。来源 IP 地址和目的地 IP 地址的 2 元组哈希
  • 客户端 IP、目的地 IP、协议 (CLIENT_IP_PROTO)。来源 IP 地址、目的地 IP 地址和协议的 3 元组哈希
  • 客户端 IP、客户端端口、目的地 IP、目的地端口、协议 (CLIENT_IP_PORT_PROTO)。来源 IP 地址、来源端口、协议、目的地 IP 地址和目的地端口的 5 元组哈希

如需了解这些会话亲和性选项如何影响后端选择和连接跟踪方法,请参阅此表

连接跟踪模式

是否启用连接跟踪仅取决于负载均衡流量的协议和会话亲和性设置。跟踪模式指定启用连接跟踪时要使用的连接跟踪算法。跟踪模式有两种:PER_CONNECTION(默认)和 PER_SESSION

  • PER_CONNECTION(默认值)。这是默认的跟踪模式。使用此连接跟踪模式时,TCP 流量始终按 5 元组进行跟踪,无论会话亲和性如何设置。对于 UDP、ESP 和 GRE 流量,当所选会话亲和性不是 NONE 时,系统会启用连接跟踪。UDP、ESP 和 GRE 数据包会使用此中所述的跟踪方法进行跟踪。

  • PER_SESSION。如果会话亲和性为 CLIENT_IPCLIENT_IP_PROTO,则配置此模式会分别生成 2 元组和 3 元组连接跟踪。所有协议(ICMP 和 ICMPv6 除外,不可跟踪连接)。对于其他会话亲和性设置,PER_SESSION 模式的行为与 PER_CONNECTION 模式相同。

如需了解这些跟踪模式如何与每个协议的不同会话亲和性设置结合使用,请参阅下表。

后端选择 连接跟踪模式
会话亲和性设置 用于选择后端的哈希方法 PER_CONNECTION(默认) PER_SESSION
默认:无会话亲和性

NONE

TCP 和未分段的 UDP:5 元组哈希

分段的 UDP 和所有其他协议:3 元组哈希

  • TCP:5 元组连接跟踪
  • 所有其他协议:连接跟踪关闭
  • TCP:5 元组连接跟踪
  • 所有其他协议:连接跟踪关闭
客户端 IP、目标 IP

CLIENT_IP

所有协议:2 元组哈希
  • TCP 和未分段的 UDP:5 元组连接跟踪
  • 分段的 UDP、ESP 和 GRE:3 元组连接跟踪
  • 所有其他协议:连接跟踪关闭
  • TCP、UDP、ESP、GRE:2 元组连接跟踪
  • 所有其他协议:连接跟踪关闭
客户端 IP、目标 IP、协议

CLIENT_IP_PROTO

所有协议:3 元组哈希
  • TCP 和未分段的 UDP:5 元组连接跟踪
  • 分段的 UDP、ESP 和 GRE:3 元组连接跟踪
  • 所有其他协议:连接跟踪关闭
  • TCP、UDP、ESP、GRE:3 元组连接跟踪
  • 所有其他协议:连接跟踪关闭
客户端 IP、客户端端口、目的地 IP、目的地端口、协议

CLIENT_IP_PORT_PROTO

TCP 和未分段的 UDP:5 元组哈希

分段的 UDP 和所有其他协议:3 元组哈希

  • TCP 和未分段的 UDP:5 元组连接跟踪
  • 分段的 UDP、ESP 和 GRE:3 元组连接跟踪
  • 所有其他协议:连接跟踪关闭
  • TCP 和未分段的 UDP:5 元组连接跟踪
  • 分段的 UDP、ESP 和 GRE:3 元组连接跟踪
  • 所有其他协议:连接跟踪关闭

如需了解如何更改连接跟踪模式,请参阅配置连接跟踪政策

运行状况不佳的后端的连接持久性

连接持久性设置用于控制现有连接在后端运行状况不佳后是否持续存在于所选后端虚拟机或端点上,前提是该后端保留在负载均衡器的已配置后端组中(在实例组中或 NEG 中)。

本部分介绍的行为不适用于从实例组中移除后端实例、从 NEG 中移除后端端点或者从后端服务移除实例组或 NEG 的情况。在这种情况下,已建立的连接仅会按连接排空中所述持续存在。

以下连接持久性选项可用:

  • DEFAULT_FOR_PROTOCOL(默认)
  • NEVER_PERSIST
  • ALWAYS_PERSIST

下表总结了连接持久性选项,以及连接针对不同协议、会话亲和性选项和跟踪模式的持久程度。

不健康的后端上的连接持久性选项 连接跟踪模式
PER_CONNECTION PER_SESSION
DEFAULT_FOR_PROTOCOL

TCP:连接持续存在于运行状况不佳的后端上(所有会话亲和性)

所有其他协议:连接始终不持续存在于运行状况不佳的后端上

TCP:如果会话亲和性为 NONECLIENT_IP_PORT_PROTO,则连接会持续存在于运行状况不佳的后端上

所有其他协议:连接始终不持续存在于运行状况不佳的后端上

NEVER_PERSIST 所有协议:连接始终不持续存在于运行状况不佳的后端上
ALWAYS_PERSIST

TCP:连接持续存在于不健康的后端上(所有会话亲和性)

ESP、GRE、UDP:如果会话亲和性不是 NONE,则连接会持续存在于健康状况不佳的后端上

ICMP、ICMPv6:不适用,因为它们不可跟踪连接

此选项应仅用于高级使用场景。

无法进行配置

运行状况不佳的后端上的 TCP 连接持久性行为

每当采用 5 元组跟踪的 TCP 连接持续存在于运行状况不佳的后端上时:

  • 如果运行状况不佳的后端继续响应数据包,则连接将持续存在,直到运行状况不佳的后端或客户端将其重置或关闭。
  • 如果运行状况不佳的后端发送 TCP 重置 (RST) 数据包或未响应数据包,则客户端可能会使用新连接重试,让负载均衡器选择其他运行状况良好的后端。TCP SYN 数据包始终选择运行状况良好的新后端。

如需了解如何更改连接持久性行为,请参阅配置连接跟踪政策

加权负载均衡

您可以将网络负载均衡器配置为根据使用加权负载均衡的 HTTP 健康检查报告的权重,在负载均衡器的后端实例之间分配流量。

加权负载均衡要求您配置以下两项:

  • 您必须将后端服务的位置负载均衡器政策 (localityLbPolicy) 设置为 WEIGHTED_MAGLEV
  • 您必须配置具有 HTTP 健康检查的后端服务。HTTP 健康检查响应必须包含自定义 HTTP 响应标头字段 X-Load-Balancing-Endpoint-Weight,以指定每个后端实例的值为 01000 的权重。

如果您为使用加权负载均衡的多个基于后端服务的外部直通式网络负载均衡器使用相同的后端(实例组或 NEG),我们建议为后端服务的每项健康检查使用唯一的 request-path。这让端点实例可以为不同的后端服务分配不同的权重。如需了解详情,请参阅 HTTP、HTTPS、HTTP/2 健康检查的成功标准

为了为新连接选择后端,系统会根据后端的权重和运行状况为其分配严格的优先级顺序,如下表所示:

权重 健康状况良好 后端选择优先级
权重大于零 4
权重大于零 3
权重等于零 2
权重等于零 1

只有优先级最高的后端才有资格参与后端选择。如果所有符合条件的后端的权重为零,则负载均衡器会在所有符合条件的后端之间分配新连接,并将这些后端视为具有相同的权重。如需查看加权负载均衡的示例,请参阅后端选择和连接跟踪

加权负载均衡适用于以下情况:

  • 如果某些连接处理的数据比其他连接多,或者某些连接持续的时间比其他连接长,则后端负载分配可能会变得不均匀。通过发出信号指示较低的实例权重,具有高负载的实例可以减少其新连接所占的份额,同时保持为现有连接提供服务。

  • 如果后端过载,分配更多连接可能会中断现有连接,则此类后端会为自身分配零权重。通过发出信号指示零权重,后端实例会停止为新连接提供服务,但继续为现有连接提供服务。

  • 如果后端在维护之前排空现有连接,则会为自身分配零权重。通过发出信号指示零权重,后端实例会停止为新连接提供服务,但继续为现有连接提供服务。

如需了解详情,请参阅配置加权负载均衡

连接排空

在以下情况下,连接排空是应用于已建立的连接的过程:

  • 从后端(实例组或 NEG)移除虚拟机或端点。
  • 后端(在滚动升级或缩减时通过替换、放弃的方式)移除虚拟机或端点。
  • 从后端服务中移除后端。

默认情况下,连接排空处于停用状态。如果停用,尽快建立连接。启用连接排空后,可允许已建立的连接保留可配置的超时,在此之后终止后端虚拟机实例。

如需详细了解如何触发连接排空以及如何启用连接排空,请参阅启用连接排空

UDP 分段

基于后端服务的外部直通式网络负载均衡器可以处理分段和未分段的 UDP 数据包。如果您的应用使用分段的 UDP 数据包,请注意以下几点:

  • UDP 数据包在到达 Google Cloud VPC 网络之前可能会被分段。
  • Google Cloud VPC 网络会在 UDP 分段到达时进行转发(无需等待所有分段到达)。
  • 非 Google Cloud 网络和本地网络设备可以在收到 UDP 片段时进行转发,将经过分段的 UDP 数据包延迟到所有片段到达,或舍弃经过分段的 UDP 数据包。如需了解详情,请参阅网络提供商或网络设备的文档。

如果您预期会对 UDP 数据包进行分段并需要将其路由到相同的后端,请使用以下转发规则和后端服务配置参数:

  • 转发规则配置:每个负载平衡的 IP 地址只使用一个 UDPL3_DEFAULT 转发规则,并将转发规则配置为接受所有端口的流量。这确保了所有数据段到达相同的转发规则。即使分段的数据包(第一个数据段除外)缺少目标端口,但在配置转发规则以处理所有端口的流量时,也会将其配置为接收没有端口信息的 UDP 数据段。如需配置所有端口,请使用 Google Cloud CLI 设置 --ports=ALL,或使用 API 将 allPorts 设置为True

  • 后端服务配置:将后端服务的会话亲和性设置为 CLIENT_IP(2 元组哈希)或 CLIENT_IP_PROTO(3 元组哈希),以便为包含端口信息的 UDP 数据包和缺少端口信息的 UDP 数据段(第一个数据段除外)选择同一后端。将后端服务的连接跟踪模式设置为 PER_SESSION,以便使用相同的 2 元组或 3 元组哈希构建连接跟踪表条目。

将目标实例用作后端

如果您使用目标实例作为外部直通式网络负载均衡器的后端,并且预期会对 UDP 数据包进行分段,则应为每个 IP 地址仅使用一条 UDPL3_DEFAULT 转发规则,然后配置转发规则以接受所有端口上的流量。这样可以确保所有分段均具有相同的转发规则,即使它们没有相同的目标端口。如需配置所有端口,请使用 gcloud 设置 --ports=ALL,或使用 API 将 allPorts 设置为 True

故障切换

您可以将外部直通式网络负载均衡器配置为在主要后端(实例组或 NEG)中的虚拟机实例或端点之间分配连接,然后在需要时切换为使用故障切换后端。故障切换提供了另一种提高可用性的方法,同时还可让您在主要后端健康状况不佳时更好地控制管理工作负载的方式。

默认情况下,您向外部直通式网络负载均衡器的后端服务添加后端时,该后端是主要后端。您可以在将某个后端添加到负载均衡器的后端服务时将其指定为故障切换后端,或者在以后通过修改后端服务将该后端指定为故障切换后端。

如需详细了解故障切换的工作原理,请参阅外部直通式网络负载均衡器的故障切换概览

限制

  • 您无法使用 Google Cloud 控制台执行以下任务:

    • 创建或修改其转发规则使用 L3_DEFAULT 协议的外部直通式网络负载均衡器。
    • 创建或修改其后端服务协议设置为 UNSPECIFIED 的外部直通式网络负载均衡器。
    • 创建或修改配置连接跟踪政策的外部直通式网络负载均衡器。
    • 为转发规则创建或修改基于来源 IP 地址的流量导向。

    请改用 Google Cloud CLI 或 REST API。

  • 外部直通式网络负载均衡器不支持 VPC 网络对等互连。

后续步骤