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

本文档介绍了配置 Trusted Cloud 外部代理网络负载均衡器时需要了解的概念。

外部代理网络负载均衡器是一种反向代理负载均衡器,它会将来自互联网的 TCP 流量分配到您的Trusted Cloud Virtual Private Cloud (VPC) 网络中的虚拟机 (VM) 实例。使用外部代理网络负载均衡器时,传入的 TCP流量会在该负载均衡器处终止。然后,新连接使用 TCP 或 SSL(推荐)将流量转发到最近的可用后端。

外部代理网络负载均衡器可让您为世界各地的所有用户使用同一个 IP 地址。该负载均衡器会自动将流量路由到离用户最近的后端。

您可以在区域级模式下使用此负载均衡器,后文中将其称为区域级外部代理网络负载均衡器。此负载均衡器作为基于开源 Envoy 代理的托管式服务实现。区域级模式可确保所有客户端和后端都位于指定区域。如果您想仅从一个地理位置传送内容(例如,为了符合合规性规定),请使用此负载均衡器。

架构

下图展示了外部代理网络负载均衡器的组件。

区域

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



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

下面介绍了外部代理网络负载均衡器的组件。

代理专用子网

代理专用子网提供了一组 IP 地址,供 Google 用于代表您运行 Envoy 代理。您必须在其中使用负载均衡器的 VPC 网络的每个区域中创建一个代理专用子网。此代理专用子网的 --purpose 标志设置为 REGIONAL_MANAGED_PROXY。同一区域和 VPC 网络中的所有基于 Envoy 的区域级负载均衡器共用来自同一代理专用子网的 Envoy 代理池。

一个区域和 VPC 网络中的所有负载均衡器的后端虚拟机或端点都会收到来自代理专用子网的连接。

注意事项:

  • 代理专用子网仅用于 Envoy 代理,不可用于您的后端。
  • 负载均衡器的 IP 地址不位于代理专用子网中。负载均衡器的 IP 地址由其外部代管式转发规则定义。

转发规则和 IP 地址

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

IP 地址规范。每条转发规则都会引用一个 IP 地址,您可以在 DNS 记录中使用该地址以用于您的应用。您可以预留可用的静态 IP 地址,也可以让 Cloud Load Balancing 为您分配一个 IP 地址。我们建议您预留一个静态 IP 地址。否则,每当您删除转发规则并创建新的转发规则时,都必须使用新分配的临时 IP 地址更新 DNS 记录。

端口指定。此负载均衡器定义中使用的外部转发规则只能引用 1-65535 之间的一个端口。如果您希望支持多个连续端口,则需要配置多个转发规则。由于系统允许使用相同的虚拟 IP 地址和不同的端口来配置多个转发规则,因此,您可以将具有不同自定义端口的多个应用通过代理连接到同一 TCP 代理虚拟 IP 地址。 如需了解详情,请参阅转发规则的端口规范

如需支持多个连续端口,您必须配置多个转发规则。多个转发规则可以配置有相同的虚拟 IP 地址和不同的端口。因此,您可以将具有不同自定义端口的多个应用代理到同一 TCP 代理虚拟 IP 地址。

下表显示了外部代理网络负载均衡器的转发规则要求:

负载均衡器模式 网络服务层级 转发规则、IP 地址和负载均衡方案 从互联网到负载均衡器前端的路由
区域级外部代理网络负载均衡器 高级 层级

区域级外部转发规则

区域级外部 IP 地址

负载均衡方案:EXTERNAL_MANAGED

请求路由到负载均衡器所在区域中的 Envoy 代理。

转发规则和 VPC 网络

本部分介绍了外部应用负载均衡器使用的转发规则如何与 VPC 网络相关联。

负载均衡器模式 VPC 网络关联
区域级外部代理网络负载均衡器

转发规则的 VPC 网络是创建代理专用子网所在的网络。您可以在创建转发规则时指定网络。

目标代理

外部代理网络负载均衡器会终结来自客户端的连接并创建与后端的新连接。目标代理会将这些新连接路由到后端服务。

默认情况下,目标代理不会保留原始客户端 IP 地址和端口信息。您可以通过在目标代理上启用 PROXY 协议来保留此信息。

下表显示了外部代理网络负载均衡器的目标代理要求。

