外部直通式网络负载均衡器是区域级第 4 层负载均衡器,用于在负载均衡器所在区域中的后端(实例组或网络端点组 (NEG))之间分配外部流量。这些后端必须位于同一区域和项目中,但可以位于不同的 VPC 网络中。 这些负载均衡器基于 Maglev 和 Andromeda 网络虚拟化栈构建。
外部直通式网络负载均衡器可以接收以下来源的流量:
- 互联网上的任何客户端
- 具有外部 IP 的Google Cloud 虚拟机
- 可通过 Cloud NAT 或基于实例的 NAT 访问互联网的Google Cloud 虚拟机
外部直通式网络负载均衡器不是代理。该负载均衡器本身不会终止用户连接。经过负载均衡的数据包会发送到后端虚拟机,并且数据包的来源和目的地 IP 地址、协议和端口(如适用)保持不变。后端虚拟机随后终止用户连接。来自后端虚拟机的响应会直接发送到客户端,而不是通过负载均衡器返回。此过程称为直接服务器返回 (DSR)。
基于后端服务的外部直通式网络负载均衡器支持以下功能:
- 托管式和非托管式实例组后端。基于后端服务的外部直通式网络负载均衡器支持托管式和非托管式实例组作为后端。与非托管式实例组相比,托管式实例组将后端管理的某些方面自动化,并可提供更好的可伸缩性和可靠性。
- 可用区级 NEG 后端。基于后端服务的外部直通式网络负载均衡器支持使用具有
GCE_VM_IP端点的可用区级 NEG。通过可用区级 NEGGCE_VM_IP端点,您可以执行以下操作:- 将数据包转发到任何网络接口,而不仅仅是
nic0。 - 将同一
GCE_VM_IP端点放在连接到不同后端服务的两个或更多可用区级 NEG 中。
- 将数据包转发到任何网络接口,而不仅仅是
- 支持多种协议。基于后端服务的外部直通式网络负载均衡器可以对 TCP、UDP、ESP、GRE、ICMP 和 ICMPv6 流量进行负载均衡。
- 支持 IPv6 连接。基于后端服务的外部直通式网络负载均衡器可以处理 IPv4 和 IPv6 流量。
- 精细的流量分配控制。利用后端服务可以根据配置的会话亲和性、连接跟踪政策和加权负载均衡设置来分配流量。后端服务还可以配置为启用连接排空并为负载均衡器指定故障切换后端。其中大多数设置都具有默认值,可以帮助您快速上手。如需了解详情,请参阅外部直通式网络负载均衡器的流量分配。
- 支持非旧版区域级健康检查。基于后端服务的外部直通式网络负载均衡器支持区域级健康检查,该检查可以使用任何受支持的健康检查协议。
- Google Cloud Armor 集成。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 地址来分配 IPv4 地址,也可以让 Google Cloud 自动分配临时 IPv4 地址。
对于 IPv6 流量,转发规则引用双栈子网或仅限 IPv6 的子网中
/96IPv6 地址范围。该子网必须在 VPC 网络中具有分配的外部 IPv6 子网范围。外部 IPv6 地址仅在高级层级中提供。/96IPv6 地址范围可以通过以下方式分配:指定预留的外部 IPv6 地址、指定自定义临时 IPv6 地址,或让 Google Cloud自动分配临时 IPv6 地址。如需指定自定义临时 IPv6 地址,您必须使用 gcloud CLI 或 API。 Google Cloud 控制台不支持为转发规则指定自定义临时 IPv6 地址。
如果您需要在删除转发规则后保留与项目关联的地址以供重复使用,或者您需要多个转发规则引用相同的 IP 地址,请使用转发规则的预留的 IP 地址。
外部直通式网络负载均衡器同时支持标准层级和高级层级区域级外部 IPv4 地址。IP 地址和转发规则必须使用相同的网络层级。区域级外部 IPv6 地址仅在高级层级中提供。
转发规则
区域级外部转发规则指定负载均衡器接受流量的协议和端口。由于外部直通式网络负载均衡器不是代理,因此如果数据包包含端口信息,则网络负载均衡器会将流量传递到使用相同协议和端口的后端。转发规则与 IP 地址的结合构成了负载均衡器的前端。
负载均衡器会保留传入数据包的来源 IP 地址。传入数据包的目标 IP 地址是与负载均衡器的转发规则关联的 IP 地址。
传入流量与转发规则匹配,转发规则是特定 IP 地址(IPv4 地址或 IPv6 地址范围)、协议的组合,如果协议是基于端口的,则是端口之一、端口范围或所有端口。然后,转发规则会将流量传送到负载均衡器的后端服务。
如果转发规则引用 IPv4 地址,则转发规则不与任何子网关联。也就是说,其 IP 地址来自任何Google Cloud 子网范围之外。
如果转发规则引用
/96IPv6 地址范围,则转发规则必须与子网关联,并且该子网必须 (a) 是双栈子网并且 (b) 具有外部 IPv6 子网范围(将--ipv6-access-type设置为EXTERNAL)。转发规则引用的子网可以是后端实例使用的子网;但是,如果需要,后端实例可以使用单独的子网。当后端实例使用单独的子网时,必须满足以下条件:
外部直通式网络负载均衡器至少需要一个转发规则。转发规则可以配置为将来自特定范围的来源 IP 地址的流量定向到特定的后端服务(或目标实例)。如需了解详情,请参阅流量导向。如多个转发规则中所述,您可以为同一负载均衡器定义多个转发规则。
如果您希望负载均衡器同时处理 IPv4 和 IPv6 流量,请创建两条转发规则:一条指向 IPv4 流量(其指向 IPv4(或双栈)后端),另一条指向 IPv6 流量(其仅指向双栈后端)。IPv4 和 IPv6 转发规则可以引用相同的后端服务,但后端服务必须引用双栈后端。
转发规则协议
外部直通式网络负载均衡器支持每条转发规则的以下协议选项:TCP、UDP 和 L3_DEFAULT。
使用 TCP 和 UDP 选项配置 TCP 或 UDP 负载平衡。L3_DEFAULT 协议选项可让外部直通式网络负载均衡器对 TCP、UDP、ESP、GRE、ICMP 和 ICMPv6 流量进行负载均衡。
除了支持 TCP 和 UDP 以外的协议之外,L3_DEFAULT 还可以让单个转发规则提供多个协议。例如,IPsec 服务通常会处理 ESP 和基于 UDP 的 IKE 和 NAT-T 流量的某些组合。L3_DEFAULT 选项允许配置一条转发规则来处理所有这些协议。
使用 TCP 或 UDP 协议的转发规则可以引用使用与转发规则相同的协议或协议为 UNSPECIFIED 的后端服务。L3_DEFAULT 转发规则只能引用协议为 UNSPECIFIED 的后端服务。
如果您使用的是 L3_DEFAULT 协议,则必须将转发规则配置为接受所有端口上的流量。如需配置所有端口,请使用 Google Cloud CLI 设置 --ports=ALL,或使用 API 将 allPorts 设置为 True。
下表总结了如何针对不同协议使用这些设置。
| 要进行负载均衡的流量 | 转发规则协议 | 后端服务协议 |
|---|---|---|
| TCP | TCP |
TCP 或 UNSPECIFIED |
L3_DEFAULT |
UNSPECIFIED |
|
| UDP | UDP |
UDP 或 UNSPECIFIED |
L3_DEFAULT |
UNSPECIFIED |
|
| ESP、GRE、ICMP/ICMPv6(仅限回显请求) | L3_DEFAULT |
UNSPECIFIED |
多个转发规则
您可以为同一外部直通式网络负载均衡器配置多个区域级外部转发规则。每个转发规则可以具有不同的区域级外部 IP 地址,或者多个转发规则可以具有相同的区域级外部 IP 地址。
配置多个区域级外部转发规则在以下使用场景中非常有用:
- 您需要为同一后端服务配置多个外部 IP 地址。
- 您需要为同一外部 IP 地址配置不同的协议或不重叠的端口或端口范围。
- 您需要将来自某些来源 IP 地址的流量定向到特定负载均衡器后端。
Google Cloud 要求传入的数据包最多只能匹配一个转发规则。除下一部分中介绍的导向转发规则之外,根据以下限制条件,使用同一区域级外部 IP 地址的两个或更多个转发规则必须具有唯一的协议和端口组合:
- 为协议的所有端口配置的转发规则会阻止创建其他使用相同协议和 IP 地址的转发规则。
使用
TCP或UDP协议的转发规则可以配置为使用所有端口,也可以配置为使用特定端口。例如,如果您创建了使用 IP 地址198.51.100.1和TCP协议的转发规则,则无法创建任何其他使用 IP 地址198.51.100.1和TCP协议的转发规则。您可以创建两个同时使用 IP 地址198.51.100.1和TCP协议的转发规则,前提是每个转发规则都具有唯一的端口或不重叠的端口范围。例如,您可以创建两个使用 IP 地址198.51.100.1和 TCP 协议转发规则,其中一个转发规则的端口为80,443,另一个转发规则使用端口范围81-442。 - 每个 IP 地址只能创建一个
L3_DEFAULT转发规则。这是因为L3_DEFAULT协议会根据定义使用所有端口。在此上下文中,“所有端口”这一术语包括不含端口信息的协议。 单个
L3_DEFAULT转发规则可以与使用特定协议(TCP或UDP)的其他转发规则共存。当存在使用同一 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 数据包)均由第一个转发规则处理。
- 场景 1。第一个转发规则使用
转发规则选择
Google Cloud 按照以下消除过程(从与数据包的目的地 IP 地址匹配的一组候选转发规则开始),选择一个或零个转发规则来处理传入的数据包:
消除其协议与数据包协议不匹配的转发规则(
L3_DEFAULT转发规则除外)。此步骤绝不会消除使用L3_DEFAULT协议的转发规则,因为L3_DEFAULT与所有协议匹配。例如,如果数据包的协议为 TCP,则仅会消除使用UDP协议的转发规则。消除其端口与数据包的端口不匹配的转发规则。此步骤绝不会消除为所有端口配置的转发规则,因为所有端口转发规则与任何端口都匹配。
如果其余候选转发规则同时包含
L3_DEFAULT和特定于协议的转发规则,请消除L3_DEFAULT转发规则。如果其余候选转发规则都是L3_DEFAULT转发规则,则此步骤不会消除任何规则。此时,其余任一候选转发规则均属于以下类别之一:
- 与数据包的目的地 IP 地址、协议和端口匹配且用于路由数据包的单个转发规则保留。
- 与数据包的目的地 IP 地址、协议和端口匹配的两个或更多个候选转发规则保留。这意味着其余候选转发规则包括导向转发规则(下一部分对此进行了介绍)。选择其来源范围包括最具体(最长前缀匹配)CIDR(包含数据包的来源 IP 地址)的导向转发规则。如果没有导向转发规则具有来源范围(包括数据包的来源 IP 地址),请选择父级转发规则。
- 零个候选转发规则保留,且数据包被丢弃。
使用多个转发规则时,请确保将后端虚拟机上运行的软件配置为绑定到负载均衡器转发规则的所有外部 IP 地址。
流量导向
外部直通式网络负载均衡器的转发规则可以配置为将来自特定来源 IP 地址或 IP 地址范围的流量定向到特定的后端服务(或目标实例)。
流量导向对于问题排查和高级配置非常有用。通过流量导向,您可以将某些客户端定向到不同的后端组和/或不同的后端服务配置。例如:
- 流量导向可让您创建两个通过两项后端服务将流量定向到同一后端(实例组或 NEG)的转发规则。两项后端服务可以配置为具有不同的健康检查、不同的会话亲和性或不同的流量分配控制政策(连接跟踪、连接排空和故障切换)。
- 流量导向可让您创建转发规则,以将流量从低带宽后端服务重定向到高带宽后端服务。两项后端服务包含同一组后端虚拟机或端点,但使用加权负载均衡通过不同的权重进行负载均衡。
- 流量导向可让您创建两个通过不同后端(实例组或 NEG)将流量定向到不同后端服务的转发规则。例如,您可以使用不同的机器类型配置一个后端,以便更好地处理来自特定来源 IP 地址的流量。
流量导向使用称为 sourceIPRanges 的转发规则 API 参数进行配置。至少配置了一个来源 IP 范围的转发规则称为“导向转发规则”。
导向转发规则可以使用 sourceIPRanges 参数指定最多包含 64 个来源 IP 地址或 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 地址。例如,一个导向转发规则可以具有来源 IP 范围 203.0.113.0/24,而同一父级的另一导向转发规则可以具有来源 IP 地址 203.0.113.0。
您必须先删除所有导向转发规则,然后才能删除它们依赖的父级转发规则。
如需了解如何在使用导向转发规则时处理传入的数据包,请参阅转发规则选择。
导向更改时的会话亲和性行为
本部分介绍了当为导向转发规则配置的来源 IP 地址范围更新时,会话亲和性可能被破坏的条件:
- 如果在更改导向转发规则的来源 IP 范围后现有连接仍与相同的转发规则匹配,则会话亲和性不会被破坏。如果更改使现有连接与其他转发规则匹配,则:
- 在以下情况下,会话亲和性始终会被破坏:
- 新匹配的转发规则将已建立的连接定向到未引用之前所选后端虚拟机的后端服务(或目标实例)。
- 新匹配的转发规则将已建立的连接定向到引用之前所选后端虚拟机的后端服务,但该后端服务未配置为后端健康状况不佳时保留连接,并且后端虚拟机未通过后端服务的健康检查。
- 如果新匹配的转发规则将已建立的连接定向到后端服务,并且该后端服务引用之前所选的虚拟机,但后端服务的会话亲和性和连接跟踪模式结合生成不同的连接跟踪哈希,则会话亲和性可能会被破坏。
导向更改时保留会话亲和性
本部分介绍了如何在更新导向转发规则的来源 IP 地址范围时避免破坏会话亲和性:
- 指向后端服务的导向转发规则。如果父级转发规则和导向转发规则都指向后端服务,则您需要手动确保会话亲和性和连接跟踪政策的设置相同。如果配置不相同,则Google Cloud 不会自动拒绝配置。
- 指向目标实例的导向转发规则。指向后端服务的父级转发规则可以与指向目标实例的导向转发规则相关联。在这种情况下,导向转发规则会继承父级转发规则中的会话亲和性和连接跟踪政策设置。
如需了解如何配置流量导向,请参阅配置流量导向。
一项区域性后端服务
每个外部直通式网络负载均衡器都有一个区域级后端服务,该服务定义负载均衡器的行为以及流量如何分配到其后端。后端服务的名称是 Google Cloud 控制台中显示的外部直通式网络负载均衡器的名称。
每个后端服务会定义以下后端参数:
协议。后端服务接受由一个或多个区域转发规则指定的 IP 地址和端口(如果已配置)上的流量。后端服务将数据包传递到后端虚拟机,同时保留数据包的来源和目标 IP 地址、协议,以及协议和端口(如果协议基于端口)。
与外部直通式网络负载均衡器搭配使用的后端服务支持以下协议选项:
TCP、UDP或UNSPECIFIED。无论转发规则协议如何,具有
UNSPECIFIED协议的后端服务都可以与任何转发规则结合使用。具有特定协议(TCP或UDP)的后端服务只能由具有相同协议(TCP或UDP)的转发规则引用。具有L3_DEFAULT协议的转发规则只能引用具有UNSPECIFIED协议的后端服务。如需查看包含可能的转发规则和后端服务协议组合的表,请参阅转发规则协议规范。
流量分配。利用后端服务可以根据配置的会话亲和性、连接跟踪政策和加权负载均衡设置来分配流量。后端服务还可以配置为启用连接排空并为负载均衡器指定故障切换后端。其中大多数设置都具有默认值,可以帮助您快速上手。如需了解详情,请参阅外部直通式网络负载均衡器的流量分配。
健康检查。后端服务必须有关联的区域健康检查。
后端。每个后端服务都在单个区域内运行,并将流量分配给同一区域中的实例组或可用区级 NEG。您可以将实例组或可用区级 NEG 用作外部直通式网络负载均衡器的后端,但不能将实例组或可用区级 NEG 组合使用:
每个实例组或 NEG 后端都有一个关联的 VPC 网络,即使该实例组或 NEG 尚未连接到后端服务也是如此。如需详细了解网络如何与每种类型的后端相关联,请参阅实例组后端和网络接口以及