TCP 代理负载平衡概览

TCP 代理负载平衡是一种反向代理负载平衡器,它将来自互联网的 TCP 流量分配到您的 Google Cloud VPC 网络中的虚拟机实例。使用 TCP 代理负载平衡时,经由 TCP 连接传输的流量会在负载平衡层终止,然后使用 TCP 或 SSL 转发到最近的可用后端。

TCP 代理负载平衡允许您为全球所有用户使用一个 IP 地址。TCP 代理负载平衡器可以自动将流量路由到离用户最近的后端。

如果使用优质层级,TCP 代理负载平衡可以配置为全球负载平衡服务。如果使用标准层级,TCP 代理负载平衡器会在区域范围处理负载平衡。如需了解详情,请参阅 Network Service Tiers 中的负载平衡器行为

在此示例中,来自首尔用户和波士顿用户的流量的连接会在负载平衡层终止。这些连接在图中标为 1a2a。系统建立了从负载平衡器到选定后端实例的单独连接。这些连接在图中标为 1b2b

具有 TCP 终止功能的 Cloud Load Balancing(点击可放大)
具有 TCP 终止功能的 Cloud Load Balancing(点击可放大)

TCP 代理负载平衡用于处理常见特定端口(例如用于简单邮件传输协议 (SMTP) 的端口 25)上的 TCP 流量。如需了解详情,请参阅端口规范。对于在这些端口上加密的客户端流量,请使用 SSL 代理负载平衡

如需了解各种 Google Cloud 负载平衡器之间的具体区别,请参阅以下文档:

优势

TCP 代理负载平衡器的优势包括:

  • IPv6 终结。TCP 代理负载平衡同时支持使用 IPv4 和 IPv6 地址来路由客户端流量。客户端 IPv6 请求会在负载平衡层终止,然后通过 IPv4 代理到您的后端。
  • 智能路由。负载平衡器可以将请求路由到有容量可用的后端位置。相比之下,L3/L4 负载平衡器必须将请求路由到区域后端,但不考虑容量。使用更智能的路由可以按 N+1 或 N+2(而不是 x*N)模式进行预配。
  • 安全修补。如果 TCP 堆栈中出现漏洞,Cloud Load Balancing 会在负载平衡器上自动应用补丁程序,以确保后端安全。
  • 支持以下常见 TCP 端口。 25、43、110、143、195、443、465、587、700、993、995、1883、3389、5222、5432、5671、5672、5900、5901、6379、8085、8099、9092、9200、9300。

架构

下面介绍了 TCP 代理负载平衡器的组件。

转发规则和 IP 地址

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

每条转发规则都会提供一个 IP 地址,可用于应用的 DNS 记录。因此无需基于 DNS 的负载平衡。您可以预留可用的静态 IP 地址,也可以让 Cloud Load Balancing 为您分配一个 IP 地址。我们建议您预留静态 IP 地址;否则,每当您删除转发规则并创建新的转发规则时,都必须使用新分配的临时 IP 地址更新 DNS 记录。

TCP 代理负载平衡器定义中使用的外部转发规则都只能引用转发规则的端口规范中列出的端口之一。

目标代理

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

后端服务

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

每个 TCP 代理负载平衡器都有一个后端服务资源。对后端服务的更改不是即时的。更改可能需要几分钟才能传播到 Google Front End (GFE)。

每项后端服务都会指定要为可用后端执行的运行状况检查

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

与后端通信的协议

为 TCP 代理负载平衡器配置后端服务时,您需要设置后端服务用来与后端通信的协议。您可以选择 SSLTCP。负载平衡器仅使用您指定的协议,不会尝试通过其他协议协商连接。

防火墙规则

后端实例必须允许来自以下来源的连接:

  • 负载均衡器,即发送到后端的所有请求的 Google Front End (GFE)
  • 运行状况检查探测

如需允许此流量,您必须创建入站防火墙规则。这些防火墙规则的端口必须允许如下流量:

  • 发送到每个后端服务的运行状况检查的目标端口的流量。

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

  • 对于 GCE_VM_IP_PORT NEG 后端:发送到端点的端口号的流量。

防火墙规则在虚拟机实例级层(而不是在 GFE 代理上)实现。您无法使用 Google Cloud 防火墙规则来阻止流量到达负载平衡器。 您可以使用 Google Cloud Armor 来实现此目的。

如需详细了解运行状况检查探测以及必须允许来自它们的流量的原因,请参阅探测 IP 地址范围和防火墙规则

对于 SSL 代理负载均衡器和 TCP 代理负载均衡器,所需的来源范围如下所示:

  • 130.211.0.0/22
  • 35.191.0.0/16

这些范围适用于 GFE 中的健康检查和请求。

来源 IP 地址

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

  • 连接 1,即从原始客户端到负载均衡器 (GFE) 的连接:

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

    • 来源 IP 地址防火墙规则中指定的某个范围中的一个 IP 地址。

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

开放端口

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

GFE 具有多个开放端口,用于支持在同一架构上运行的其他 Google 服务。如需查看可能会在 GFE 上打开的一些端口的列表,请参阅“转发规则:端口规范”。GFE 上运行的其他 Google 服务可能有其他开放端口。

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

  • 执行 TCP SYN 探测时,端口扫描(例如使用 nmap)通常不需要响应数据包或 TCP RST 数据包。如果您的负载均衡器使用高级层级 IP 地址,则 GFE 将发送 SYN-ACK 数据包以响应各种端口的 SYN 探测。但是,GFE 仅会将数据包发送到您的后端,以响应发送到负载均衡器的 IP 地址以及在其转发规则上配置的目的地端口的数据包。如果数据包发送到转发规则中未配置的端口上的不同负载均衡器 IP 地址或您的负载均衡器的 IP 地址,则系统不会将数据包发送到您的负载均衡器的后端。即使没有任何特殊配置,Google 基础架构和 GFE 也会深度防御 DDoS 攻击和 SYN 洪水攻击。

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

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

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

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

