内部 TCP/UDP 负载平衡概念

内部 TCP/UDP 负载平衡是一种区域级负载平衡器。借助它,您可以通过只能由内部虚拟机实例访问的专用负载平衡 IP 地址运行和扩缩服务。

概览

Google Cloud Platform (GCP) 内部 TCP/UDP 负载平衡使用专用的内部 (RFC 1918) IP 地址在 VPC 网络中的同一区域内的虚拟机实例之间分配流量。

如下面的概要图表所示,内部 TCP/UDP 负载平衡服务有一个前端(转发规则)和一个后端(后端服务和实例组)。

内部 TCP/UDP 负载平衡器概要示例(点击可放大)
内部 TCP/UDP 负载平衡器概要示例(点击可放大)

协议、方案和范围

每个内部 TCP/UDP 负载平衡器要么支持 TCP 流量,要么支持 UDP 流量(不同时支持两者)。

内部 TCP/UDP 负载平衡器使用采用内部负载平衡方案的单个后端服务,这意味着它可跨多个实例平衡 GCP 内的流量。您不能用它来平衡来自互联网的流量。

内部 TCP/UDP 负载平衡器按区域划分范围,并未覆盖全球。这意味着内部 TCP/UDP 负载平衡器不能跨多个区域。负载平衡器可以为一个区域内的所有地区提供服务。请参阅区域和地区

请参阅选择负载平衡器负载平衡概览,了解各个云负载平衡器之间的具体差别。

用例

访问示例

您可以使用以下方法从连接的网络访问 VPC 网络中的内部 TCP/UDP 负载平衡器:

  • VPC 网络对等互连
  • Cloud VPN 和 Cloud Interconnect

如需详细示例,请参阅内部 TCP/UDP 负载平衡和连接的网络

三层网络服务示例

您可以将内部 TCP/UDP 负载平衡与 HTTP(S) 负载平衡器等其他负载平衡器结合使用,其中网络层使用外部负载平衡器,而外部负载平衡器则依赖于内部负载平衡器背后的服务。

下图描述了使用外部 HTTP(S) 和内部 TCP/UDP 负载平衡器的三层配置示例:

使用 HTTP(S) 负载平衡和内部 TCP/UDP 负载平衡的 3 层 Web 应用(点击可放大)
使用 HTTP(S) 负载平衡和内部 TCP/UDP 负载平衡的 3 层 Web 应用(点击可放大)

内部 TCP/UDP 负载平衡的工作原理

内部 TCP/UDP 负载平衡具有以下特征:

  • 负载平衡器是托管式服务。
  • 负载平衡器不是代理。
  • 它是在虚拟网络中实现的。
  • 没有中间设备或单点故障。
  • 来自后端虚拟机的响应直接发送到客户端,而不是通过负载平衡器返回。

与基于设备或基于实例的负载平衡器不同,内部 TCP/UDP 负载平衡不会终止来自客户端的连接。系统不会先将流量发送到负载平衡器,再发送到后端,而是直接将流量发送到后端。GCP Linux 或 Windows 访客环境使用负载平衡器的 IP 地址配置每个后端虚拟机,GCP 虚拟网络管理流量传输,并根据需要进行扩缩。

架构

具有多个后端实例组的内部 TCP/UDP 负载平衡器会在所有这些实例组中的后端虚拟机之间分配连接。如需详细了解分配方法及其配置选项,请参阅流量分配

您可以将任何类型的实例组(非托管实例组、托管地区实例组或托管区域实例组)用作负载平衡器的后端,但网络端点组 (NEG) 却不行。

高可用性描述了如何设计不依赖于单个地区的内部负载平衡器。

作为内部 TCP/UDP 负载平衡器的后端虚拟机参与的实例必须运行相应的 Linux 访客环境Windows 访客环境或提供同等功能的其他进程。此访客环境必须能够联系元数据服务器(metadata.google.internal169.254.169.254)以读取实例元数据,以便生成本地路由以接受发送到负载平衡器内部 IP 地址的流量。

此图说明了两个单独的实例组中的虚拟机之间的流量分配情况。从客户端实例发送到负载平衡器 IP 地址 (10.10.10.9) 的流量在任一实例组中的后端虚拟机之间分配。从任意服务后端虚拟机发送的响应直接传送到客户端虚拟机。

您可以将内部 TCP/UDP 负载平衡与自定义模式或自动模式 VPC 网络结合使用。您还可以使用现有的旧版网络创建内部 TCP/UDP 负载平衡器。