负载均衡器模式 网络服务层级 目标代理
区域级外部代理网络负载均衡器 高级层级和标准层级 regionTargetTcpProxies

后端服务

后端服务会将传入的流量定向到一个或多个关联的后端。每个后端由实例组网络端点组以及有关后端服务容量的信息组成。后端服务容量可以基于 CPU 或每秒请求数 (RPS) 计算。

每个负载均衡器都有一个后端服务资源,用于指定要为可用后端执行的健康检查

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

如需详细了解后端服务资源,请参阅后端服务概览

下表指定了外部代理网络负载均衡器的后端服务支持的不同后端。

负载均衡器模式 后端服务上支持的后端
实例组 可用区级 NEG 互联网 NEG 无服务器 NEG 混合 NEG GKE
区域级外部代理网络负载均衡器 GCE_VM_IP_PORT 类型端点 仅限区域级 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。如果您想将数据包发送到不同的 NIC,请改用 NEG 后端。

如果您使用的是可用区级 NEG 后端,数据包会发送到 NEG 中的端点所代表的任何网络接口。NEG 端点必须与 NEG 明确定义的 VPC 网络位于同一 VPC 网络中。

与后端通信的协议

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

防火墙规则

需要遵循以下防火墙规则:

  • 对于区域级外部代理网络负载均衡器,允许来自代理专用子网的流量到达后端的入站流量防火墙规则。

  • 允许来自健康检查探测范围的流量到达后端的入站流量 allow 防火墙规则。如需详细了解健康检查探测以及必须允许来自它们的流量的原因,请参阅探测 IP 范围和防火墙规则

防火墙规则在虚拟机实例级层(而不是在 GFE 代理级层)实现。您无法使用防火墙规则来阻止流量到达负载均衡器。

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

  • 允许发送到每个后端服务的健康检查的目的地端口的流量。
  • 对于实例组后端:通过后端服务的已命名端口与每个实例组上与该已命名端口关联的端口号之间的映射来确定要配置的端口。分配给同一后端服务的各实例组的端口号可能各不相同。
  • 对于 GCE_VM_IP_PORT NEG 可用区级 NEG 后端:允许发送到端点的端口号的流量。

来源 IP 地址

后端所识别的数据包的来源 IP 地址不是负载均衡器的Trusted Cloud 外部 IP 地址。换句话说,存在两个 TCP 连接。

对于区域级外部代理网络负载均衡器:
  • 连接 1,从原始客户端到负载均衡器(代理专用子网):

    • 来源 IP 地址:原始客户端(如果客户端位于 NAT 或转发代理后面,则为外部 IP 地址)。
    • 目标 IP 地址:您的负载均衡器的 IP 地址。
  • 连接 2,从负载均衡器(代理专用子网)到后端虚拟机或端点):

    • 来源 IP 地址代理专用子网中的 IP 地址,该 IP 地址在与负载均衡器部署在同一区域和网络的所有基于 Envoy 的负载均衡器之间共享。

    • 目的地 IP 地址:VPC 网络中的后端虚拟机或容器的内部 IP 地址。

开放端口

外部代理网络负载均衡器是反向代理负载均衡器。负载均衡器终结传入的连接,然后打开从负载均衡器通向后端的新连接。这些负载均衡器使用全球 Google Front End (GFE) 代理实现。

GFE 具有多个开放端口,用于支持在同一架构上运行的其他 Google 服务。运行端口扫描时,您可能会看到 GFE 上运行的其他 Google 服务的其他开放端口。

从审核角度对基于 GFE 的负载均衡器的 IP 地址运行端口扫描没有用,原因如下:

  • 执行 TCP SYN 探测时,端口扫描(例如使用 nmap)通常不需要响应数据包或 TCP RST 数据包。GFE 仅会针对已配置转发规则的端口发送 SYN-ACK 数据包以响应 SYN 探测。此外,GFE 仅会将数据包发送到您的后端,以响应发送到负载均衡器的 IP 地址以及在其转发规则上配置的目的地端口的数据包。发送到其他 IP 地址或端口的数据包不会发送到后端。

    GFE 可实现 Google Cloud Armor 等安全功能。借助 Google Cloud Armor 标准版,GFE 可提供始终有效的保护,以防范耗尽容量的 DDoS 攻击和基于协议的 DDoS 攻击以及泛洪攻击。即使您未明确配置 Google Cloud Armor,也可以使用此保护功能。只有在您配置安全政策或注册 Managed Protection Plus 时,才会向您收费。

  • 发送到负载均衡器的 IP 地址的数据包可以由 Google 舰队中的任何 GFE 进行响应;但是,扫描负载均衡器 IP 地址和目标端口组合只会查询每个 TCP 连接的单个 GFE。负载均衡器的 IP 地址未分配给单个设备或系统。因此,扫描基于 GFE 的负载均衡器的 IP 地址不会扫描 Google 舰队中的所有 GFE。

