Google Cloud 内部代理网络负载均衡器是基于代理的负载均衡器,由开源 Envoy 代理软件和 Andromeda 网络虚拟化堆栈提供支持。
内部代理网络负载均衡器是第 4 层负载均衡器,可让您在只能由同一 VPC 网络中的客户端或连接到您的 VPC 网络的客户端访问的内部 IP 地址后面运行和扩缩 TCP 服务流量。负载均衡器首先终止客户端与 Envoy 代理上的负载均衡器之间的 TCP 连接。代理会打开与托管在 Google Cloud、本地或其他云环境中的后端的第二个 TCP 连接。如需了解更多使用场景,请参阅代理网络负载均衡器概览。
操作模式
您可以使用以下模式配置内部代理网络负载均衡器:
区域级内部代理网络负载均衡器。这是一个区域级负载均衡器,它作为基于开源 Envoy 代理的托管式服务实现。区域模式可确保所有客户端和后端都来自指定区域,这有助于满足区域合规性需求。
跨区域内部代理网络负载均衡器。这是一个多区域负载均衡器,它作为基于开源 Envoy 代理的托管式服务实现。跨区域模式使您可以将流量负载均衡到全球分布的后端服务,包括确保流量定向到最近后端的流量管理。此负载均衡器还可实现高可用性。将后端放在多个区域中有助于避免单区域故障。如果一个区域的后端发生故障,流量可以故障切换到另一个区域。
下表介绍了区域模式与跨区域模式之间的重要区别:
功能 区域级内部代理网络负载均衡器 跨区域内部代理网络负载均衡器 负载均衡器的虚拟 IP 地址 (VIP)。 从特定 Google Cloud 区域的子网分配。 从特定 Google Cloud 区域的子网分配。 多个区域的 VIP 地址可以共享同一全球后端服务。
客户端访问 默认情况下不可全球访问。
您可以视需要启用全球访问权限。始终可在全球范围内访问。任何 Google Cloud 区域的客户端都可以将流量发送到负载均衡器。 负载均衡后端 区域级后端。
负载均衡器只能将流量发送到与负载均衡器的代理位于同一区域的后端。全球后端。
负载均衡器可以将流量发送到任何区域的后端。高可用性和故障切换 自动故障切换到同一区域内的健康后端。 自动故障切换到同一区域或不同区域中的健康后端。
识别模式
Cloud 控制台
在 Google Cloud 控制台中,转到负载均衡页面。
在负载均衡器标签页中,您可以看到负载均衡器类型、协议和区域。如果区域为空,则负载均衡器处于跨区域模式。下表总结了如何识别负载均衡器的模式。
负载均衡器模式 负载均衡器类型 访问权限类型 区域 区域级内部代理网络负载均衡器 网络(代理) 内部 指定一个区域 跨区域内部代理网络负载均衡器 网络(代理) 内部
gcloud
如需确定负载均衡器的模式,请运行以下命令:
gcloud compute forwarding-rules describe FORWARDING_RULE_NAME
在命令输出中,检查负载均衡方案、地区和网络层级。下表总结了如何识别负载均衡器的模式。
负载均衡器模式 负载均衡方案 转发规则 区域级内部代理网络负载均衡器 INTERNAL_MANAGED 区域 跨区域内部代理网络负载均衡器 INTERNAL_MANAGED 全球
架构
下图显示了内部代理网络负载均衡器所需的 Google Cloud 资源。
区域
下图展示了高级层级的区域级内部代理网络负载均衡器部署的组件。
跨区域
下图展示了同一 VPC 网络中高级层级的跨区域内部代理网络负载均衡器部署的组件。每条全球转发规则都使用客户端用于连接的区域级 IP 地址。
代理专用子网
在上图中,代理专用子网提供了一组 IP 地址,供 Google 用于代表您运行 Envoy 代理。您必须在使用基于 Envoy 的内部代理网络负载均衡器的 VPC 网络的每个区域中创建一个代理专用子网。
下表介绍了内部代理网络负载均衡器的代理专用子网要求:
负载均衡器模式 | 代理专用子网 --purpose 标志的值 |
---|---|
区域级内部代理网络负载均衡器 |
区域级和跨区域负载均衡器不能共享相同的子网 一个区域和 VPC 网络中的所有基于 Envoy 的区域级负载均衡器共享同一个代理专用子网 |
跨区域内部代理网络负载均衡器 |
区域级和跨区域负载均衡器不能共享相同的子网 基于 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 地址
|
您可以启用全球访问权限,允许来自任何区域的客户端访问您的负载均衡器。 后端也必须与负载均衡器位于同一区域。 |
跨区域内部代理网络负载均衡器 |
负载均衡方案:
代理专用子网
IP 地址
|
全球访问权限默认启用,以允许来自任何区域的客户端访问您的负载均衡器。后端可以位于多个区域中。 |
转发规则和 VPC 网络
本部分介绍了外部应用负载均衡器使用的转发规则如何与 VPC 网络相关联。
负载均衡器模式 | VPC 网络关联 |
---|---|
跨区域内部代理网络负载均衡器 区域级内部代理网络负载均衡器 |
区域级内部 IPv4 地址始终位于 VPC 网络内。创建转发规则时,您需要指定从中获取内部 IP 地址的子网。此子网必须位于创建代理专用子网的同一区域和 VPC 网络中。因此,存在隐含的网络关联。 |
目标代理
内部代理网络负载均衡器会终止来自客户端的 TCP 连接并创建与后端的新连接。默认情况下,系统不会保留原始客户端 IP 地址和端口信息。您可以使用 PROXY 协议来保留此信息。目标代理会将传入请求直接路由到负载均衡器的后端服务。
下表显示了内部代理网络负载均衡器所需的目标代理 API:
负载均衡器模式 | 目标代理 |
---|---|
区域级内部代理网络负载均衡器 | 区域级 regionTargetTcpProxies |
跨区域内部代理网络负载均衡器 | 全球 targetTcpProxies |
后端服务
后端服务将传入的流量定向到一个或多个关联后端。后端可以是实例组或网络端点组。后端包含均衡模式信息,以根据连接定义完整性(或者,仅对于实例组后端,定义利用率)。
每个内部代理网络负载均衡器都有一个后端服务资源。
下表指定了内部代理网络负载均衡器的后端服务要求:
负载均衡器模式 | 后端服务类型 |
---|---|
区域级内部代理网络负载均衡器 | 区域级 regionBackendServices |
跨区域内部代理网络负载均衡器 | 全球 backendServices |
受支持的后端
后端服务支持以下类型的后端:
负载均衡器模式 | 后端服务上支持的后端 | ||||||
---|---|---|---|---|---|---|---|
实例组 | 区域 NEG | 互联网 NEG | 无服务器 NEG | 混合 NEG | Private Service Connect NEG | GKE | |
区域级内部代理网络负载均衡器 |
GCE_VM_IP_PORT 类型端点 |
仅限区域级 NEG | 添加 Private Service Connect NEG | ||||
跨区域内部代理网络负载均衡器 |
GCE_VM_IP_PORT 类型端点 |
添加 Private Service Connect NEG |
所有后端的类型必须相同(实例组或 NEG)。您可以同时使用不同类型的实例组后端,也可以同时使用不同类型的 NEG 后端,但不能在同一后端服务上同时使用实例组和 NEG 后端。
您可以在同一后端服务中混合使用可用区级 NEG 和混合 NEG。
为确保最大限度地减少对用户造成的中断,您可以在后端服务上启用连接排空功能。在终止后端、手动移除后端或通过自动扩缩程序移除后端时可能会发生此类中断。如需详细了解如何使用连接排空功能来最大限度地减少服务中断,请参阅启用连接排空功能。
后端和 VPC 网络
后端位置的限制取决于负载均衡器的类型。
对于实例组、可用区级 NEG 和混合连接 NEG,所有后端都必须位于与后端服务相同的项目和区域中。不过,负载均衡器可以引用与后端服务位于同一项目中,但使用其他 VPC 网络的后端(此功能目前处于预览版阶段)。负载均衡器的 VPC 网络与后端 VPC 网络之间的连接可以使用 VPC 网络对等互连、Cloud VPN 隧道、Cloud Interconnect VLAN 连接或 Network Connectivity Center 框架进行配置。
后端网络定义
- 对于可用区级 NEG 和混合 NEG,您需要在创建 NEG 时明确指定 VPC 网络。
- 对于托管式实例组,VPC 网络在实例模板中定义。
- 对于非托管式实例组,实例组的 VPC 网络设置为与添加到实例组的第一个虚拟机的
nic0
接口的 VPC 网络相匹配。
后端网络要求
您的后端网络必须满足以下网络要求之一:
后端的 VPC 网络必须与转发规则的 VPC 网络完全匹配。
后端的 VPC 网络必须使用 VPC 网络对等互连连接到转发规则的 VPC 网络。您必须配置子网路由交换,以允许转发规则 VPC 网络中的代理专用子网与后端实例或端点所使用的子网之间进行通信。
- 后端的 VPC 网络和转发规则的 VPC 网络都必须是位于同一个 Network Connectivity Center hub 上的 VPC spoke。导入和导出过滤条件必须允许转发规则 VPC 网络中的代理专用子网与后端实例或端点所使用的子网之间进行通信。
- 对于所有其他类型的后端,所有后端都必须位于同一 VPC 网络和区域中。
后端和网络接口
如果您使用实例组后端,数据包始终会递送到 nic0
。如果您想将数据包发送到不同的 NIC,请改用 NEG 后端。
如果您使用的是可用区级 NEG 后端,数据包会发送到 NEG 中的端点所代表的任何网络接口。NEG 端点必须与 NEG 明确定义的 VPC 网络位于同一 VPC 网络中。
与后端通信的协议
为内部代理网络负载均衡器配置后端服务时,您需要设置后端服务用来与后端通信的协议。负载均衡器仅使用您指定的协议,不会尝试通过其他协议协商连接。对于与后端的通信,内部代理网络负载均衡器仅支持 TCP。
健康检查
每项后端服务都会指定健康检查,用于定期监控后端是否已准备好从负载均衡器接收连接。这样可以降低向无法处理请求的后端发送请求的风险。健康检查不会检查应用本身是否正常运行。
健康检查协议
最佳实践是使用其协议与后端服务的协议相匹配的健康检查,不过这并非强制性要求,而且也不一定可行。例如,TCP 健康检查能够最准确地测试与后端的 TCP 连接。如需查看受支持的健康检查协议的列表,请参阅负载均衡功能。
下表指定了每种模式的内部代理网络负载均衡器支持的健康检查范围:
负载均衡器模式 | 健康检查类型 |
---|---|
区域级内部代理网络负载均衡器 | 区域级 regionHealthChecks |
跨区域内部代理网络负载均衡器 | 全球 healthChecks |
如需详细了解健康检查,请参阅以下内容:
防火墙规则
内部代理网络负载均衡器需要以下防火墙规则:
- 允许来自 Google 健康检查探测的流量的入站流量允许规则。
35.191.0.0/16
130.211.0.0/22
2600:2d00:1:b029::/64
- 允许来自代理专用子网的流量的入站流量允许规则。
这些防火墙规则的端口必须如下配置:
允许发送到每个后端服务的健康检查的目标端口的流量。
对于实例组后端:通过后端服务的已命名端口与每个实例组上与该已命名端口关联的端口号之间的映射来确定要配置的端口。分配给同一后端服务的各实例组的端口号可能各不相同。
对于
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 网络中。 | 客户端可以位于任何地区中。客户端仍必须位于负载均衡器所在的 VPC 网络中,或者位于使用 VPC 网络对等互连连接到负载均衡器 VPC 网络的 VPC 网络中。 |
本地客户端可通过 Cloud VPN 隧道或 VLAN 连接访问负载均衡器。这些隧道或连接必须位于负载均衡器所在的地区中。 | 本地客户端可通过 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
设置。
会话亲和性
借助会话亲和性,您可以将负载均衡器的后端服务配置为将来自同一个客户端的所有请求发送到同一个后端(只要该后端健康状况良好且具有可用容量)。
内部代理网络负载均衡器提供客户端 IP 亲和性,它会将来自同一个客户端 IP 地址的所有请求转发到同一个后端(只要该后端具有容量且健康状况良好)。
故障切换
如果后端健康状况不佳,则流量会被自动重定向到健康状况良好的后端。
下表介绍了内部代理网络负载均衡器的故障切换行为:
负载均衡器模式 | 故障切换行为 | 所有后端运行状况都不正常时的行为 |
---|---|---|
区域级内部代理网络负载均衡器 | 负载均衡器为每个可用区实现一种平缓的故障切换算法。当任何可用区中健康状况良好的后端与健康状况不佳的后端比率低于特定百分比阈值时(70%;此阈值不可配置),负载均衡器会开始将流量重定向到其他可用区,而不是等待某个可用区中的所有后端变得健康状况不佳。如果所有可用区中的所有后端健康状况不佳,则负载均衡器会立即终止客户端连接。 Envoy 代理会根据配置的流量分配将流量发送到区域中的健康后端。 |
终止连接 |
跨区域内部代理网络负载均衡器 | 自动故障切换到同一区域或其他区域中的健康后端。 根据配置的流量分配将流量分配到多个区域中的健康后端。 |
终止连接 |
GKE 应用的负载均衡
如果您在 Google Kubernetes Engine 中构建应用,则可以使用独立的可用区级 NEG 将流量的负载直接均衡到容器。使用独立的可用区级 NEG 时,您需要创建用于创建 NEG 的 Service 对象,然后将 NEG 与后端服务相关联,以便负载均衡器可以连接到 Pod。
相关 GKE 文档:
配额和限制
如需了解配额和限制,请参阅负载均衡资源配额和限制。
限制
- 内部代理网络负载均衡器不支持 IPv6 流量。
- 内部代理网络负载均衡器不支持共享 VPC 部署,即负载均衡器的前端位于一个宿主项目或服务项目中,后端服务和后端位于另一个服务项目中(也称为跨项目服务引用)。