内部直通式网络负载均衡器是在 Andromeda 网络虚拟化堆栈上构建的区域级负载均衡器。
内部直通式网络负载均衡器在 Virtual Private Cloud (VPC) 网络中同一区域内的内部虚拟机 (VM) 实例之间分配流量。它可让您在只能由位于同一 VPC 网络中的系统或连接到 VPC 网络的系统访问的内部 IP 地址后面运行和扩缩服务。
在以下情况下,可以使用内部直通式网络负载均衡器:
- 您需要为 TCP、UDP、ICMP、ICMPv6、SCTP、ESP、AH 和 GRE 协议使用高性能直通式第 4 层负载均衡器。
- 如果通过 TLS (SSL) 处理流量,则后端可以终止 SSL 流量,而不是负载均衡器。内部直通式网络负载均衡器无法终止 SSL 流量。
- 您需要转发未被代理的原始数据包。 例如,如果您需要保留客户端来源 IP 地址。
- 您的现有设置使用直通式负载均衡器,您希望原封不动地将它迁移。
内部直通式网络负载均衡器适用于许多应用场景。如需查看一些概要示例,请参阅直通式网络负载均衡器概览。
内部直通式网络负载均衡器的工作原理
内部直通式网络负载均衡器具有前端(转发规则)和后端(后端服务)。您可以将实例组或 GCE_VM_IP
可用区级 NEG 用作后端服务的后端。以下示例展示了实例组后端。
与代理负载均衡器不同,内部直通式网络负载均衡器不会终止来自客户端的连接,然后打开与后端的新连接。相反,内部直通式网络负载均衡器会将连接直接从客户端路由到健康的后端,而没有任何中断。来自健康的后端虚拟机的响应会直接发送到客户端,而不是通过负载均衡器返回。TCP 响应使用直接服务器返回功能。如需了解详情,请参阅 TCP 和 UDP 请求与返回数据包。
负载均衡器使用健康检查探测功能来监控后端的健康状况。如需了解详情,请参阅健康检查部分。
Google Cloud Linux 客机环境、Windows 客机环境或等效进程将每个后端虚拟机配置成使用负载均衡器的 IP 地址。对于通过 Google Cloud 映像创建的虚拟机,客机代理(以前称为 Windows 客机环境或 Linux 客机环境)会安装负载均衡器的 IP 地址的本地路由。基于 Container-Optimized OS 的 Google Kubernetes Engine 实例改用 iptables
来实现此功能。
Google Cloud 虚拟网络可管理流量传输,并根据需要扩缩。
协议、方案和范围
每个内部直通式网络负载均衡器均支持以下功能:
- 一种具有负载均衡方案
INTERNAL
和受支持的协议的后端服务。如需了解详情,请参阅后端服务。 - 指定为以下任一项的后端虚拟机:
- 位于一个区域和 VPC 网络中的代管式实例组和非代管式实例组。
- 后端可用区级网络端点组 (NEG)(具有
GCE_VM_IP
类型端点),位于同一区域和 VPC 网络中。NEG 中的端点必须是 NEG 所使用同一子网和可用区中的主要内部 IP 地址。
- 使用实例组后端时支持 IPv4 和 IPv6 流量。具有
GCE_VM_IP
端点的可用区级网络端点组 (NEG) 仅支持 IPv4 流量。 - 一个或多个转发规则,每个规则使用
TCP
、UDP
或L3_DEFAULT
协议,与后端服务的协议匹配。 - 具有自己的唯一 IP 地址的每条转发规则或具有相同公共 IP 地址的多条转发规则。
- 最多包含五个端口或所有端口的每条转发规则。
- 任何区域中的客户端(如果启用了全球访问权限)。
- 与负载均衡器位于同一区域的客户端(如果停用全球访问权限)。
内部直通式网络负载均衡器不支持:
- 多个区域中的后端虚拟机。
- 均衡源自互联网的流量(除非您将内部 TCP/UDP 负载均衡器与外部负载均衡器配合使用)。
- 具有分段标头的 IPv6 数据包。
客户端访问
默认情况下,负载均衡器仅支持与负载均衡器位于同一区域的客户端。客户端可以位于负载均衡器所在的网络中,也可以位于使用 VPC 网络对等互连连接的 VPC 网络中。您可以启用全球访问权限,允许来自任何区域的客户端访问您的内部直通式网络负载均衡器。
下表汇总了客户端访问。
在停用全球访问权限的情况下 | 在启用全球访问权限的情况下 |
---|---|
客户端必须位于负载均衡器所在的地区中。客户端还必须位于负载均衡器所在的 VPC 网络中,或者位于使用 VPC 网络对等互连连接到负载均衡器 VPC 网络的 VPC 网络中。 | 客户端可以位于任何地区中。客户端仍必须位于负载均衡器所在的 VPC 网络中,或者位于使用 VPC 网络对等互连连接到负载均衡器 VPC 网络的 VPC 网络中。 |
本地客户端可通过 Cloud VPN 隧道或 VLAN 连接访问负载均衡器。这些隧道或连接必须位于负载均衡器所在的地区中。 | 本地客户端可通过 Cloud VPN 隧道或 VLAN 连接访问负载均衡器。这些隧道或连接可以位于任何地区中。 |
请求和返回数据包的 IP 地址
当后端虚拟机从客户端接收负载均衡数据包时,数据包的来源和目标如下:
- 来源:客户端的内部 IPv4 地址、IPv6 地址或来自其中一个客户端别名 IPv4 地址范围的 IPv4 地址。
- 目标:负载均衡器转发规则的 IP 地址。 转发规则使用单个 内部 IPv4 地址或内部 IPv6 地址范围。
由于负载均衡器是直通负载均衡器(而非代理),因此数据包到达负载均衡器的转发规则的目的地 IP 地址。在后端虚拟机上运行的软件应配置为执行以下操作:
- 监听(绑定到)负载均衡器的转发规则 IP 地址或任何 IP 地址(
0.0.0.0
或::
) - 如果负载均衡器转发规则的协议支持端口:监听(绑定到)负载均衡器的转发规则中包含的端口
返回数据包直接从负载均衡器的后端虚拟机发送到客户端。返回数据包的来源 IP 地址和目的地 IP 地址取决于协议:
- TCP 面向连接,因此后端虚拟机的来源 IP 地址必须与转发规则的 IP 地址匹配,以便客户端可以将响应数据包与相应的 TCP 连接相关联。
- UDP 是无连接的,因此后端虚拟机可以发送来源 IP 地址与转发规则的 IP 地址或为虚拟机分配的任何 IP 地址相匹配的响应数据包。实际上,大多数客户端都期望响应来自作为其数据包发送目的地的同一 IP 地址。
下表总结了响应数据包的来源和目的地:
流量类型 | 来源 | 目的地 |
---|---|---|
TCP | 负载均衡器转发规则的 IP 地址 | 请求数据包的来源 |
UDP | 对于大多数用例,负载均衡器转发规则的 IP 地址 † | 请求数据包的来源 |
† 可以将响应数据包的来源设置为虚拟机 NIC 的主要内部 IPv4 地址或者别名 IP 地址范围。如果虚拟机启用了 IP 转发,则还可以使用任意 IP 地址来源。不使用转发规则的 IP 地址作为来源属于一种高级方案,因为客户端从内部 IP 地址接收到响应数据包,而该内部 IP 地址与发送请求数据包的 IP 地址不匹配。
架构
具有多个后端的内部直通式网络负载均衡器会在所有这些后端之间分配连接。如需了解分配方法及其配置选项,请参阅流量分配。
您可以将实例组或可用区级 NEG 用作内部直通式网络负载均衡器的后端,但不能将实例组或可用区级 NEG 组合使用:
- 如果您选择实例组,则可以使用非代管式实例组、可用区级代管式实例组、区域级代管式实例组或这些实例组类型的组合。
- 如果选择可用区级 NEG,就必须使用
GCE_VM_IP
可用区级 NEG。
高可用性描述了如何设计不依赖于单个区域的内部负载均衡器。
作为内部直通式网络负载均衡器的后端虚拟机参与的实例必须运行相应的 Linux 或 Windows 客机环境,或是提供同等功能的其他进程。此客机环境必须能够联系元数据服务器(metadata.google.internal
,169.254.169.254
)以读取实例元数据,以便生成本地路由以接受发送到负载均衡器内部 IP 地址的流量。
此图说明了两个单独的实例组中的虚拟机之间的流量分配情况。从客户端实例发送到负载均衡器 IP 地址 (10.10.10.9
) 的流量在任一实例组中的后端虚拟机之间分配。从任意服务后端虚拟机发送的响应直接传送到客户端虚拟机。
您可以将内部直通式网络负载均衡器与自定义模式或自动模式 VPC 网络配合使用。您还可以使用现有的旧式网络创建内部直通式网络负载均衡器。
内部直通式网络负载均衡器由以下 Google Cloud 组件组成。
组件 | 用途 | 要求 |
---|---|---|
内部 IP 地址 | 这是负载均衡器的地址。 | 内部 IP 地址必须与内部转发规则位于同一子网内。子网必须位于后端服务所在的地区和 VPC 网络中。 |
内部转发规则 | 内部转发规则与内部 IP 地址结合后即为负载均衡器的前端。它定义负载均衡器接受的协议和端口,并将流量定向到地区内部后端服务。 | 内部直通式网络负载均衡器的转发规则必须满足以下条件: • load-balancing-scheme 为 INTERNAL 。• 使用的 ip-protocol 为 TCP 或 UDP ,其与后端服务的 protocol 匹配。• 引用的 subnet 位于后端服务所在的 VPC 网络和地区中。 |
地区内部后端服务 | 区域级内部后端服务定义与后端通信所采用的协议,并指定健康检查。后端可以是非代管式实例组、代管式可用区级实例组、代管式区域级实例组或包含 GCE_VM_IP 端点的可用区级 NEG。 |
后端服务必须满足以下条件: • 具有 INTERNAL 类型的 load-balancing-scheme 。• 使用的 protocol 为 TCP 或 UDP ,其与转发规则的 ip-protocol 匹配。• 进行相关的健康检查。 • 拥有关联的地区。转发规则和所有后端必须与后端服务位于同一区域 • 与单个 VPC 网络相关联。如果未指定,则系统将根据每个后端虚拟机的默认网络接口 ( nic0 ) 所使用的网络来推断网络。尽管后端服务未绑定到特定子网,但转发规则的子网必须位于后端服务所在的 VPC 网络中。 |
健康检查 | 每个后端服务都必须进行相关的健康检查。健康检查会定义参数,Google Cloud 根据这些参数确定其所管理的后端是否能够接收流量。只有健康的后端虚拟机才能接收从客户端虚拟机发送到负载均衡器 IP 地址的流量。 |
即使转发规则和后端服务可以使用 TCP 或 UDP ,Google Cloud 也不会对 UDP 流量进行健康检查。如需了解详情,请参阅健康检查和 UDP 流量。 |
内部直通式网络负载均衡器不支持:
- 多个区域中的后端虚拟机。
- 均衡源自互联网的流量(除非您将内部直通式网络负载均衡器与外部负载均衡器结合使用)。
- 具有分段标头的 IPv6 数据包。
内部 IP 地址
内部直通式网络负载均衡器仅支持 IPv4(单栈)子网以及 IPv4 和 IPv6(双栈)子网。如需了解详情,请参阅子网类型。
内部直通式网络负载均衡器至少需要一个转发规则。转发规则引用内部 IP 地址:
- 对于 IPv4 流量,转发规则引用主要 IPv4 子网范围内的 IPv4 地址。
- 对于 IPv6 流量,转发规则引用子网
/64
内部 IPv6 地址范围中的内部/96
IPv6 地址范围。该子网必须是具有内部 IPv6 地址范围(ipv6-access-type
设置为INTERNAL
)的双栈子网。
防火墙配置
内部直通式网络负载均衡器要求对分层防火墙政策和 VPC 防火墙规则进行以下配置:
- 允许来自 IPv4 或 IPv6 健康检查来源范围的入站流量。
- 允许来自客户端 IPv4 或 IPv6 地址来源范围的入站流量。
如需了解详情,请参阅配置防火墙规则。
转发规则
转发规则指定负载均衡器用于接受流量的协议和端口。由于内部直通式网络负载均衡器不是代理,因此它们会将流量传递到使用相同协议和端口的后端。
内部直通式网络负载均衡器至少需要一个内部转发规则。您可以为同一负载均衡器定义多个转发规则。
如果您希望负载均衡器同时处理 IPv4 和 IPv6 流量,请创建两条转发规则:一条指向 IPv4 流量(其指向 IPv4(或双栈)后端),另一条指向 IPv6 流量(其仅指向双栈后端)。IPv4 和 IPv6 转发规则可以引用相同的后端服务,但后端服务必须引用双栈后端。
转发规则必须引用负载均衡器后端组件所在的 VPC 网络和地区中的特定子网。此要求具有以下含义:
- 您为转发规则指定的子网不必与后端虚拟机使用的任何子网相同;但是,子网必须位于转发规则所在的地区中。
- 对于 IPv4 流量,内部转发规则引用所选子网的主要 IPv4 地址范围内的区域级内部 IPv4 地址。此 IPv4 地址可自动选择,您也可以使用静态(预留)IPv4 地址。
- 对于 IPv6 流量,转发规则引用子网内部 IPv6 地址范围中的
/96
IPv6 地址范围。该子网必须是ipv6-access-type
设置为INTERNAL
的双栈子网。/96
IPv6 地址范围会自动分配,您也可以使用预留的内部 IP 地址。
转发规则协议
内部直通式网络负载均衡器支持对每个转发规则使用以下 IPv4 协议选项:TCP
、UDP
或 L3_DEFAULT
。
内部直通式网络负载均衡器支持每条转发规则的以下 IPv6 协议选项:TCP
或 UDP
。
借助 L3_DEFAULT
选项,您可以对 TCP、UDP、ICMP、ICMPv6、SCTP、ESP、AH 和 GRE 协议进行负载均衡。
除了支持 TCP 和 UDP 以外的协议之外,L3_DEFAULT
选项还可以让单个转发规则同时转发多个协议的流量。例如,除了发出 HTTP 请求之外,您还可以 ping 负载均衡器 IP 地址。
使用 TCP
或 UDP
协议的转发规则可以使用与转发规则相同的协议或使用 UNSPECIFIED
协议的后端服务来引用后端服务。
如果您使用的是 L3_DEFAULT
协议,则必须将转发规则配置为接受所有端口上的流量。如需配置所有端口,请使用 Google Cloud CLI 设置 --ports=ALL
,或使用 API 将 allPorts
设置为 True
。
下表总结了如何针对不同协议使用这些设置:
经过负载均衡的流量 | 转发规则协议 | 后端服务协议 |
---|---|---|
TCP(IPv4 或 IPv6) | TCP |
TCP or UNSPECIFIED |
UDP(IPv4 或 IPv6) | UDP |
UDP or UNSPECIFIED |
TCP、UDP、ICMP、ICMPv6、SCTP、ESP、AH 和 GRE | L3_DEFAULT |
UNSPECIFIED |
转发规则和全球访问权限
即使启用了全球访问权限,内部直通式网络负载均衡器的转发规则也是区域级规则。启用全球访问权限后,地区内部转发规则的 allowGlobalAccess
标志设为 true
。
转发规则和端口指定
在创建内部转发规则时,您必须选择以下端口规范之一:
- 按编号指定 1-5 个端口。
- 指定
ALL
以转发所有端口上的流量。
一个支持所有 TCP 端口或所有 UDP 端口的内部转发规则允许后端虚拟机在各自的端口上运行多个应用。发送到给定端口的流量会传送到相应的应用,并且所有应用都使用同一 IP 地址。
如果您需要转发超过五个特定端口的流量,请将防火墙规则和转发规则结合使用。创建转发规则时,请指定所有端口,然后创建仅允许流量进入所需端口的入站 allow
防火墙规则。将防火墙规则应用于后端虚拟机。
转发规则在创建后无法修改。如果您需要更改内部转发规则的指定端口或内部 IP 地址,则必须删除并重建转发规则。
单个后端服务的多个转发规则
您可以配置多个内部转发规则,这些规则全部引用相同的内部后端服务。内部直通式网络负载均衡器至少需要一个内部转发规则。
通过为同一后端服务配置多个转发规则,您可以执行以下操作:
为负载均衡器分配多个 IP 地址。您可以创建多条转发规则,每条转发规则使用唯一的 IP 地址。每条转发规则可以指定所有端口或一组最多五个端口。
将一组使用同一 IP 地址的特定端口分配给负载均衡器。您可以创建多个共享相同 IP 地址的转发规则,其中每个转发规则使用一组最多 5 个端口。这是配置指定所有端口的单个转发规则的替代方案。
如需详细了解涉及两个共享内部 IP 地址的两条或多条内部转发规则的场景,请参阅具有相同 IP 地址的多条转发规则。
使用多条内部转发规则时,请务必将在后端虚拟机上运行的软件配置为绑定到所有转发规则 IP 地址或任何地址(对于 IPv4 为 0.0.0.0/0
,对于 IPv6 为 ::/0
)。通过负载均衡器传送的数据包的目标 IP 地址是与相应内部转发规则关联的内部 IP 地址。如需了解详情,请参阅 TCP 和 UDP 请求与返回数据包。
后端服务
每个内部直通式网络负载均衡器都有一个用于定义后端参数和行为的区域级内部后端服务。该后端服务的名称是 Google Cloud 控制台中显示的内部直通式网络负载均衡器的名称。
每个后端服务会定义以下后端参数:
协议。后端服务支持 IPv4 和 IPv6 流量。如果协议具有端口概念(例如
TCP
或UDP
),后端服务会将数据包传送到流量发送到的同一目标端口上的后端虚拟机。后端服务支持以下 IPv4 协议选项:
TCP
、UDP
或UNSPECIFIED
。后端服务支持以下 IPv6 协议选项:
TCP
或UDP
。后端服务协议必须与转发规则协议协调。如需查看包含可能的转发规则和后端服务协议组合的表,请参阅转发规则协议规范。
健康检查。后端服务都必须进行相关的健康检查。
每个后端服务都在单个地区内运行,并为单个 VPC 网络中的后端虚拟机分配流量:
一种后端,一个区域。后端是实例组或具有
GCE_VM_IP
端点的可用区级 NEG,位于后端服务和转发规则所在的区域。实例组后端可以是非代管式实例组、可用区级代管式实例组或区域级代管式实例组。可用区级 NEG 后端必须使用GCE_VM_IP
端点。一个 VPC 网络。每个实例组或 NEG 后端都有一个关联的 VPC 网络,即使该实例组或 NEG 尚未连接到后端服务也是如此。如需详细了解网络如何与每种类型的后端相关联,请参阅实例组后端和网络接口以及可用区级 NEG 后端和网络接口。后端服务资源本身也有一个关联的 VPC 网络,该网络可以显式定义或隐式定义。如需详细了解后端服务的网络,请参阅后端服务网络规范和后端服务网络规则。
实例组后端和网络接口
与实例组关联的 VPC 网络是每个成员虚拟机的 nic0
网络接口将要使用的 VPC 网络。
- 对于托管式实例组 (MIG),实例组的 VPC 网络是在实例模板中定义的。
- 对于非代管式实例组,实例组的 VPC 网络将被定义为您添加到非代管式实例组的第一个虚拟机实例的
nic0
网络接口所用的 VPC 网络。
在一个给定实例组中(无论是代管式还是非代管式),所有虚拟机实例的 nic0
网络接口都必须位于同一 VPC 网络中。每个成员虚拟机都可以有选择性地具有其他网络接口(nic1
到 nic7
),但每个网络接口必须连接到不同的 VPC 网络。这些网络还必须不同于与该实例组关联的 VPC 网络。
可用区级 NEG 后端和网络接口
创建具有 GCE_VM_IP
端点的新可用区级 NEG 时,您必须先将 NEG 与 VPC 网络的子网明确关联,然后才能向 NEG 添加任何端点。创建 NEG 后,子网和 VPC 网络都无法更改。
在一个给定 NEG 中,每个 GCE_VM_IP
端点实际上是一个网络接口;网络接口必须位于与 NEG 关联的子网中。作为 Compute Engine 实例来说,网络接口可以使用任何标识符(nic0
到 nic7
);而作为 NEG 中的端点来说,网络接口使用其主要 IPv4 地址来标识。
您可以通过以下两种方式向 NEG 添加 GCE_VM_IP
端点:
- 如果在添加端点时仅指定了虚拟机名称(而没有指定任何 IP 地址),则 Google Cloud 会要求虚拟机具有的网络接口在与 NEG 关联的子网中。Google Cloud 为端点选择的 IP 地址是与 NEG 关联的子网中虚拟机网络接口的主要内部 IPv4 地址。
- 如果您在添加端点时同时指定了虚拟机名称和 IP 地址,则您提供的 IP 地址必须是虚拟机其中一个网络接口的主要内部 IPv4 地址。该网络接口必须位于与 NEG 关联的子网中。请注意,指定 IP 地址是多余的操作,因为与 NEG 关联的子网中只能有一个网络接口。
后端服务网络规范
您可以在创建后端服务时使用 --network
标志,明确将 VPC 网络与后端服务相关联。后端服务网络规则会立即生效。
如果您在创建后端服务时省略了 --network
标志,则 Google Cloud 会使用以下某个限定事件来隐式设置后端服务的关联 VPC 网络。后端服务的关联 VPC 网络一旦设置便无法更改:
如果后端服务还没有任何关联的后端,并且您将第一个转发规则配置为引用后端服务,则 Google Cloud 会将后端服务的关联 VPC 网络设置为此转发规则所用子网所在的 VPC 网络。
如果后端服务还没有引用它的转发规则,并且您将第一个实例组后端添加到后端服务,则 Google Cloud 会将后端服务的 VPC 网络设置为与该第一个实例组后端关联的 VPC 网络。这意味着后端服务的关联 VPC 网络将是该第一个实例组后端中每个虚拟机的
nic0
网络接口所用的网络。如果后端服务还没有引用它的转发规则,并且您将第一个可用区级 NEG 后端(具有
GCE_VM_IP
端点)添加到后端服务,则 Google Cloud 会将后端服务的 VPC 网络设置为与该第一个 NEG 后端关联的 VPC 网络。
在系统通过限定事件设置后端服务的 VPC 网络后,您后续添加的任何其他转发规则、后端实例组或后端可用区级 NEG 都必须遵循相应的后端服务网络规则。
后端服务网络规则
在后端服务与特定 VPC 网络关联后,以下规则适用:
配置转发规则来引用后端服务时,转发规则必须使用后端服务 VPC 网络的子网。 转发规则和后端服务不能使用不同的 VPC 网络,即使这些网络使用 VPC 网络对等互连进行连接也不例外。
添加实例组后端时,必须满足以下条件之一:
- 与实例组关联的 VPC 网络(即实例组中每个虚拟机的
nic0
网络接口所用的 VPC 网络)必须与后端服务的关联 VPC 网络匹配。 - 每个后端虚拟机在与后端服务关联的 VPC 网络中都必须有一个非
nic0
接口(即可以从nic1
到nic7
)。
- 与实例组关联的 VPC 网络(即实例组中每个虚拟机的
添加具有
GCE_VM_IP
端点的可用区级 NEG 后端时,与 NEG 关联的 VPC 网络必须与后端服务关联的 VPC 网络相匹配。
后端子集
后端子集化是一项可选功能,通过限制流量分配到的后端数量来提高性能。
当单个负载均衡器需要支持超过 250 个后端虚拟机时,才需要启用子集。 如需了解详情,请参阅内部直通式网络负载均衡器的后端子集化。
健康检查
负载均衡器的后端服务必须与全球或地区健康检查相关联。VPC 网络之外的特殊路由可以促进健康检查系统与后端之间的通信。
您可以使用现有健康检查,也可以定义新的健康检查。内部直通式网络负载均衡器使用健康检查状态来确定如何路由新的连接,如流量分配中所述。
您可以使用以下任何健康检查协议;健康检查的协议不必与负载均衡器的协议匹配:
- HTTP、HTTPS 或 HTTP/2。如果您的后端虚拟机使用 HTTP、HTTPS 或 HTTP/2 来处理流量,则最好使用与该协议匹配的健康检查,因为基于 HTTP 的健康检查提供了适用于该协议的选项。如果通过内部直通式网络负载均衡器处理 HTTP 类型的流量,则代表负载均衡器使用的协议为 TCP。
- SSL 或 TCP。如果您的后端虚拟机不处理 HTTP 类型的流量,则应使用 SSL 或 TCP 健康检查。
无论您创建何种类型的健康检查,Google Cloud 都会向内部直通式网络负载均衡器转发规则的 IP 地址发送健康检查探测,发送到负载均衡器的后端服务选择的 VPC 网络中的网络接口。这模拟了负载均衡流量的传送方式。在后端虚拟机上运行的软件必须同时响应发送到每个转发规则 IP 地址的负载均衡流量和健康检查探测(该软件必须侦听 0.0.0.0:<port>
而不是分配给网络接口的特定 IP 地址)。如需了解详情,请参阅探测数据包的目标。
健康检查和 UDP 流量
Google Cloud 不提供使用 UDP 协议的健康检查。当您对 UDP 流量使用内部直通式网络负载均衡器时,必须在后端虚拟机上运行基于 TCP 的服务,以提供健康检查信息。
在此配置中,客户端请求使用 UDP 协议进行负载均衡,而 TCP 服务用于向 Google Cloud 健康检查探测器提供信息。例如,您可以在每个后端虚拟机上运行一个向 Google Cloud 返回 HTTP 200 响应的简单 HTTP 服务器。在此示例中,您应该使用在后端虚拟机上运行的专属逻辑来确保仅当 UDP 服务已正确配置并运行时,HTTP 服务器才会返回 200。
高可用性架构
内部直通式网络负载均衡器具有源于设计的高可用性。无需采用特殊步骤即可使负载均衡器具有高可用性,因为该机制不依赖于单个设备或虚拟机实例。
如需确保将后端虚拟机实例部署到多个区域,请遵循以下部署建议:
如果您可以使用实例模板来部署软件,请使用区域代管式实例组。区域代管式实例组可自动在多个可用区之间分配流量,提供最佳选择以避免在任何给定可用区发生潜在问题。
如果您使用区域代管实例组或非代管实例组,请对同一后端服务使用(在同一地区内)不同区域中的多个实例组。使用多个区域可防止在任何给定区域出现潜在问题。
共享 VPC 架构
下表总结了与共享 VPC 网络搭配使用的内部直通式网络负载均衡器的组件要求。如需查看示例,请参阅“预配共享 VPC”页面上的“创建内部直通式网络负载均衡器”。
IP 地址 | 转发规则 | 后端组件 |
---|---|---|
必须在后端虚拟机所在的项目中定义内部 IP 地址。 对于共享 VPC 网络中将要提供的负载均衡器,您必须在后端虚拟机所在的同一个服务项目中定义 Google Cloud 内部 IP 地址,并且该对象必须引用宿主项目中所需的共享 VPC 网络的子网。地址本身来自所引用子网的主要 IP 地址范围。 如果您在服务项目中创建内部 IP 地址,并且 IP 地址子网位于服务项目的 VPC 网络中,则内部直通式网络负载均衡器是服务项目的本地地址。它不在任何共享 VPC 宿主项目本地。 |
必须在后端虚拟机所在的项目中定义内部转发规则。 对于共享 VPC 网络中将要提供的负载均衡器,您必须在后端虚拟机所在的同一个服务项目中定义内部转发规则,并且该规则必须引用关联的内部 IP 地址所引用的同一个子网(位于共享 VPC 网络中)。 如果您在服务项目中创建内部转发规则,并且转发规则的子网位于服务项目的 VPC 网络中,则内部直通式网络负载均衡器是服务项目的本地地址。它不在任何共享 VPC 宿主项目本地。 |
在共享 VPC 情景中,后端虚拟机位于服务项目中。您必须在该服务项目中定义地区内部后端服务和健康检查。 |
流量分配
内部直通式网络负载均衡器分配新连接的方式取决于您是否配置了failover:
如果您尚未配置故障切换,并且至少有一个后端虚拟机健康,则内部直通式网络负载均衡器会将新连接分配到其健康的后端虚拟机。当所有后端虚拟机均不健康时,作为最后的补救手段,负载均衡器会在所有后端之间分配新连接。在这种情况下,负载均衡器会将每个新连接路由到不健康的后端虚拟机。
如果已配置故障切换,内部直通式网络负载均衡器会根据所配置的故障切换政策在其活跃池中的虚拟机之间分配新连接。当所有后端虚拟机都不健康时,您可以从以下行为中选择一个:
分配新连接的方法取决于负载均衡器的会话亲和性设置。
健康检查状态控制新连接的分配。默认情况下,TCP 连接保留在不健康的后端上。如需了解详情以及如何更改此行为,请参阅不健康的后端上的连接持久性。
后端选择和连接跟踪
内部直通式网络负载均衡器使用可配置的后端选择和连接跟踪算法来确定流量如何分配到后端虚拟机。内部直通式网络负载均衡器使用以下算法在后端虚拟机之间(如果已配置failover,则在其活跃池中)分配数据包:
- 如果负载均衡器的连接跟踪表中包含一个与传入数据包的特征匹配的条目,则该数据包会发送到由该连接跟踪表条目指定的后端。该数据包被视为之前建立的连接的一部分,因此数据包会发送到负载均衡器之前确定并记录在其连接跟踪表中的后端虚拟机。
当负载均衡器收到没有对应的连接跟踪条目的数据包时,负载均衡器会执行以下操作:
负载均衡器选择一个后端。负载均衡器根据配置的会话亲和性计算哈希值。它使用此哈希来选择一个后端:
- 如果至少有一个后端健康,则该哈希会选择其中一个健康的后端。
- 如果所有后端都不健康,并且未配置故障切换政策,则哈希会选择其中一个后端。
- 如果所有后端都不健康,但配置了故障切换政策,并且故障切换政策未配置为在这种情况下丢弃流量,则哈希会选择一个主要虚拟机后端。
默认会话亲和性
NONE
使用数据包的来源 IP 地址、来源端口、目的地 IP 地址、目的地端口和协议的 5 元组哈希。您可以通过使用较少信息的哈希算法自定义后端选择。如需查看所有受支持的选项,请参阅会话亲和性选项。
负载均衡器向其连接跟踪表中添加一个条目。此条目记录了所选数据包连接的后端,以便来自此连接的所有未来数据包都发送到同一后端。是否使用连接跟踪取决于协议:
对于 TCP 和 UDP 数据包,连接跟踪始终处于启用状态且无法关闭。默认情况下,连接跟踪为 5 元组,但也可以将其配置为小于 5 元组。
当连接跟踪哈希为 5 元组时,TCP SYN 数据包始终会在连接跟踪表中创建一个新条目。
在以下情况下,使用默认的 5 元组连接跟踪:- 跟踪模式为
PER_CONNECTION
(所有会话亲和性),或 - 跟踪模式为
PER_SESSION
且会话亲和性为NONE
,或 - 跟踪模式为
PER_SESSION
且会话亲和性为CLIENT_IP_PORT_PROTO
。
如需详细了解启用连接跟踪的时间以及启用连接跟踪时使用的跟踪方法,请参阅连接跟踪模式。
此外,请注意以下事项:
- 默认情况下,连接跟踪表中的条目在负载均衡器处理最后一个与条目匹配的数据包后 600 秒,连接跟踪表中的条目会过期。如需详细了解如何自定义空闲超时,请参阅空闲超时。
- 根据协议,负载均衡器可能会在后端不健康时移除连接跟踪表条目。如需了解详情以及如何自定义此行为,请参阅不健康的后端上的连接持久性。
- 跟踪模式为
会话亲和性选项
会话亲和性控制从客户端到负载均衡器的后端虚拟机的新连接分配。当您的后端虚拟机需要跟踪其客户端的状态信息时,您可以设置会话亲和性。这是 Web 应用的常见要求。
会话亲和性以尽力而为的方式工作。
内部直通式网络负载均衡器支持您为整个内部后端服务(而非每个后端实例组)指定的以下会话亲和性选项。
- 无 (
NONE
)。来源 IP 地址、来源端口、协议、目的地 IP 地址和目的地端口的 5 元组哈希 - 客户端 IP,无目的地 (
CLIENT_IP_NO_DESTINATION
)。仅从来源 IP 地址创建的 1 元组哈希。 - 客户端 IP (
CLIENT_IP
)。来源 IP 地址和目的地 IP 地址的 2 元组哈希。外部直通式网络负载均衡器将此会话亲和性选项称为“客户端 IP、目的地 IP”。 - 客户端 IP、目的地 IP、协议 (
CLIENT_IP_PROTO
)。来源 IP 地址、目的地 IP 地址和协议的 3 元组哈希 - 客户端 IP、客户端端口、目标 IP、目标端口、协议 (
CLIENT_IP_PORT_PROTO
)。来源 IP 地址、来源端口、协议、目标 IP 地址和目标端口的 5 元组哈希
除非将负载均衡器用作自定义静态路由的下一个跃点,否则数据包的目的地 IP 地址必须与负载均衡器转发规则的 IP 地址匹配才能将数据包发送到负载均衡器。如需了解将负载均衡器用作自定义静态路由的下一个跃点时的注意事项,请参阅会话亲和性和下一个跃点内部直通式网络负载均衡器。
会话亲和性和下一个跃点内部直通式网络负载均衡器
当您将静态路由配置为使用下一个跃点内部直通式网络负载均衡器时,负载均衡器会使用之前讨论过的相同的后端选择和连接跟踪方法。后端选择的实现方式仍然是根据配置的会话亲和性计算哈希。除了 CLIENT_IP_NO_DESTINATION
会话亲和性之外,后端选择哈希还部分取决于数据包目标 IP 地址。
当内部直通式网络负载均衡器是静态路由的下一个跃点时,目标 IP 地址不限于负载均衡器的转发规则 IP 地址。相反,数据包的目标 IP 地址可以是处于静态路由目标范围内的任何 IP 地址。
如果已配置且健康状况良好的后端虚拟机的数量保持不变(未配置故障切换时,或者配置了故障切换但未发生故障切换或故障恢复事件时),负载均衡器的行为如下:
如果只有一个已配置且健康状况良好的后端虚拟机(在活跃池中,如果已配置故障切换),那么您使用哪种会话亲和性都无关紧要,因为所有哈希都会映射到一个后端虚拟机。
如果有两个或更多已配置且健康状况良好的后端虚拟机(在活跃池中,如果已配置故障切换),那么会话亲和性的选择非常重要:
如果您需要同一后端虚拟机仅根据数据包的来源 IP 地址(而不考虑数据包目标 IP 地址)处理来自客户端的所有数据包,请使用
CLIENT_IP_NO_DESTINATION
会话亲和性。根据流量模式,某些后端虚拟机可能会比其他后端虚拟机接收更多数据包或更多连接。如果您使用的会话亲和性选项不是
CLIENT_IP_NO_DESTINATION
,负载均衡器会根据至少包含数据包的来源 IP 地址和目标 IP 地址两者的信息来选择后端虚拟机。如果从同一客户端发送的数据包使用相同的来源 IP 地址,但使用不同的目标 IP 地址,它们可以路由到不同的后端虚拟机。
连接跟踪模式
跟踪模式指定要使用的连接跟踪算法。跟踪模式有两种:PER_CONNECTION
(默认)和 PER_SESSION
。
PER_CONNECTION
(默认值)。在此模式下,无论会话亲和性设置如何,系统始终会按照每个 5 元组来跟踪 TCP 和 UDP 流量。这意味着用于连接跟踪(5 元组)的键可能与配置的会话亲和性设置(例如,具有CLIENT_IP_PROTO
设置的 3 元组)不同。因此,会话亲和性可能会被拆分,并且如果一组后端或其健康状况发生更改,会话的新连接可能会选择其他后端。PER_SESSION
。在此模式下,将会根据配置的会话亲和性对 TCP 和 UDP 流量进行跟踪。也就是说,如果会话亲和性为CLIENT_IP
或CLIENT_IP_PROTO
,则配置此模式会分别生成 2 元组和 3 元组连接跟踪。这在破坏亲和性开销很大并且在添加更多后端之后甚至应该避免破坏亲和性的情况下是可取的。
如果会话亲和性设置为 NONE
或 CLIENT_IP_PORT_PROTO
,则连接跟踪模式设置是多余的。如需了解这些跟踪模式如何与每个协议的不同会话亲和性设置结合使用,请参阅下表。
后端选择 | 连接跟踪模式 | ||
---|---|---|---|
会话亲和性设置 | 用于选择后端的哈希方法 | PER_CONNECTION (默认) |
PER_SESSION |
默认:无会话亲和性
|
5 元组哈希 | 5 元组连接跟踪 | 5 元组连接跟踪 |
客户端 IP,无目的地
|
1 元组哈希 | 5 元组连接跟踪 | 1 元组连接跟踪 |
客户端 IP
(与用于外部直通式网络负载均衡器的客户端 IP、目的地 IP 相同) |
2 元组哈希 | 5 元组连接跟踪 | 2 元组连接跟踪 |
客户端 IP、目的地 IP、协议
|
3 元组哈希 | 5 元组连接跟踪 | 3 元组连接跟踪 |
客户端 IP、客户端端口、目的地 IP、目的地端口、协议
|
5 元组哈希 | 5 元组连接跟踪 | 5 元组连接跟踪 |
如需了解如何更改连接跟踪模式,请参阅配置连接跟踪政策。
不健康的后端的连接持久性
不健康的后端设置上的连接持久性用于控制所选后端上的现有连接在后端变得不健康之后(只要该后端保留在负载均衡器的已配置后端实例组中)是否仍存在。
本部分介绍的行为不适用于从实例组中移除后端虚拟机或从后端服务中移除实例组的情况。在这种情况下,已建立的连接仅会按启用连接排空中所述持续存在。
以下连接持久性选项可用:
DEFAULT_FOR_PROTOCOL
(默认)NEVER_PERSIST
ALWAYS_PERSIST
下表总结了连接持久性选项,以及连接针对不同协议、会话亲和性选项和跟踪模式的持久程度。
不健康的后端上的连接持久性选项 | 连接跟踪模式 | |
---|---|---|
PER_CONNECTION |
PER_SESSION |
|
DEFAULT_FOR_PROTOCOL |
TCP:连接持续存在于不健康的后端上(所有会话亲和性) UDP:连接永远不会在不健康的后端上持续存在 |
TCP:如果会话亲和性为 UDP:连接永远不会在不健康的后端上持续存在 |
NEVER_PERSIST |
TCP、UDP:连接永远不会在不健康的后端上持续存在 | |
ALWAYS_PERSIST
|
TCP:连接在不健康的后端上持续存在(所有会话亲和性) 此选项应仅用于高级使用场景。 |
无法进行配置 |
如需了解如何更改连接持久性行为,请参阅配置连接跟踪政策。
空闲超时
默认情况下,连接跟踪表中的条目在负载均衡器处理最后一个与条目匹配的数据包后 600 秒,连接跟踪表中的条目会过期。只有在连接跟踪小于 5 元组(即会话亲和性配置为 CLIENT_IP
或 CLIENT_IP_PROTO
,并且跟踪模式为 PER_SESSION
)时,才能修改此默认空闲超时值。
最大可配置空闲超时值为 57600 秒(16 小时)。
如需了解如何更改空闲超时值,请参阅配置连接跟踪政策。
测试来自单个客户端的连接
在测试从单个客户端系统到内部直通式网络负载均衡器的 IP 地址的连接时,请注意以下几点:
如果该客户端系统不是进行负载均衡的虚拟机(即非后端虚拟机),则新连接会传送到负载均衡器的健康的后端虚拟机。但是,由于所有会话亲和性选项至少会依赖客户端系统的 IP 地址,因此来自同一客户端的连接可能会以超出预期的频率分配到同一个后端虚拟机。
实际上,这意味着您无法通过从单个客户端连接到内部直通式网络负载均衡器来准确监控流量的分配情况。监控流量分配所需的客户端数量因负载均衡器类型、流量类型和健康的后端数量而异。
如果客户端虚拟机是负载均衡器的后端虚拟机,则发送到负载均衡器转发规则的 IP 地址的连接始终由客户端/后端虚拟机应答。无论后端虚拟机是否健康,都会发生这种情况。发送到负载均衡器 IP 地址的所有流量都会发生这种情况,而不仅仅是负载均衡器内部转发规则中指定的协议和端口上的流量。
如需了解详情,请参阅从负载均衡虚拟机发送请求。
UDP 分段
内部直通式网络负载均衡器可以处理分段和未分段的 UDP 数据包。如果您的应用使用分段的 UDP 数据包,请注意以下几点:- UDP 数据包在到达 Google Cloud VPC 网络之前可能会被分段。
- Google Cloud VPC 网络会在 UDP 分段到达时进行转发(无需等待所有分段到达)。
- 非 Google Cloud 网络和本地网络设备可以在收到 UDP 片段时进行转发,将经过分段的 UDP 数据包延迟到所有片段到达,或舍弃经过分段的 UDP 数据包。如需了解详情,请参阅网络提供商或网络设备的文档。
如果您预期会对 UDP 数据包进行分段并需要将其路由到相同的后端,请使用以下转发规则和后端服务配置参数:
转发规则配置:每个负载均衡的 IP 地址只使用一个
UDP
转发规则,并将转发规则配置为接受所有端口的流量。这确保了所有数据段到达相同的转发规则。即使分段的数据包(第一个数据段除外)缺少目标端口,但在配置转发规则以处理所有端口的流量时,也会将其配置为接收没有端口信息的 UDP 数据段。如需配置所有端口,请使用 Google Cloud CLI 设置--ports=ALL
,或使用 API 将allPorts
设置为True
。后端服务配置:将后端服务的会话亲和性设置为
CLIENT_IP
(2 元组哈希)或CLIENT_IP_PROTO
(3 元组哈希),以便为包含端口信息的 UDP 数据包和缺少端口信息的 UDP 数据段(第一个数据段除外)选择同一后端。将后端服务的连接跟踪模式设置为PER_SESSION
,以便使用相同的 2 元组或 3 元组哈希构建连接跟踪表条目。
故障切换
借助内部直通式网络负载均衡器,您可以将某些后端指定为故障切换后端。只有当主要后端实例组中健康的虚拟机数量低于可配置阈值时,才会使用这些后端。默认情况下,如果所有主要虚拟机和故障切换虚拟机都不健康,作为最后的补救手段,Google Cloud 会仅在所有主要虚拟机之间分配新连接。
向内部直通式网络负载均衡器的后端服务添加后端时,默认情况下该后端是主要后端。您可以在将某个后端添加到负载均衡器的后端服务时将其指定为故障切换后端,或者在以后通过修改后端服务将该后端指定为故障切换后端。
如需了解内部直通式网络负载均衡器中的故障切换详细概念性概览,请参阅内部直通式网络负载均衡器的故障切换。
配额和限制
如需了解配额和限制,请参阅负载均衡资源配额和限制。
限制
- 您无法使用 Google Cloud 控制台创建具有可用区级 NEG 后端的内部直通式网络负载均衡器。
后续步骤
- 如需配置和测试内部直通式网络负载均衡器,请参阅设置内部直通式网络负载均衡器。
- 如需为内部直通式网络负载均衡器配置 Cloud Monitoring,请参阅内部直通式网络负载均衡器日志记录和监控。
- 如需为内部直通式网络负载均衡器进行问题排查,请参阅内部直通式网络负载均衡器问题排查。