考虑到这一点,您可以通过以下几种更有效的方法审核后端实例的安全性:

  • 安全审核者应检查负载均衡器配置的转发规则配置。转发规则定义负载均衡器接受数据包并将其转发到后端的目的地端口。对于基于 GFE 的负载均衡器,每条外部转发规则只能引用单个目的地 TCP 端口

  • 安全审核者应检查适用于后端虚拟机的防火墙规则配置。您设置的防火墙规则会阻止从 GFE 流向后端虚拟机的流量,但不会阻止流向 GFE 的传入流量。如需了解最佳做法,请参阅防火墙规则部分

共享 VPC 架构

区域级外部代理网络负载均衡器 支持使用共享 VPC 网络的部署。借助共享 VPC,您可以明确划分网络管理员和服务开发者的职责。开发团队可以专注于在服务项目中构建服务,网络基础架构团队则负责预配和管理负载均衡。如果您还不熟悉共享 VPC,请阅读共享 VPC 概览文档

IP 地址 转发规则 目标代理 后端组件
外部 IP 地址必须在负载均衡器所在的项目中定义。 外部转发规则必须在后端实例所在的项目(服务项目)中定义。 目标 TCP 代理必须在后端实例所在的项目中定义。

对于区域级外部代理网络负载均衡器,后端虚拟机通常位于服务项目中。您必须在该服务项目中定义区域级后端服务和健康检查。

流量分配

将后端实例组或 NEG 添加到后端服务时,您可以指定一种负载均衡模式,用于定义衡量后端负载和目标容量的方法。

对于外部代理网络负载均衡器,均衡模式可以为 CONNECTIONUTILIZATION

  • 如果负载均衡模式为 CONNECTION,则系统会根据后端可以处理的连接总数来分配负载。
  • 如果负载均衡模式为 UTILIZATION,则系统会根据实例组中的实例利用率来分配负载。 此均衡模式仅适用于虚拟机实例组后端。

后端之间的流量分配取决于负载均衡器的均衡模式。

区域级外部代理网络负载均衡器

对于区域级外部代理网络负载均衡器,流量分配取决于负载均衡模式和负载均衡位置政策。

均衡模式决定了应发送到每个后端(实例组或 NEG)的流量的权重和比例。负载均衡位置政策 (LocalityLbPolicy) 决定了组中后端的负载均衡方式。

当后端服务收到流量时,它首先会根据其均衡模式将流量定向到后端(实例组或 NEG)。选择后端后,系统会根据负载均衡位置政策在后端组中的实例或端点之间分配流量。

详情请参阅以下内容:

会话亲和性

会话亲和性会将来自同一客户端的所有请求发送到同一后端(前提是该后端健康状况良好且具有容量)。

外部代理网络负载均衡器提供以下类型的会话亲和性:

  • NONE,没有为负载均衡器设置会话亲和性。
  • 客户端 IP 亲和性,将来自同一客户端 IP 地址的所有请求转发到同一后端。

故障切换

外部代理网络负载均衡器的故障切换工作原理如下:

  • 如果后端运行状况不佳,流量会被自动重定向到同一区域内的运行状况良好的后端。
  • 如果所有后端运行状况不佳,则负载均衡器会丢弃流量。

GKE 应用的负载均衡

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

如需查看相关文档,请参阅通过独立可用区级 NEG 实现容器原生负载均衡

限制

  • 您无法使用Trusted Cloud 控制台在高级层级中创建区域级外部代理网络负载均衡器。 请改用 gcloud CLI 或 API。

  • 当您使用外部代理网络负载均衡器时,Trusted Cloud 不会对 TCP 连接的生命周期做出任何保证。客户端应能够应对因更广泛的互联网问题以及定期重启管理连接的代理而导致的连接中断。

后续步骤