只有区域中的客户端虚拟机才能访问内部 TCP/UDP 负载平衡器。为了将数据包发送到内部 TCP/UDP 负载平衡器,同一 VPC 网络中的客户端虚拟机必须位于同一区域,但不一定位于同一子网。您也可以通过其他网络中的客户端系统与内部 TCP/UDP 负载平衡器通信,前提是该网络已正确连接到定义了负载平衡器的 VPC 网络。请参阅内部 TCP/UDP 负载平衡和连接的网络

高可用性

内部 TCP/UDP 负载平衡器具有与生俱来的高可用性。无需采用特殊步骤即可使负载平衡器具有高可用性,因为该机制不依赖于单个设备或虚拟机实例。

以下最佳做法介绍了如何部署后端虚拟机实例,从而避免依赖单个地区:

  • 如果您可以使用实例模板部署软件,请使用区域托管实例组。区域托管实例组可在多个地区之间自动分配流量,提供最佳选择以避免在任何给定地区发生潜在问题。

  • 如果您使用地区托管实例组或非托管实例组,请对同一后端服务使用(在同一区域内)不同地区中的多个实例组。使用多个地区可防止在任何给定地区出现潜在问题。

组件

内部 TCP/UDP 负载平衡器由以下 GCP 组件组成。

组件 目的 要求
内部 IP 地址 这是负载平衡器的地址。 内部 IP 地址必须与内部转发规则位于同一子网内。子网必须与后端服务位于同一区域。
内部转发规则 内部转发规则与内部 IP 地址结合后即为负载平衡器的前端。它定义负载平衡器接受的协议和端口,并将流量定向到区域内部后端服务。 内部 TCP/UDP 负载平衡器的转发规则必须:
• 拥有 INTERNALload-balancing-scheme
• 使用 TCPUDPip-protocol,该协议与后端服务的 protocol 匹配
• 引用后端服务所在区域中 VPC 网络的 subnet
区域内部后端服务 区域内部后端服务定义与后端(实例组)通信所采用的协议,并指定运行状况检查。后端可以是非托管实例组、托管地区实例组或托管区域实例组。 后端服务必须:
• 拥有 INTERNALload-balancing-scheme
• 使用 TCPUDPprotocol,该协议与转发规则的 protocol 匹配
• 进行相关的运行状况检查
• 引用同一区域内的后端。后端实例组可以位于该区域的任何子网中。后端服务本身并未绑定到任何特定子网。
运行状况检查 每个后端服务都必须进行相关的运行状况检查。运行状况检查定义了一些参数,GCP 会根据这些参数判断它所管理的后端是否有资格接收流量。只有后端实例组中运行状况良好的虚拟机才会接收从客户端虚拟机发送到负载平衡器 IP 地址的流量。 即使转发规则和后端服务可以使用 TCPUDP,GCP 也不会对 UDP 流量进行运行状况检查。如需了解详情,请参阅运行状况检查和 UDP 流量

内部 IP 地址

内部 TCP/UDP 负载平衡使用您创建内部转发规则时所选的子网的主要 IP 范围中的内部(专用,RFC 1918)IPv4 地址。该 IP 地址不能在子网的次要 IP 范围中。

您可以在创建转发规则时指定内部 TCP/UDP 负载平衡器的 IP 地址。您可以选择接收临时 IP 地址或使用预留的 IP 地址

转发规则

内部 TCP/UDP 负载平衡至少需要在其后端服务和实例组(统称为后端组件)所在的同一区域的子网中有一个内部转发规则。内部转发规则必须与负载平衡器的后端服务位于同一区域并使用相同的协议。

您可以在转发规则中定义负载平衡器接受流量的端口。内部 TCP/UDP 负载平衡器不是代理;它们通过接收流量的同一端口将流量传递到后端。您必须为每个转发规则指定至少一个端口号。

除端口外,您还必须在创建内部转发规则时引用 VPC 网络中的特定子网。您为转发规则指定的子网不必与后端虚拟机使用的任何子网相同;但是,转发规则、子网和后端服务必须全部位于同一区域内。创建内部转发规则时,GCP 会从所选子网的主要 IP 地址范围中选择可用的内部 IP 地址。或者,您也可以指定子网的主要 IP 范围中的内部 IP 地址。

转发规则和端口指定

在创建内部转发规则时,您必须选择以下端口指定之一:

  • 按编号指定 1-5 个端口
  • 指定 ALL 以转发所有端口上的流量

创建支持所有端口的内部转发规则,以便将给定协议(例如 TCP)的所有流量转发到单个内部负载平衡器。这样,后端虚拟机就可以运行多个应用,每个端口运行一个。发送到给定端口的流量会传送到相应的应用,并且所有应用都使用同一 IP 地址。

如果您担心后端应用会向所有端口开放,则可以在后端虚拟机中部署防火墙规则,将接收流量的范围设置为预期端口。

