内部代理网络负载均衡器概览

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 控制台

  1. 在 Google Cloud 控制台中,转到负载均衡页面。

    转到“负载均衡”

  2. 负载均衡器标签页中,您可以看到负载均衡器类型、协议和区域。如果区域为空,则负载均衡器处于跨区域模式。下表总结了如何识别负载均衡器的模式。

    负载均衡器模式 负载均衡器类型 权限类型 区域
    区域级内部代理网络负载均衡器 网络(代理) 内部 指定一个区域
    跨区域内部代理网络负载均衡器 网络(代理) 内部

gcloud

  1. 如需确定负载均衡器的模式,请运行以下命令:

    gcloud compute forwarding-rules describe FORWARDING_RULE_NAME
    

    在命令输出中,检查负载均衡方案、地区和网络层级。下表总结了如何识别负载均衡器的模式。

    负载均衡器模式 负载均衡方案 转发规则
    区域级内部代理网络负载均衡器 INTERNAL_MANAGED 区域级
    跨区域内部代理网络负载均衡器 INTERNAL_MANAGED Global

架构

下图显示了内部代理网络负载均衡器所需的 Google Cloud 资源。

区域

下图展示了高级层级的区域级内部代理网络负载均衡器部署的组件。

区域级内部代理网络负载均衡器组件。
区域级内部代理网络负载均衡器组件(点击可放大)。

跨区域

下图展示了同一 VPC 网络中高级层级的跨区域内部代理网络负载均衡器部署的组件。每条全球转发规则都使用客户端用于连接的区域级 IP 地址。

跨区域内部代理网络负载均衡器组件。
跨区域内部代理网络负载均衡器组件(点击可放大)。

代理专用子网

在上图中,代理专用子网提供了一组 IP 地址,供 Google 用于代表您运行 Envoy 代理。您必须在使用基于 Envoy 的内部代理网络负载均衡器的 VPC 网络的每个区域中创建一个代理专用子网。下表介绍了区域模式和跨区域模式下代理专用子网之间的差异:

负载均衡器模式 代理专用子网 --purpose 标志的值
区域级内部代理网络负载均衡器

REGIONAL_MANAGED_PROXY

区域级和跨区域负载均衡器不能共享相同的子网

一个区域和 VPC 网络中的所有基于 Envoy 的区域级负载均衡器共享同一个代理专用子网

跨区域内部代理网络负载均衡器

GLOBAL_MANAGED_PROXY

区域级和跨区域负载均衡器不能共享相同的子网

基于 Envoy 的跨区域负载均衡器必须在配置了该负载均衡器的每个区域中有一个代理专用子网。同一区域和网络中的跨区域负载均衡器代理共享同一个代理专用子网。

此外:

  • 代理专用子网仅用于 Envoy 代理,不可用于您的后端。
  • 一个区域和 VPC 网络中的所有内部代理网络负载均衡器的后端虚拟机实例或端点都会收到来自代理专用子网的连接。
  • 内部代理网络负载均衡器的 IP 地址不位于代理专用子网中。负载均衡器的 IP 地址由其内部代管式转发规则定义。

转发规则和 IP 地址

转发规则会按照 IP 地址、端口和协议将流量路由到由目标代理和后端服务组成的负载均衡配置。

客户端使用 IP 地址和端口连接到负载均衡器的 Envoy 代理,转发规则的 IP 地址是负载均衡器的 IP 地址(有时称为虚拟 IP 地址或 VIP)。连接到负载均衡器的客户端必须使用 TCP。如需查看受支持的协议的完整列表,请参阅负载均衡器功能比较

与转发规则关联的内部 IP 地址可以来自与您的后端位于同一网络和区域的子网。您在内部代理网络负载均衡器中使用的每个转发规则只能引用一个 TCP 端口。与转发规则关联的内部 IP 地址可以来自同一网络和区域中的任何子网。

下表显示了区域模式和跨区域模式中的转发规则之间的区别:

负载均衡器模式 转发规则、IP 地址和代理专用子网 --purpose 从客户端到负载均衡器前端的路由
区域级内部代理网络负载均衡器

区域级 forwardingRules

区域级 IP 地址

负载均衡方案:

INTERNAL_MANAGED

代理专用子网 --purpose

REGIONAL_MANAGED_PROXY

IP 地址 --purpose

SHARED_LOADBALANCER_VIP

您可以启用全球访问权限,允许来自任何区域的客户端访问您的负载均衡器。后端也必须与负载均衡器位于同一区域。

跨区域内部代理网络负载均衡器

全球 globalForwardingRules

区域级 IP 地址

负载均衡方案:

INTERNAL_MANAGED

代理专用子网 --purpose

GLOBAL_MANAGED_PROXY

IP 地址 --purpose

SHARED_LOADBALANCER_VIP

全球访问权限默认启用,以允许来自任何区域的客户端访问您的负载均衡器。后端可以位于多个区域中。


目标代理

内部代理网络负载均衡器会终止来自客户端的 TCP 连接并创建与后端的新连接。默认情况下,系统不会保留原始客户端 IP 地址和端口信息。您可以使用 PROXY 协议来保留此信息。目标代理会将传入请求直接路由到负载均衡器的后端服务。

