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

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

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

  • 互联网上的任何客户端
  • Google Cloud 具有外部 IP 地址的虚拟机
  • 可通过 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 地址。

如果您需要在删除转发规则后保留与项目关联的地址以供重复使用,或者您需要多个转发规则引用相同的 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 网络的后端。

如需将数据包分发到非 nic0 接口,您必须使用可用区级 NEG 后端(使用 GCE_VM_IP 端点)。

双栈后端(IPv4 和 IPv6)

如果您希望负载均衡器使用同时处理 IPv4 和 IPv6 流量的双栈后端,请注意以下要求:

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

仅限 IPv6 的后端

如果您希望负载均衡器使用仅限 IPv6 的后端,请注意以下要求:

  • 仅使用 IPv6 的实例仅在非托管实例组中受支持。不支持任何其他后端类型。
  • 后端必须在与负载均衡器的 IPv6 转发规则位于同一区域的双栈仅 IPv6 子网中配置。对于后端,您可以使用将 ipv6-access-type 设置为 INTERNALEXTERNAL 的子网。如果后端子网的 ipv6-access-type 设置为 INTERNAL,您必须为负载均衡器的外部转发规则使用另一个将 ipv6-access-type 设置为 EXTERNAL 的纯 IPv6 子网。
  • 后端必须配置为仅 IPv6,并将虚拟机 stack-type 设置为 IPv6_ONLY。如果后端子网的 ipv6-access-type 设置为 EXTERNAL,您还必须将 --ipv6-network-tier 设置为 PREMIUM。如需了解相关说明,请参阅使用 IPv6 地址创建实例模板

请注意,您可以在双栈子网和仅 IPv6 子网下创建仅 IPv6 的虚拟机,但无法在仅 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 地址。来自后端虚拟机的响应直接发送到客户端,而不是通过负载均衡器返回。其行业术语称为直接服务器返回

从后端发起的出站互联网连接

配置为外部直通式网络负载均衡器的后端端点的虚拟机实例可以使用负载均衡器的转发规则 IP 地址作为出站连接的来源 IP 地址,从而发起与互联网的连接。

通常,虚拟机实例始终使用自己的外部 IP 地址或 Cloud NAT 来发起连接。只有在特殊场景下(例如需要虚拟机实例通过同一外部 IP 地址发起和接收连接,并且还需要外部直通式网络负载均衡器为入站连接提供后端冗余),您才需要使用转发规则 IP 地址从后端端点发起连接。

从后端虚拟机直接发送到互联网的出站数据包对流量协议和端口没有任何限制。即使出站数据包使用转发规则的 IP 地址作为来源,数据包的协议和来源端口也不必与转发规则的协议和端口指定相匹配。但是,入站响应数据包必须与转发规则的转发规则 IP 地址、协议和目标端口相匹配。如需了解详情,请参阅外部直通式网络负载均衡器和外部协议转发的路径

此外,对虚拟机出站连接的任何响应都将受限于负载均衡,就像所有其他面向负载均衡器的传入数据包一样。这意味着响应可能不会发送到发起与互联网连接的同一后端虚拟机。如果出站连接和负载均衡的入站连接共用常见的协议和端口,您可以尝试以下建议之一:

  • 跨后端虚拟机同步出站连接状态,以便即使响应到达发起连接的后端虚拟机以外的后端虚拟机,也能处理连接。

  • 使用故障切换配置,其中包含一个主虚拟机和一个备用虚拟机。然后,发起出站连接的活动后端虚拟机始终会收到响应数据包。

根据 Google Cloud的隐式防火墙规则,这种从外部直通式网络负载平衡器的后端到互联网的连接路径是默认的预期行为。不过,如果您担心使此路径保持开放状态会带来安全问题,可以使用有针对性的出站防火墙规则来阻止未经请求就发送到互联网的出站流量。

共享 VPC 架构

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

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

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

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

流量分配

外部直通式网络负载平衡器支持各种流量分发自定义选项,包括会话亲和性、连接跟踪、加权负载均衡和故障切换。如需详细了解外部直通式网络负载平衡器如何分配流量,以及这些选项如何相互作用,请参阅外部直通式网络负载平衡器的流量分配

限制

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

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

    请改用 Google Cloud CLI 或 REST API。

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

价格

如需了解价格信息,请参阅价格

后续步骤