转发规则在创建后无法修改。如果您需要更改内部转发规则的指定端口或内部 IP 地址,则必须删除并替换该转发规则。

多个转发规则

您可以为同一内部负载平衡器配置多个内部转发规则。每个转发规则都必须具有自己唯一的 IP 地址,并且只能引用单个后端服务。多个内部转发规则可以引用同一个后端服务。

如果您需要为同一内部 TCP/UDP 负载平衡器使用多个 IP 地址,或者需要将某些端口与不同的 IP 地址关联,则配置多个内部转发规则会非常有用。使用多个内部转发规则时,请确保将后端虚拟机上运行的软件配置为绑定到所有必要的 IP 地址,因为通过负载平衡器传递的数据包的目标 IP 地址是与相应内部转发规则关联的内部 IP 地址。

设置内部 TCP/UDP 负载平衡页面上,请参考创建辅助转发规则的过程。在该示例中,同一负载平衡器配置了两个转发规则:一个使用 10.1.2.99,另一个使用 10.5.6.99。后端虚拟机必须配置为通过任一 IP 地址接收数据包。完成此操作的一种方法是将后端配置为绑定到任意 IP 地址 (0.0.0.0/0)。

后端服务

每个内部 TCP/UDP 负载平衡器均使用一个区域内部后端服务。后端服务的名称是 GCP Console 中显示的内部 TCP/UDP 负载平衡器的名称。

后端服务接受由一个或多个内部转发规则定向到它的流量。区域内部后端服务要么接受 TCP 流量,要么接受 UDP 流量,但不同时接受这两种流量,并根据转发规则,通过接收流量的同一端口将流量传送到后端虚拟机。

后端服务必须至少有一个后端实例组和一个关联的运行状况检查。后端可以是与后端服务(和转发规则)位于同一区域的非托管实例组、地区托管实例组或区域托管实例组。后端服务向后端虚拟机分配流量并管理会话粘性(如果已配置)。

运行状况检查

负载平衡器的后端服务必须与运行状况检查相关联。VPC 网络之外的特殊路由用于促进运行状况检查系统与后端之间的通信。

您可以使用现有运行状况检查,也可以定义新的运行状况检查。内部 TCP/UDP 负载平衡器仅向通过运行状况检查的后端虚拟机发送流量;但是,如果所有后端虚拟机均未通过运行状况检查,则 GCP 会在所有这些虚拟机之间分配流量。

您可以使用以下任何运行状况检查协议。运行状况检查协议不必与负载平衡器本身的协议相匹配。

  • HTTPHTTPSHTTP/2:如果您的后端虚拟机使用 HTTP、HTTPS 或 HTTP/2 来处理流量,则最好使用与该协议匹配的运行状况检查,因为基于 HTTP 的运行状况检查提供了适用于该协议的选项。请注意,通过内部 TCP/UDP 负载平衡器处理 HTTP 类型的流量意味着负载平衡器的协议为 TCP。
  • SSLTCP:如果您的后端虚拟机不处理 HTTP 类型的流量,则应使用 SSL 或 TCP 运行状况检查

无论您创建何种类型的运行状况检查,GCP 都会向内部 TCP/UDP 负载平衡器的 IP 地址发送运行状况检查探测,模拟负载平衡流量的传送方式。在后端虚拟机上运行的软件必须同时响应发送到负载平衡器本身的 IP 地址的负载平衡流量和运行状况检查探测。如需了解详情,请参阅运行状况检查数据包的目标

运行状况检查和 UDP 流量

GCP 不提供使用 UDP 协议的运行状况检查。当您对 UDP 流量使用内部 TCP/UDP 负载平衡时,必须在后端虚拟机上运行基于 TCP 的服务,以提供运行状况检查信息。

此配置使用 UDP 协议对客户端请求进行负载平衡,并使用 TCP 服务向 GCP 运行状况检查探测器提供信息。例如,您可以在向 GCP 返回 HTTP 200 响应的每个后端虚拟机上运行一个简单的 HTTP 服务器。在此示例中,您应该使用后端虚拟机上运行的您自己的逻辑来确保仅当 UDP 服务已正确配置并运行时,HTTP 服务器才会返回 200。

流量分配

内部 TCP/UDP 负载平衡器分配新连接的方式取决于您是否配置了故障转移

  • 如果您尚未配置故障转移,并且至少有一个后端虚拟机运行状况良好,则内部 TCP/UDP 负载平衡器会在其所有运行状况良好的后端虚拟机之间分配新连接。当所有后端虚拟机均运行状况不佳时,作为最后的补救手段,负载平衡器会在所有后端之间分配新连接。

  • 如果已配置故障转移,内部 TCP/UDP 负载平衡器会根据所配置的故障转移政策在其活跃池中的虚拟机之间分配新连接。当所有后端虚拟机运行状况不佳时,您可以选择是否丢弃流量

