Trusted Cloud by S3NS 内部代理网络负载均衡器是基于代理的负载均衡器,由开源 Envoy 代理软件和 Andromeda 网络虚拟化堆栈提供支持。
内部代理网络负载均衡器是第 4 层负载均衡器,可让您在只能由同一 VPC 网络中的客户端或连接到您的 VPC 网络的客户端访问的内部 IP 地址后面运行和扩缩 TCP 服务流量。负载均衡器首先终止客户端与 Envoy 代理上的负载均衡器之间的 TCP 连接。代理会打开与托管在 Trusted Cloud by S3NS、本地或其他云环境中的后端的第二个 TCP 连接。如需查看更多应用场景,请参阅代理网络负载均衡器概览。
操作模式
您可以在区域级模式下使用此负载均衡器,后文中将其称为区域级内部代理网络负载均衡器。此负载均衡器作为基于开源 Envoy 代理的托管式服务实现。在区域级模式下,所有客户端和后端都位于指定的区域。如果您想仅从一个地理位置传送内容(例如,为了符合合规性规定),请使用此负载均衡器。
架构
下图展示了内部代理网络负载均衡器所需的 Trusted Cloud 资源。
代理专用子网
在上图中,代理专用子网提供了一组 IP 地址,供 Google 用于代表您运行 Envoy 代理。您必须在使用基于 Envoy 的内部代理网络负载均衡器的 VPC 网络的每个区域中创建一个代理专用子网。
下表介绍了内部代理网络负载均衡器的代理专用子网要求:
负载均衡器模式 | 代理专用子网 --purpose 标志的值 |
---|---|
区域级内部代理网络负载均衡器 |
区域级和跨区域负载均衡器不能共享相同的子网 一个区域和 VPC 网络中的所有基于 Envoy 的区域级负载均衡器共享同一个代理专用子网 |
此外:
- 代理专用子网仅用于 Envoy 代理,不可用于您的后端。
- 一个区域和 VPC 网络中的所有内部代理网络负载均衡器的后端虚拟机实例或端点都会收到来自代理专用子网的连接。
- 内部代理网络负载均衡器的 IP 地址不位于代理专用子网中。负载均衡器的 IP 地址由其内部代管式转发规则定义。
转发规则和 IP 地址
转发规则会按照 IP 地址、端口和协议将流量路由到由目标代理和后端服务组成的负载均衡配置。
IP 地址规范。每条转发规则都会引用一个区域级 IP 地址,您可以在 DNS 记录中使用该地址以用于您的应用。您可以预留可用的静态 IP 地址,也可以让 Cloud Load Balancing 为您分配一个 IP 地址。我们建议您预留静态 IP 地址;否则,每当您删除转发规则并创建新的转发规则时,都必须使用新分配的临时 IP 地址更新 DNS 记录。
客户端使用 IP 地址和端口连接到负载均衡器的 Envoy 代理,转发规则的 IP 地址是负载均衡器的 IP 地址(有时称为虚拟 IP 地址或 VIP)。连接到负载均衡器的客户端必须使用 TCP。如需查看受支持的协议的完整列表,请参阅负载均衡器功能比较。
与转发规则关联的内部 IP 地址可以来自与您的后端位于同一网络和区域的子网。
端口指定。您在内部代理网络负载均衡器中使用的每条转发规则可以引用 1-65535 中的单个端口。如需支持多个端口,您必须配置多条转发规则。
下表显示了内部代理网络负载均衡器的转发规则要求:
负载均衡器模式 | 转发规则、IP 地址和代理专用子网 --purpose |
从客户端到负载均衡器前端的路由 |
---|---|---|
区域级内部代理网络负载均衡器 |
负载均衡方案:
代理专用子网
IP 地址
|
后端也必须与负载均衡器位于同一区域。 |
转发规则和 VPC 网络
本部分介绍了外部应用负载均衡器使用的转发规则如何与 VPC 网络相关联。
负载均衡器模式 | VPC 网络关联 |
---|---|
跨区域内部代理网络负载均衡器 区域级内部代理网络负载均衡器 |
区域级内部 IPv4 地址始终位于 VPC 网络内。创建转发规则时,您需要指定从中获取内部 IP 地址的子网。此子网必须与创建的代理专用子网位于同一区域和 VPC 网络中。因此,存在隐含的网络关联。 |
目标代理
内部代理网络负载均衡器会终止来自客户端的 TCP 连接并创建与后端的新连接。默认情况下,系统不会保留原始客户端 IP 地址和端口信息。您可以使用 PROXY 协议来保留此信息。目标代理会将传入请求直接路由到负载均衡器的后端服务。
下表显示了内部代理网络负载均衡器所需的目标代理 API:
负载均衡器模式 | 目标代理 |
---|---|
区域级内部代理网络负载均衡器 | 区域级 regionTargetTcpProxies |
后端服务
后端服务将传入的流量定向到一个或多个关联后端。后端可以是实例组或网络端点组。后端包含均衡模式信息,以根据连接定义完整性(或者,仅对于实例组后端,定义利用率)。
每个内部代理网络负载均衡器都有一个后端服务资源。
下表指定了内部代理网络负载均衡器的后端服务要求:
负载均衡器模式 | 后端服务类型 |
---|---|
区域级内部代理网络负载均衡器 | 区域级 regionBackendServices |
受支持的后端
后端服务支持以下类型的后端:
负载均衡器模式 | 后端服务上支持的后端 | ||||||
---|---|---|---|---|---|---|---|
实例组 | 区域 NEG | 互联网 NEG | 无服务器 NEG | 混合 NEG | GKE | ||
区域级内部代理网络负载均衡器 |
GCE_VM_IP_PORT 类型端点 |
仅限区域级 NEG |
所有后端的类型必须相同(实例组或 NEG)。您可以同时使用不同类型的实例组后端,也可以同时使用不同类型的 NEG 后端,但不能在同一后端服务上同时使用实例组和 NEG 后端。
您可以在同一后端服务中混合使用可用区级 NEG 和混合 NEG。
为最大限度地减少对用户造成的服务中断,请在后端服务上启用连接排空功能。在终止、手动移除或由自动扩缩器移除后端时可能会发生此类中断。如需详细了解如何使用连接排空功能来最大限度地减少服务中断,请参阅启用连接排空功能。
后端和 VPC 网络
对于实例组、可用区级 NEG 和混合连接 NEG,所有后端都必须位于与后端服务相同的项目和区域中。不过,负载均衡器可以引用与后端服务位于同一项目中,但使用其他 VPC 网络的后端。负载均衡器的 VPC 网络与后端 VPC 网络之间的连接可以使用 VPC 网络对等互连、Cloud VPN 隧道或 Cloud Interconnect VLAN 连接进行配置。
后端网络定义
- 对于可用区级 NEG 和混合 NEG,您需要在创建 NEG 时明确指定 VPC 网络。
- 对于托管式实例组,VPC 网络在实例模板中定义。
- 对于非托管式实例组,实例组的 VPC 网络设置为与添加到实例组的第一个虚拟机的
nic0
接口的 VPC 网络相匹配。
后端网络要求
您的后端网络必须满足以下网络要求之一:
后端的 VPC 网络必须与转发规则的 VPC 网络完全匹配。
后端的 VPC 网络必须使用 VPC 网络对等互连连接到转发规则的 VPC 网络。您必须配置子网路由交换,以允许转发规则 VPC 网络中的代理专用子网与后端实例或端点所使用的子网之间进行通信。
对于所有其他类型的后端,所有后端都必须位于同一 VPC 网络和区域中。
后端和网络接口
如果您使用实例组后端,数据包始终会递送到 nic0
。如果您想将数据包发送到非 nic0
接口(vNIC 或 Dynamic Network Interface),请改用 NEG 后端。
如果您使用的是可用区级 NEG 后端,数据包会发送到 NEG 中的端点所代表的任何网络接口。NEG 端点必须与 NEG 明确定义的 VPC 网络位于同一 VPC 网络中。
与后端通信的协议
为内部代理网络负载均衡器配置后端服务时,您需要设置后端服务用来与后端通信的协议。负载均衡器仅使用您指定的协议,不会尝试通过其他协议协商连接。对于与后端的通信,内部代理网络负载均衡器仅支持 TCP。
健康检查
每项后端服务都会指定健康检查,用于定期监控后端是否已准备好从负载均衡器接收连接。这样可以降低向无法处理请求的后端发送请求的风险。健康检查不会检查应用本身是否正常运行。
健康检查协议
最佳实践是使用其协议与后端服务的协议相匹配的健康检查,不过这并非强制性要求,而且也不一定可行。例如,TCP 健康检查能够最准确地测试与后端的 TCP 连接。如需查看受支持的健康检查协议的列表,请参阅“负载均衡器功能比较”页面中的健康检查部分。
下表指定了每种模式的内部代理网络负载均衡器支持的健康检查范围:
负载均衡器模式 | 健康检查类型 |
---|---|
区域级内部代理网络负载均衡器 | 区域级 regionHealthChecks |
如需详细了解健康检查,请参阅以下内容:
防火墙规则
内部代理网络负载均衡器需要以下防火墙规则:
- 允许来自 Google 健康检查探测的流量的入站流量允许规则。如需详细了解特定健康检查探测 IP 地址范围以及必须允许来自这些地址的流量的原因,请参阅探测 IP 范围和防火墙规则。
- 允许来自代理专用子网的流量的入站流量允许规则。
这些防火墙规则的端口必须如下配置:
允许发送到每个后端服务的健康检查的目标端口的流量。
对于实例组后端:通过后端服务的已命名端口与每个实例组上与该已命名端口关联的端口号之间的映射来确定要配置的端口。分配给同一后端服务的各实例组的端口号可能各不相同。
对于
GCE_VM_IP_PORT
NEG 后端,允许发送到端点的端口号的流量。
这些负载均衡器的防火墙规则要求有一些例外情况:
- 混合 NEG 不需要允许来自 Google 健康检查探测范围的流量。但是,如果您在单个后端服务中结合使用混合和可用区级 NEG,则需要允许来自可用区级 NEG 的 Google 健康检查探测范围的流量。
- 对于区域级互联网 NEG,健康检查是可选项。来自使用区域级互联网 NEG 的负载均衡器的流量源自代理专用子网,然后(使用 Cloud NAT)经过 NAT 转换为手动或自动分配的 NAT IP 地址。此流量包括健康检查探测以及从负载均衡器发送到后端的用户请求。如需了解详情,请参阅区域级 NEG:使用 Cloud NAT 网关。
客户端访问
客户端可以位于内部 TCP/UDP 负载均衡器所在的网络中,或者位于使用 VPC 网络对等互连连接的 VPC 网络中。
对于区域级内部代理网络负载均衡器,默认情况下,客户端必须与负载均衡器位于同一区域。客户端还必须与负载均衡器位于同一 VPC 网络中,或者位于使用 VPC 网络对等互连连接到负载均衡器 VPC 网络的 VPC 网络中。
本地客户端可通过 Cloud VPN 隧道或 VLAN 连接访问负载均衡器。这些隧道或连接必须位于负载均衡器所在的区域中。
共享 VPC 架构
内部代理网络负载均衡器支持使用共享 VPC 的网络。借助共享 VPC,您可以明确划分网络管理员和服务开发者的职责。开发团队可以专注于在服务项目中构建服务,网络基础架构团队则负责预配和管理负载均衡。如果您还不熟悉共享 VPC,请阅读共享 VPC 概览文档。
IP 地址 | 转发规则 | 目标代理 | 后端组件 |
---|---|---|---|
必须在与后端相同的项目中定义内部 IP 地址。 对于共享 VPC 网络中将要提供的负载均衡器,您必须在后端虚拟机所在的同一个服务项目中定义内部 IP 地址,并且该地址必须引用宿主项目中所需共享 VPC 网络的子网。地址本身来自所引用子网的主要 IP 地址范围。 |
必须在与后端相同的项目中定义内部转发规则。 对于共享 VPC 网络中将要提供的负载均衡器,您必须在后端虚拟机所在的同一个服务项目中定义内部转发规则,并且该规则必须引用关联的内部 IP 地址所引用的同一个子网(位于共享 VPC 网络中)。 |
必须在与后端相同的项目中定义目标代理。 | 在共享 VPC 情景中,后端虚拟机通常位于服务项目中。您必须在该服务项目中定义区域内部后端服务和健康检查。 |
流量分配
内部代理网络负载均衡器按如下方式将流量分配给其后端:
- 来自单个客户端的连接会发送到同一可用区,前提是该可用区内运行状况良好的后端(实例组或 NEG)可用且具有容量(由均衡模式确定)对于区域内部代理网络负载均衡器,均衡模式可为
CONNECTION
(实例组或 NEG 后端)或UTILIZATION
(仅限实例组后端)。 - 如果您已配置会话亲和性,则来自客户端的连接会发送到同一后端。
- 选择后端后,系统会根据负载均衡政策在实例(在实例组中)或端点(在 NEG 中)之间分配流量。如需了解受支持的负载均衡政策算法,请参阅区域级后端服务 API 文档中的
localityLbPolicy
设置。
会话亲和性
借助会话亲和性,您可以将负载均衡器的后端服务配置为将来自同一个客户端的所有请求发送到同一个后端(只要该后端健康状况良好且具有可用容量)。
内部代理网络负载均衡器提供以下类型的会话亲和性:无
将会话亲和性设置为
NONE
不并不意味着没有会话亲和性。这意味着未明确配置任何会话亲和性选项。始终会执行哈希处理来选择后端。将会话亲和性设置为
NONE
表示负载均衡器使用 5 元组哈希来选择后端。5 元组哈希由来源 IP 地址、来源端口、协议、目标 IP 地址和目标端口组成。会话亲和性
NONE
是默认值。客户端 IP 亲和性
客户端 IP 会话亲和性 (
CLIENT_IP
) 是根据数据包的来源 IP 地址和目标 IP 地址创建的二元组哈希。客户端 IP 亲和性会将来自同一客户端 IP 地址的所有请求转发到同一后端,只要该后端具有容量且健康状况良好。使用客户端 IP 亲和性时,请注意以下几点:
- 只有在数据包直接发送到负载均衡器时,数据包目标 IP 地址才与负载均衡器转发规则的 IP 地址相同。
- 如果数据包在传送到 Trusted Cloud 负载均衡器之前由中间 NAT 或代理系统进行处理,则数据包来源 IP 地址可能与与原始客户端关联的 IP 地址不一致。在许多客户端共享同一有效源 IP 地址的情况下,某些后端虚拟机可能会比其他后端虚拟机接收更多连接或请求。
配置会话亲和性时请注意以下几点:
为进行身份验证或为了安全起见,请勿依赖会话亲和性。只要服务后端和运行状况良好的后端数量发生变化,会话亲和性就会被破坏。如需了解详情,请参阅失去会话亲和性。
--session-affinity
和--subsetting-policy
标志的默认值都是NONE
,并且一次只能将其中一个设置为不同的值。
失去会话亲和性
所有会话亲和性选项都需要满足以下条件:
- 所选后端实例或端点必须保持配置为后端。发生以下任一事件时,会话亲和性可能会被破坏:
- 您从所选实例所属的实例组中移除该实例。
- 托管式实例组自动扩缩或自动修复功能会从托管式实例组中移除所选实例。
- 从相应 NEG 中移除所选端点。
- 从后端服务中移除包含所选实例或端点的实例组或 NEG。
- 所选后端实例或端点必须保持正常运行。如果所选实例或端点未通过健康检查,则会话亲和性可能就会被破坏。
包含所选实例或端点的实例组或 NEG 不得处于其目标容量定义的已满状态。(对于区域托管式实例组,包含所选实例的实例组的可用区组件不得已满。)当实例组或 NEG 已满,而其他实例组或 NEG 未满时,会话亲和性可能会被破坏。由于使用
UTILIZATION
均衡模式时,满载情况可能会以不可预测的方式发生变化,因此您应使用RATE
或CONNECTION
均衡模式,以尽量减少会话亲和性被破坏的情况。已配置的后端实例或端点的总数必须保持不变。当发生以下事件中的至少一项时,已配置的后端实例或端点的数量会发生变化,并且会话亲和性可能会被破坏:
添加新实例或端点:
- 将实例添加到后端服务上的现有实例组。
- 托管式实例组自动扩缩功能会向后端服务上的托管式实例组添加实例。
- 您可以将端点添加到后端服务中的现有 NEG。
- 您可以将非空实例组或 NEG 添加到后端服务。
移除任何实例或端点,而不仅仅是所选的实例或端点:
- 您从实例组后端中移除了任何实例。
- 托管式实例组自动扩缩或自动修复功能会从托管式实例组后端移除任何实例。
- 您可以从 NEG 后端移除任何端点。
- 从后端服务中移除所有现有的非空后端实例组或 NEG。
运行状况良好的后端实例或端点的总数必须保持不变。当发生以下事件中的至少一项时,健康状况良好的后端实例或端点的数量会发生变化,并且会话亲和性可能会被破坏:
- 任何实例或端点通过了健康检查,从健康状况不佳转换为健康状况良好。
- 任何实例或端点未通过健康检查,从健康状态转换为不健康状态或超时。
故障切换
如果后端健康状况不佳,则流量会被自动重定向到健康状况良好的后端。
下表介绍了内部代理网络负载均衡器的故障切换行为:
负载均衡器模式 | 故障切换行为 | 所有后端运行状况都不正常时的行为 |
---|---|---|
区域级内部代理网络负载均衡器 | 负载均衡器为每个可用区实现一种平缓的故障切换算法。当任何可用区中健康状况良好的后端与健康状况不佳的后端比率低于特定百分比阈值时(70%;此阈值无法配置),负载均衡器会开始将流量重定向到其他可用区,而不是等待某个可用区中的所有后端变得健康状况不佳。如果所有可用区中的所有后端健康状况不佳,则负载均衡器会立即终止客户端连接。 Envoy 代理会根据配置的流量分配将流量发送到区域中的健康后端。 |
终止连接 |
GKE 应用的负载均衡
如果您在 Google Kubernetes Engine (GKE) 中构建应用,则可以使用独立的可用区级 NEG 将流量的负载直接均衡到容器。使用独立的可用区级 NEG 时,您需要创建用于创建 NEG 的 Service 对象,然后将 NEG 与后端服务相关联,以便负载均衡器可以连接到 Pod。
相关 GKE 文档:
配额和限制
如需详细了解配额和限制,请参阅配额和限制。
限制
- 内部代理网络负载均衡器不支持 IPv6 流量。
- 内部代理网络负载均衡器不支持共享 VPC 部署,即负载均衡器的前端位于一个宿主项目或服务项目中,后端服务和后端位于另一个服务项目中(也称为跨项目服务引用)。