TCP 代理负载平衡概念

Google Cloud TCP 代理负载平衡可让您为世界各地的所有用户使用一个 IP 地址。TCP 代理负载平衡器可以自动将流量路由到最靠近用户的实例。

请注意,若想实现全球性负载平衡,您需要使用 Network Service Tiers 的优质层级(默认为此层级)。 否则,系统将在区域范围内处理负载平衡。

TCP 代理负载平衡用于处理非 HTTP 流量。对于 HTTP 流量,请改用 HTTP 负载平衡。对于代理 SSL 流量,请使用 SSL 代理负载平衡

TCP 代理负载平衡同时支持使用 IPv4 和 IPv6 地址来路由客户端流量。客户端 IPv6 请求在负载平衡层终止,然后通过 IPv4 经过代理转发到您的后端。

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

概览

使用 TCP 代理负载平衡处理 TCP 流量时,您可以在负载平衡层终止客户的 TCP 会话,随后使用 TCP 或 SSL 将流量转发到您的虚拟机实例。

TCP 代理负载平衡可以配置为全球性负载平衡服务。使用这种配置时,您可以将实例部署到多个区域中,全球性负载平衡服务会自动将流量定向到离用户最近的区域。如果一个区域已满负荷,则负载平衡器会自动将新的连接定向到另一个具有可用容量的区域。现有的用户连接将保留在当前区域中。

TCP 代理负载平衡的优势:

  • 智能路由 - 负载平衡器可以将请求路由到具有容量的后端位置。相比之下,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、5222

负载平衡器在不同 Network Service Tier 中的行为

使用优质网络服务层级时,TCP 代理负载平衡是一项全球性服务。您可以在一个区域中使用多个后端服务,并且可以在多个区域中创建后端服务,所有区域都由同一全球负载平衡器提供服务。流量将按如下方式分配给后端服务:

  1. 当用户请求传入时,负载平衡服务会根据来源 IP 地址确定请求的大致来源。
  2. 负载平衡服务了解后端服务所拥有的实例的位置、实例的总体容量以及实例当前的总体使用率。
  3. 如果距离用户最近的实例具有可用容量,则请求会被转发给最近的一组实例。
  4. 发送到指定区域的传入请求会在该区域中的所有可用后端服务和实例上均匀分配。然而,如果负载非常小,则分配可能看起来不均匀。
  5. 如果指定区域中没有运行状况良好且有可用容量的实例,负载平衡器会改为将请求发送到具有可用容量的次近区域。

使用标准网络服务层级时,TCP 代理负载平衡是一项区域性服务。其后端实例组必须全部位于负载平衡器的外部 IP 地址和转发规则使用的区域内。

组件

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

转发规则和地址

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

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

目标代理

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

后端服务

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

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

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

后端协议

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

后端存储分区

后端存储分区将传入的流量定向到 Google Cloud Storage 存储分区(而非实例组)。

存储分区是用于存放数据的容器。您可以将存储分区用作虚拟机实例、Google App Engine 和其他云服务之间的公共存储空间。如果您有大量数据不需要在单独一个虚拟机实例的本地存储,请使用存储分区。

防火墙规则

防火墙规则可允许流量到达您的实例。 您必须对防火墙规则进行配置,以允许来自负载平衡器和运行状况检查程序的流量。

如果符合以下条件,您可以仅使用一条防火墙规则:

  • 这条规则允许流量通过您的全局转发规则使用的端口。
  • 您的运行状况检查程序使用的是同一个端口。

如果您的运行状况检查程序使用不同的端口,则必须为该端口另行创建一条防火墙规则。

请注意,防火墙规则是在实例级别而不是网络的边缘阻止和允许流量。它们无法阻止流量到达负载平衡器本身。

另请注意,Google Cloud Platform 使用的 IP 地址范围很大,并且会随时间发生变化。如果您需要确定特定时间的外部 IP 地址,请按照 Google Compute Engine 常见问题解答中的说明操作。

来源 IP 地址

每个后端虚拟机 (VM) 实例或容器所识别的数据包的来源 IP 地址是以下范围内的 IP 地址:

  • 35.191.0.0/16
  • 130.211.0.0/22

经过负载平衡处理的实际流量的来源 IP 地址与运行状况检查探测 IP 地址范围相同。

后端所识别的流量的来源 IP 地址不是负载平衡器的 Google Cloud 外部 IP 地址。换句话说,存在两个 HTTP:SSL 或 TCP 会话:

  • 会话 1,从原始客户端到负载平衡器 (GFE):

    • 来源 IP 地址:原始客户端(如果客户端位于 NAT 后面,则为外部 IP 地址)。
    • 目标 IP 地址:您的负载平衡器的 IP 地址。
  • 会话 2,从负载平衡器 (GFE) 到后端虚拟机或容器:

    • 来源 IP 地址:以下某个范围内的 IP 地址:35.191.0.0/16130.211.0.0/22

      您无法预测实际的来源地址。

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

TCP 代理负载平衡示例

藉由 TCP 代理,通过 TCP 连接传来的流量会在负载平衡层终止,然后通过代理转发到最靠近的可用实例组。

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

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

会话粘性

会话粘性特性将来自同一客户端的所有请求发送到同一个虚拟机实例(只要该实例运行状况良好且有可用容量)。

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

接口

您可以使用以下接口配置和更新 TCP 代理负载平衡服务:

  • gcloud 命令行工具Cloud SDK 内包含的命令行工具。TCP 代理负载平衡文档中提供了使用此工具的示例。如需全面了解此工具,请参阅 gcloud 工具指南。您可以在 gcloud compute 命令组中找到与负载平衡相关的命令。

    您还可以使用 --help 标志获取有关任何 gcloud 命令的详细帮助:

    gcloud compute http-health-checks create --help
        
  • Google Cloud ConsoleGoogle Cloud Console 可以完成所有负载平衡任务。

  • REST API:Cloud Load Balancing API 可以完成所有负载平衡任务。API 参考文档介绍了可供您使用的资源和方法。

开放端口

TCP 代理负载平衡器是反向代理负载平衡器。负载平衡器终止传入的连接,然后打开从负载平衡器通向后端的新连接。反向代理功能由 Google 前端 (GFE) 提供。

您设置的防火墙规则会阻止从 GFE 流向后端的流量,但不会阻止流向 GFE 的传入流量。

TCP 代理负载平衡器具有许多开放端口,可支持在同一架构上运行的其他 Google 服务。如果您针对负载平衡器的外部 IP 地址运行安全或端口扫描,则可能会有更多端口处于开放状态。

这不会影响 TCP 代理负载平衡器。在定义 SSL 负载平衡器时使用的外部转发规则只能引用一组特定的端口。目标端口为其他 TCP 端口的流量不会转发到负载平衡器的后端。

后续步骤