默认情况下,分配新连接的方法使用根据以下五种信息计算出的哈希:客户端 IP 地址、来源端口、负载平衡器的内部转发规则 IP 地址、目标端口和协议。您可以通过指定会话粘性选项来修改 TCP 流量的流量分配方法。

运行状况检查状态控制新连接的分配。如果运行状况不佳的后端虚拟机仍然在处理连接,则已建立的 TCP 会话会一直存在于运行状况不佳的后端虚拟机上。

会话粘性选项

会话粘性控制从客户端到负载平衡器的后端虚拟机的新连接分配。如果您的后端虚拟机需要在发送 TCP 流量时跟踪其客户端的状态信息,请设置会话粘性。这是 Web 应用的常见要求。

会话粘性非常适用于 TCP 流量。由于 UDP 协议不支持会话,因此会话粘性不会影响 UDP 流量。

内部 TCP/UDP 负载平衡器支持您为整个内部后端服务而非每个后端实例组指定的以下会话粘性选项:

  • :这是默认设置,实际上与客户端 IP 协议和端口相同。
  • 客户端 IP:根据使用客户端 IP 地址和目标 IP 地址创建的哈希,将特定客户端的请求定向到同一个后端虚拟机。
  • 客户端 IP 和协议:根据使用客户端 IP 地址、目标 IP 地址和负载平衡器协议(TCP 或 UDP)这三种信息创建的哈希,将特定客户端的请求定向到同一个后端虚拟机。
  • 客户端 IP、协议和端口:根据使用以下五种信息创建的哈希,将特定客户端的请求定向到同一个后端虚拟机:

    • 发送请求的客户端的来源 IP 地址
    • 发送请求的客户端的来源端口
    • 目标 IP 地址
    • 目标端口
    • 协议(TCP 或 UDP)

    目标 IP 地址是负载平衡器的转发规则的 IP 地址,除非自定义静态路由导致数据包传送给负载平衡器。如果内部 TCP/UDP 负载平衡器是路由的下一个跃点,请参阅会话粘性和下一个跃点内部 TCP/UDP 负载平衡器

会话粘性和下一个跃点内部 TCP/UDP 负载平衡器

无论您选择哪种会话粘性选项,GCP 都会使用数据包的目标位置。将数据包直接发送到负载平衡器时,数据包的目标位置与负载平衡器的转发规则的 IP 地址匹配。

但是,将内部 TCP/UDP 负载平衡器用作自定义静态路由的下一个跃点时,数据包的目标位置很可能不是负载平衡器的转发规则的 IP 地址。对于目标位置位于路由目标范围内的数据包,路由会定向到负载平衡器。

会话粘性和运行状况检查状态

更改后端虚拟机的运行状况状态会导致丢失会话粘性。例如,如果后端虚拟机运行状况变得不佳,并且至少还有一个运行状况良好的后端虚拟机,则内部 TCP/UDP 负载平衡器不会将新连接分配给该运行状况不佳的虚拟机。如果客户端与该运行状况不佳的虚拟机之间具有会话粘性,则会改为将新连接定向到另一个运行状况良好的后端虚拟机,从而失去其会话粘性。

测试来自单个客户端的连接

在测试从单个客户端系统到内部 TCP/UDP 负载平衡器的 IP 地址的连接时,请注意以下几点:

如果该客户端系统不是进行负载平衡的虚拟机(即非后端虚拟机),则新连接会传送到负载平衡器的运行状况良好的后端虚拟机。但是,由于所有会话粘性选项至少会依赖客户端系统的 IP 地址,因此来自同一客户端的连接可能会以超出预期的频率分配到同一个后端虚拟机。实际上,这意味着您无法通过从单个客户端连接到内部 TCP/UDP 负载平衡器来准确监控流量的分配情况。监控流量分配所需的客户端数量因负载平衡器类型、流量类型和运行状况良好的后端数量而异。

如果客户端虚拟机也是负载平衡器的后端虚拟机,则发送到负载平衡器转发规则的 IP 地址的连接始终由客户端/后端虚拟机本身应答。无论后端虚拟机的运行状况是否良好,都会发生这种情况,并且发生这种情况的是发送到负载平衡器 IP 地址的所有流量,而不仅仅是负载平衡器内部转发规则中指定的协议和端口上的流量。如需了解详情,请参阅从负载平衡虚拟机发送请求

限制

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

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
负载平衡