下表显示了每种模式的内部代理网络负载均衡器所需的目标代理 API:

目标代理 区域级内部代理网络负载均衡器 跨区域内部代理网络负载均衡器
TCP 区域级 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。

为确保最大限度地减少对用户造成的中断,您可以在后端服务上启用连接排空功能。在终止后端、手动移除后端或通过自动扩缩程序移除后端时可能会发生此类中断。如需详细了解如何使用连接排空功能来最大限度地减少服务中断,请参阅启用连接排空功能

与后端通信的协议

为内部代理网络负载均衡器配置后端服务时,您需要设置后端服务用来与后端通信的协议。负载均衡器仅使用您指定的协议,不会尝试通过其他协议协商连接。区域级内部代理网络负载均衡器或跨区域内部代理网络负载均衡器仅支持使用 TCP 与后端通信。

健康检查

每项后端服务都会指定健康检查,用于定期监控后端是否已准备好从负载均衡器接收连接。这样可以降低向无法处理请求的后端发送请求的风险。健康检查不会检查应用本身是否正常运行。

健康检查协议

最佳实践是使用其协议与后端服务的协议相匹配的健康检查,不过这并非强制性要求,而且也不一定可行。例如,TCP 健康检查能够最准确地测试与后端的 TCP 连接。如需查看受支持的健康检查协议的列表,请参阅负载均衡功能

下表指定了每种模式的内部代理网络负载均衡器支持的健康检查范围:

负载均衡器模式 健康检查类型
区域级内部代理网络负载均衡器 区域级 regionHealthChecks
跨区域内部代理网络负载均衡器 全球 healthChecks

如需详细了解健康检查,请参阅以下内容:

防火墙规则

内部代理网络负载均衡器需要以下防火墙规则:

这些防火墙规则的端口必须如下配置:

  • 允许发送到每个后端服务的健康检查的目标端口的流量。

  • 对于实例组后端:通过后端服务的已命名端口与每个实例组上与该已命名端口关联的端口号之间的映射来确定要配置的端口。分配给同一后端服务的各实例组的端口号可能各不相同。

  • 对于 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 情景中,后端虚拟机通常位于服务项目中。您必须在该服务项目中定义区域内部后端服务和健康检查。

流量分配

内部代理网络负载均衡器按如下方式将流量分配给其后端:

  1. 来自单个客户端的连接会发送到同一可用区,前提是该可用区内运行状况良好的后端(实例组或 NEG)可用且具有容量(由均衡模式确定)对于区域内部代理网络负载均衡器,均衡模式可为 CONNECTION(实例组或 NEG 后端)或 UTILIZATION(仅限实例组后端)。
  2. 如果您已配置会话亲和性,则来自客户端的连接会发送到同一后端。
  3. 选择后端后,系统会根据负载均衡政策在实例(在实例组中)或端点(在 NEG 中)之间分配流量。如需了解受支持的负载均衡政策算法,请参阅区域级后端服务 API 文档中的 localityLbPolicy 设置。

会话亲和性

借助会话亲和性,您可以将负载均衡器的后端服务配置为将来自同一个客户端的所有请求发送到同一个后端(只要该后端健康状况良好且具有可用容量)。

内部代理网络负载均衡器提供客户端 IP 亲和性,它会将来自同一个客户端 IP 地址的所有请求转发到同一个后端(只要该后端具有容量且健康状况良好)。

故障切换

如果后端健康状况不佳,流量会被自动重定向到健康的后端。下表介绍了每种模式下的故障切换行为:

负载均衡器模式 故障切换行为 所有后端运行状况都不正常时的行为
区域级内部代理网络负载均衡器

负载均衡器为每个可用区实现一种平缓的故障切换算法。当任何可用区中健康状况良好的后端与健康状况不佳的后端比率低于特定百分比阈值时(70%;此阈值不可配置),负载均衡器会开始将流量重定向到其他可用区,而不是等待某个可用区中的所有后端变得健康状况不佳。如果所有可用区中的所有后端健康状况不佳,则负载均衡器会立即终止客户端连接。

Envoy 代理会根据配置的流量分配将流量发送到区域中的健康后端。

终止连接
跨区域内部代理网络负载均衡器

自动故障切换到同一区域或其他区域中的健康后端。

根据配置的流量分配将流量分配到多个区域中的健康后端。

终止连接

GKE 应用的负载均衡

如果您在 Google Kubernetes Engine 中构建应用,则可以使用独立的可用区级 NEG 将流量的负载直接均衡到容器。使用独立的可用区级 NEG 时,您需要创建用于创建 NEG 的 Service 对象,然后将 NEG 与后端服务相关联,以便负载均衡器可以连接到 Pod。

相关 GKE 文档:

配额和限制

如需了解配额和限制,请参阅负载均衡资源配额和限制

限制

  • 内部代理网络负载均衡器不支持 IPv6 流量。
  • 内部代理网络负载均衡器不支持共享 VPC 部署,即负载均衡器的前端位于一个宿主项目或服务项目中,后端服务和后端位于另一个服务项目中(也称为跨项目服务引用)。

后续步骤