流量分配

TCP 代理负载平衡器将流量分配给后端的方式取决于平衡模式以及所选的用于选择后端的哈希方法(会话亲和性)。

连接的分配方式

TCP 代理负载平衡可以配置为优质层级中的全球性负载平衡服务,以及标准层级中的区域性服务。

对于优质层级

  • 您可以只拥有一个后端服务,但该后端服务可以在多个区域拥有后端。对于全球负载平衡,您可以在多个区域部署后端,负载平衡器会自动将流量定向到离用户最近的区域。如果一个区域已经满负荷,则负载平衡器会自动将新的连接定向到另一个具有可用容量的区域。现有用户连接将保留在当前区域中。
  • Google 会从全球所有入网点通告您的负载平衡器的 IP 地址。每个负载平衡器 IP 地址都是全球任播。
  • 如果您使用多个区域中的后端来配置后端服务,则 Google Front End (GFE) 会尝试将请求定向到离用户最近的区域中运行状况良好的后端实例组或 NEG。本页面记录了此过程的详细信息。

对于标准层级

  • Google 会从与转发规则的区域关联的接入点通告负载平衡器的 IP 地址。负载平衡器使用区域级外部 IP 地址。

  • 您可以在转发规则所在的区域中配置后端。此处记录的过程仍然适用,但 GFE 仅将请求定向到该区域中运行状况良好的后端。

请求分配过程

从每个可用区级 GCE_VM_IP_PORT NEG、可用区级实例组或区域级实例组的可用区的角度看,均衡模式和目标选择定义了后端完整性。可用区内的分配随后将通过一致的哈希处理完成。

负载平衡器使用以下过程:

  1. 转发规则的外部 IP 地址由 Google 网络边界上的边缘路由器通告。每个通告都会列出尽可能靠近用户的第 3/4 层负载平衡系统 (Maglev) 的下一个跃点。
  2. Maglev 系统会检查传入数据包的来源 IP 地址。它们会将传入的请求定向到 Google 的地理位置 IP 系统确定的尽可能靠近用户的 Maglev 系统。
  3. Maglev 系统将流量路由到第一层 Google 前端 (GFE)。第一层 GFE 会根据需要终止传输层安全协议 (TLS),然后按照此过程将流量路由到第二层 GFE:
    1. 如果后端服务使用实例组或 GCE_VM_IP_PORT NEG 后端,则第一层 GFE 更倾向于位于包含实例组或 NEG 的区域内或附近的第二层 GFE。
    2. 对于具有混合 NEG、无服务器 NEG 和互联网 NEG 的后端存储分区和后端服务,第一层 GFE 选择的区域子集中的第二层 GFE 会使得两个 GFE 之间的往返时间最短。

      第二层 GFE 偏好选择不能保证,并且可能根据 Google 的网络状况和维护动态变化。

      第二层 GFE 可识别运行状况检查状态和实际后端容量使用情况。

  4. 第二层 GFE 将请求定向到其所在区域内的可用区中的后端。
  5. 对于优质层级,有时第二层 GFE 会将请求发送到不同区域的可用区中的后端。这种行为称为溢出
  6. 溢出受两个原则约束:

    • 当第二层 GFE 知道的所有后端达到容量或运行状况不佳时,可能会发生溢出。
    • 第二层 GFE 含有其他区域的可用区中运行状况良好的所有后端的信息。

    第二层 GFE 通常配置为提供部分后端位置。

    溢出行为不会耗尽所有可能的 Google Cloud 可用区。如果您需要将流量引导离开特定可用区或整个区域中的后端,则必须将容量扩缩程序设置为零。将后端配置为无法通过运行状况检查并不能保证第二层 GFE 会溢出到其他区域的可用区中的后端。

  7. 将请求分配到后端时,GFE 会在可用区级运行。

    如果连接数较少,则第二层 GFE 有时偏好选择某个区域中的一个可用区,而不是其他可用区。这种偏好属于正常现象,并且符合预期。在负载平衡器接收更多连接之前,区域内的可用区之间的分布不会变得均匀。

平衡模式

当您向后端服务添加后端时,可以设置负载平衡模式

对于 TCP 代理负载平衡,平衡模式可以为 CONNECTIONUTILIZATION

如果负载平衡模式为 CONNECTION,则系统会根据后端可以处理的并发连接数来分配负载。您还必须准确指定以下参数之一:maxConnections(区域级代管式实例组除外)、maxConnectionsPerInstancemaxConnectionsPerEndpoint

如果负载平衡模式为 UTILIZATION,则系统会根据实例组中的实例利用率来分配负载。

如需了解如何比较负载平衡器类型和支持的平衡模式,请参阅负载平衡方法

会话粘性

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

TCP 代理负载平衡提供客户端 IP 亲和性,它将来自同一客户端 IP 地址的所有请求转发到同一个后端。

故障转移

如果后端运行状况不佳,流量会被自动重定向到同一区域内的运行状况良好的后端。如果一个区域内的所有后端运行状况不佳,则流量将分配到其他区域内运行状况良好的后端(仅限优质层级)。如果所有后端运行状况不佳,则负载平衡器会丢弃流量。

GKE 应用的负载平衡

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

相关 GKE 文档:

限制

  • TCP 代理负载平衡器不支持 VPC 网络对等互连。

后续步骤