内部应用负载均衡器概览

本文档介绍配置内部应用负载均衡器时需要了解的概念。

Google Cloud 内部应用负载均衡器是一种基于代理的第 7 层负载均衡器,可让您在单个内部 IP 地址后面运行和扩缩您的服务。内部应用负载均衡器会将 HTTP 和 HTTPS 流量分配到各个 Google Cloud 平台(例如 Compute Engine、Google Kubernetes Engine [GKE] 和 Cloud Run)上托管的后端。如需了解详情,请参阅应用场景

操作模式

您可以将内部应用负载均衡器配置为以下模式:

  • 跨区域内部应用负载均衡器。这是一个多区域负载均衡器,它作为开源 Envoy 代理上的托管式服务实现。跨区域模式使您可以将流量负载均衡到全球分布的后端服务,包括确保流量定向到最近后端的流量管理。此负载均衡器还可实现高可用性。将后端放在多个区域中有助于避免单区域故障。如果一个区域的后端发生故障,流量可以故障切换到另一个区域。
  • 区域级内部应用负载均衡器。这是一个区域级负载均衡器,它作为开源 Envoy 代理上的托管式服务实现。区域模式可确保所有客户端和后端都来自指定区域,这有助于满足区域合规性需求。此负载均衡器启用了基于 HTTP(S) 参数的丰富的流量控制功能。配置此负载均衡器后,它会根据流量需求自动分配 Envoy 代理。

    下表介绍了区域模式与跨区域模式之间的重要区别:

    特征 跨区域内部应用负载均衡器 区域级内部应用负载均衡器
    负载均衡器的虚拟 IP 地址 (VIP)。 从特定 Google Cloud 区域的子网分配。

    多个区域的 VIP 地址可以共享同一全球后端服务。如需配置基于 DNS 的全球负载均衡,您可以使用 DNS 路由政策将客户端请求路由到最近的 VIP 地址。

    从特定 Google Cloud 区域的子网分配。
    客户端访问 始终可在全球范围内访问。VPC 中任何 Google Cloud 区域的客户端都可以将流量发送到负载均衡器。 默认情况下不可全球访问。
    您可以视需要启用全球访问权限
    负载均衡后端 全球后端。
    负载均衡器可以将流量发送到任何区域的后端。
    区域级后端。
    负载均衡器只能将流量发送到与负载均衡器的代理位于同一区域的后端。
    高可用性和故障切换 自动故障切换到同一区域或不同区域中的健康后端。 自动故障切换到同一区域内的健康后端。

识别模式

Cloud 控制台

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

    转到“负载均衡”

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

    负载均衡器模式 负载均衡器类型 权限类型 区域
    区域级内部应用负载均衡器 应用 内部 指定一个区域
    跨区域内部应用负载均衡器 应用 内部

gcloud

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

    gcloud compute forwarding-rules describe FORWARDING_RULE_NAME
    

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

    负载均衡器模式 负载均衡方案 转发规则
    跨区域内部应用负载均衡器 INTERNAL_MANAGED 全球
    区域级内部应用负载均衡器 INTERNAL_MANAGED 区域

架构和资源

下图显示了每种模式下内部应用负载均衡器所需的 Google Cloud 资源:

跨区域

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

跨区域内部应用负载均衡器组件。
跨区域内部应用负载均衡器组件(点击可放大)。

区域

下图展示了高级层级的区域级内部应用负载均衡器部署的组件。

区域级内部应用负载均衡器组件。
区域级内部应用负载均衡器组件(点击可放大)。

每个内部应用负载均衡器都使用以下 Google Cloud 配置资源。

代理专用子网

在上图中,代理专用子网提供了一组 IP 地址,供 Google 用于代表您运行 Envoy 代理。您必须在使用内部应用负载均衡器的 VPC 网络的每个区域中创建一个代理专用子网。

下表介绍了区域模式和跨区域模式下代理专用子网之间的差异:

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

GLOBAL_MANAGED_PROXY

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

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

区域级内部应用负载均衡器

REGIONAL_MANAGED_PROXY

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

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

此外:

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

转发规则和 IP 地址

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

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

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

与转发规则关联的内部 IP 地址可以来自与您的后端位于同一网络和区域的子网。

应用负载均衡器的每个转发规则可以引用 1-65535 中的单个端口。如需支持多个端口,您必须配置多个转发规则。您可以将多条转发规则配置为使用相同的内部 IP 地址 (VIP) 并引用相同的目标 HTTP(S) 代理,只要每条转发规则的 IP 地址、端口和协议的整体组合是唯一的即可。这样,您就可以使用具有共享网址映射的单个负载均衡器作为多个应用的代理。

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

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

全球转发规则

区域级 IP 地址

负载均衡方案:

INTERNAL_MANAGED

代理专用子网 --purpose

GLOBAL_MANAGED_PROXY

IP 地址 --purpose

SHARED_LOADBALANCER_VIP

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


区域级内部应用负载均衡器

区域级转发规则

区域级 IP 地址

负载均衡方案:

INTERNAL_MANAGED

代理专用子网 --purpose

REGIONAL_MANAGED_PROXY

IP 地址 --purpose

SHARED_LOADBALANCER_VIP

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

目标代理

目标 HTTP(S) 代理会终结来自客户端的 HTTP(S) 连接。HTTP(S) 代理会查询网址映射以确定如何将流量路由到后端。目标 HTTPS 代理使用 SSL 证书向客户端进行身份验证。

负载均衡器会保留原始客户端请求的 Host 标头。负载均衡器还会将两个 IP 地址附加到 X-Forwarded-For 标头:

  • 连接到负载均衡器的客户端的 IP 地址
  • 负载均衡器转发规则的 IP 地址

如果传入请求中没有 X-Forwarded-For 标头,则这两个 IP 地址为整个标头值。如果请求具有 X-Forwarded-For 标头,则这两个 IP 地址前保留其他信息(例如代理在连接到负载均衡器时记录的 IP 地址)。负载均衡器不会验证此标头中最后两个 IP 地址之前的任何 IP 地址。

如果您作为后端服务器运行代理,则此代理通常会将更多信息附加到 X-Forwarded-For 标头,您的软件可能需要考虑到这一点。来自负载均衡器的代理请求来自代理专用子网中的 IP 地址,后端实例上的代理可能会记录此地址以及后端实例自己的 IP 地址。

根据应用需要处理的流量类型,您可以为负载均衡器配置目标 HTTP 代理或目标 HTTPS 代理。

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

目标代理 跨区域内部应用负载均衡器 区域级内部应用负载均衡器
HTTP 全球 targetHttpProxies regionTargetHttpProxies
HTTPS 全球 targetHttpsProxies regionTargetHttpsProxies

SSL 证书

使用目标 HTTPS 代理的内部应用负载均衡器需要私钥和 SSL 证书作为负载均衡器配置的一部分。

下表指定了每种模式下内部应用负载均衡器所需的 SSL 证书类型:

负载均衡器模式 SSL 证书类型
区域级内部应用负载均衡器

Compute Engine 区域 SSL 证书

Certificate Manager 自行管理的区域级证书和 Google 管理的证书。

Certificate Manager 支持以下类型的 Google 管理的证书:

不支持具有负载均衡器授权的 Google 管理的证书。

跨区域内部应用负载均衡器

Certificate Manager 自行管理的证书和 Google 管理的证书。

Certificate Manager 支持以下类型的 Google 管理的证书:

不支持具有负载均衡器授权的 Google 管理的证书。

不支持 Compute Engine SSL 证书

网址映射

目标 HTTP(S) 代理使用网址映射根据 HTTP 属性(例如请求路径、Cookie 或标头)确定路由。根据确定的路由,代理会将客户端请求转发到特定的后端服务。网址映射可指定要执行的其他操作,如重写标头、向客户端发送重定向以及配置超时政策等。

下表指定了每种模式下内部应用负载均衡器所需的网址映射类型。

负载均衡器模式 网址映射类型
跨区域内部应用负载均衡器 全球网址映射
区域级内部应用负载均衡器 区域网址映射

后端服务

后端服务会将请求分配给健康的后端:包含 Compute Engine 虚拟机的实例组、Cloud Run 或包含 GKE 容器的 NEG。

后端服务支持 HTTP、HTTPS 或 HTTP/2 协议。只能透过 TLS 支持 HTTP/2。客户端和后端不需要使用同一请求协议。例如,客户端可以使用 HTTP/2 向负载均衡器发送请求,而负载均衡器可以使用 HTTP/1.1 将这些请求转发到后端。

下表说明了每种模式下内部应用负载均衡器所需的后端服务类型:

负载均衡器模式 后端服务类型
跨区域内部应用负载均衡器 全球 backendServices
区域级内部应用负载均衡器 区域级 backendServices

下表指定了每种模式下内部应用负载均衡器支持的后端功能:


负载均衡器模式
后端服务上支持的后端 支持后端存储桶 支持 Google Cloud Armor 支持 Cloud CDN 支持 IAP 支持 Service Extensions
实例组 可用区级 NEG 互联网 NEG 无服务器 NEG 混合 NEG Private Service Connect NEG
跨区域内部应用负载均衡器 2
Cloud Run
区域级内部应用负载均衡器 1
Cloud Run

1GCE_VM_IP_PORT 类型端点用于 GKE:使用独立可用区级 NEG使用 Ingress

2GCE_VM_IP_PORT 类型端点用于 GKE:使用独立可用区级 NEG

如需了解详情,请参阅后端服务概览

后端和 VPC 网络

所有后端都必须位于同一 VPC 网络中。不支持将后端置于不同的 VPC 网络中,即使是使用 VPC 网络对等互连连接的后端也是如此。如需详细了解对等互连 VPC 网络中的客户端系统如何访问负载均衡器,请参阅内部应用负载均衡器和连接的网络

后端子集

后端子集化是区域级内部应用负载均衡器支持的一项可选功能,通过为每个代理实例分配后端子集来提高性能和可伸缩性。

默认情况下,后端子集化处于停用状态。如需了解如何启用此功能,请参阅内部应用负载均衡器的后端子集化

健康检查

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

为了使健康检查探测成功运行,您必须创建入站流量允许防火墙规则,以允许健康检查探测到达您的后端实例。通常,健康检查探测源自 Google 的集中式健康检查机制。但是,对于混合 NEG,健康检查源自代理专用子网。如需了解详情,请参阅混合 NEG 概览中的分布式 Envoy 健康检查。

健康检查协议

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

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

负载均衡器模式 健康检查类型
跨区域内部应用负载均衡器 全球
区域级内部应用负载均衡器 区域级 (Regional)

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

防火墙规则

内部应用负载均衡器需要以下防火墙规则:

这些范围的防火墙规则要求有一些例外情况:

  • 对于混合 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 网络对等互连连接到负载均衡器 VPC 网络的 VPC 网络中。
本地客户端可通过 Cloud VPN 隧道或 VLAN 连接访问负载均衡器。这些隧道或连接必须位于负载均衡器所在的地区中。 本地客户端可通过 Cloud VPN 隧道或 VLAN 连接访问负载均衡器。这些隧道或连接可以位于任何地区中。

共享 VPC 架构

内部应用负载均衡器支持使用共享 VPC 的网络。共享 VPC 可让组织将多个项目中的资源连接到一个公用 VPC 网络,让它们能够使用该网络中的内部 IP 地址安全高效地相互通信。如果您还不熟悉共享 VPC,请阅读共享 VPC 概览文档

您可以通过多种方式在共享 VPC 网络中配置内部应用负载均衡器。无论部署类型如何,负载均衡器的所有组件都必须位于同一组织中。

子网和 IP 地址 前端组件 后端组件

在共享 VPC 宿主项目中创建所需的网络和子网(包括代理专用子网)。

负载均衡器的内部 IP 地址可以在宿主项目或服务项目中定义,但它必须使用宿主项目中所需共享 VPC 网络的子网。地址本身来自所引用子网的主要 IP 地址范围。

区域内部 IP 地址、转发规则、目标 HTTP(S) 代理和关联的网址映射必须在同一项目中定义。此项目可以是宿主项目,也可以是服务项目。 您可以执行下列任一操作:
  • 在与前端组件相同的服务项目中创建后端服务和后端(实例组、无服务器 NEG 或任何其他受支持的后端类型)。
  • 根据需要在任意数量的服务项目中创建后端服务和后端(实例组、无服务器 NEG 或任何其他受支持的后端类型)。单个网址映射可以引用不同项目中的后端服务。这种类型的部署称为跨项目服务引用

每个后端服务都必须在其引用的后端所在的项目中定义。与后端服务相关的健康检查也必须在后端服务所在的项目中定义。

虽然您可以在共享 VPC 宿主项目中创建所有负载均衡组件和后端,但此部署类型不会划分网络管理和服务开发责任。

服务项目中的所有负载均衡器组件和后端

以下架构图展示了标准共享 VPC 部署,其中所有负载均衡器组件和后端都位于服务项目中。所有应用负载均衡器都支持此部署类型。

负载均衡器使用宿主项目中的 IP 地址和子网。 如果客户端与内部应用负载均衡器位于同一共享 VPC 网络和区域,则可以访问该负载均衡器。客户端可以位于宿主项目、连接的服务项目或任何连接的网络中。

共享 VPC 网络中的内部应用负载均衡器
共享 VPC 网络中的内部应用负载均衡器

共享 VPC 环境中的无服务器后端**

对于使用无服务器 NEG 后端的内部应用负载均衡器,提供支持的 Cloud Run 服务必须与后端服务和无服务器 NEG 位于同一服务项目中。负载均衡器的前端组件(转发规则、目标代理、网址映射)可以在宿主项目、后端组件所在的服务项目或者同一共享 VPC 环境中的任何其他服务项目中创建。

跨项目服务引用

在此模型中,负载均衡器的前端和网址映射位于宿主项目或服务项目中。负载均衡器的后端服务和后端可以在共享 VPC 环境中跨项目分布。系统可以在单个网址映射中引用跨项目后端服务。这称为跨项目服务引用

跨项目服务引用使组织可以配置一个中央负载均衡器并将流量路由到跨多个不同项目分布的数百个服务。您可以在一个网址映射中集中管理所有流量路由规则和政策。您还可以将负载均衡器与一组主机名和 SSL 证书相关联。这样,您就可以优化部署应用所需的负载均衡器数量,并降低可管理性、运营费用和配额要求。

通过为每个职能团队设置不同的项目,您还可以实现组织中的角色分离。服务所有者可以专注于在服务项目中构建服务,而网络团队可以在另一个项目中预配和维护负载均衡器,这两个角色都可以使用跨项目服务引用进行连接。

服务所有者可以维护其服务公开的自主性,并控制哪些用户可以通过使用负载均衡器访问其服务。这是通过名为 Compute Load Balancer Services User 角色 (roles/compute.loadBalancerServiceUser) 的特殊 IAM 角色实现的。

如需了解如何为内部应用负载均衡器配置共享 VPC(无论是否使用跨项目服务引用),请参阅设置使用共享 VPC 的内部应用负载均衡器

跨项目服务引用的已知限制

  • 如果后端服务具有区域级互联网 NEG 后端,则无法引用跨项目后端服务。所有其他后端类型均受支持。
  • Google Cloud 不会区分多个项目中使用同一名称的资源(例如,后端服务)。因此,当您使用跨项目服务引用时,我们建议您在组织内的项目中使用唯一的后端服务名称。

示例 1:不同服务项目中的负载均衡器前端和后端

以下部署示例是在服务项目 A 中创建负载均衡器的前端和网址映射,并且网址映射引用服务项目 B 中的后端服务。

在这种情况下,服务项目 A 中的 Network Admin 或 Load Balancer Admin 将需要访问服务项目 B 中的后端服务。服务项目 B 的管理员将 compute.loadBalancerServiceUser IAM 角色授予服务项目 A 中希望引用服务项目 B 中的后端服务的 Load Balancer Admin。

服务项目中的负载均衡器前端和网址映射
不同服务项目中的负载均衡器前端和后端

示例 2:宿主项目中的负载均衡器前端和服务项目中的后端

在此类部署中,负载均衡器的前端和网址映射在宿主项目中创建,后端服务(和后端)在服务项目中创建。

在这种情况下,宿主项目中的 Network Admin 或 Load Balancer Admin 将需要访问服务项目中的后端服务。服务项目管理员将 compute.loadBalancerServiceUser IAM 角色授予宿主项目 A 中希望引用该服务项目中的后端服务的 Load Balancer Admin。

宿主项目中的负载均衡器前端和网址映射
宿主项目中的负载均衡器前端和网址映射

超时和重试

内部应用负载均衡器支持以下类型的超时:

超时类型和说明 默认值 支持自定义值
后端服务超时

请求和响应超时。表示从负载均衡器将 HTTP 请求的第一个字节发送到后端,到后端返回 HTTP 响应的最后一个字节时可能经过的最长时间。如果未在请求或响应超时的时间内将整个 HTTP 响应返回到负载均衡器,则剩余响应数据会被丢弃。

  • 对于后端服务上的无服务器 NEG:60 分钟
  • 对于后端服务上的所有其他后端类型:30 秒
客户端 HTTP keepalive 超时
客户端与负载均衡器的托管 Envoy 代理之间的 TCP 连接的最大空闲时间。(同一 TCP 连接可用于多个 HTTP 请求)。
10 分针(600 秒)
后端 HTTP keepalive 超时
负载均衡器的托管 Envoy 代理与后端之间的 TCP 连接的最大空闲时间。(同一 TCP 连接可用于多个 HTTP 请求)。
10 分针(600 秒)

后端服务超时

可配置的后端服务超时表示负载均衡器等待后端处理 HTTP 请求并返回相应的 HTTP 响应的最长时间。除无服务器 NEG 外,后端服务超时的默认值为 30 秒。

例如,如果您要下载一个 500 MB 的文件,并且后端服务超时值为 90 秒,则负载均衡器期望后端在 90 秒内传送整个 500 MB 的文件。有时,配置的后端服务超时值可能会不够长,使得后端无法发送其完整的 HTTP 响应。在这种情况下,如果负载均衡器至少收到来自后端的 HTTP 响应标头,则负载均衡器会返回完整响应标头以及在后端服务超时内尽可能获取的响应正文部分。

您应将后端服务超时设置为您希望后端处理 HTTP 响应所需的最长时间。如果后端上运行的软件需要更多时间来处理 HTTP 请求并返回完整响应,则应增加后端服务超时值。

后端服务超时接受 12,147,483,647 秒之间的值,但过大的值不是切实可行的配置选项。Google Cloud 不保证底层 TCP 连接在后端服务超时的整个期间保持打开状态。客户端系统必须实现重试逻辑,而不是依赖 TCP 连接长时间保持打开状态。

对于与内部应用负载均衡器搭配使用的 WebSocket 连接,活跃的 WebSocket 连接不遵循后端服务超时。空闲 WebSocket 连接会在后端服务超时后关闭。

Google Cloud 会定期重启或更改响应 Envoy 软件任务的数量。后端服务超时值越大,Envoy 任务重启或替换终止 TCP 连接的可能性就越大。

如需配置后端服务超时,请使用以下方法之一:

客户端 HTTP keepalive 超时

客户端 HTTP keepalive 超时表示 TCP 连接在(下游)客户端和 Envoy 代理之间可以空闲的最长时间。客户端 HTTP keepalive 超时值固定为 600 秒。

HTTP keepalive 超时也称为 TCP 空闲超时

负载均衡器的客户端 HTTP keepalive 超时应大于下游客户端或代理使用的 HTTP keepalive(TCP 空闲)超时。如果下行客户端的 HTTP keepalive(TCP 空闲)超时大于负载均衡器的客户端 HTTP keepalive 超时,则可能会出现竞态条件。从下行客户端的角度来看,已建立的 TCP 连接可以空闲的时间超过负载均衡器允许的时长。这意味着,在负载均衡器认为 TCP 连接已关闭后,下行客户端可以发送数据包。发生这种情况时,负载均衡器会以 TCP 重置 (RST) 数据包进行响应。

后端 HTTP keepalive 超时

内部应用负载均衡器是代理,它们在(下游)客户端和 Envoy 代理之间使用第一个 TCP 连接,在 Envoy 代理和后端之间使用第二个 TCP 连接。

负载均衡器的第二个 TCP 连接可能不会在每次请求后关闭;它们可以保持打开状态,以处理多个 HTTP 请求和响应。后端 HTTP keepalive 超时定义了负载均衡器与后端之间的 TCP 空闲超时。后端 HTTP keepalive 超时不适用于 WebSocket。

后端 keepalive 超时固定为 10 分钟(600 秒),无法更改。负载均衡器的后端 keepalive 超时应小于后端上运行的软件使用的 keepalive 超时。这样可以避免出现竞态条件,在竞态条件下,后端的操作系统可能通过 TCP 重置 (RST) 关闭 TCP 连接。由于负载均衡器的后端 keepalive 超时不可配置,因此您必须配置后端软件,以使其 HTTP keepalive(TCP 空闲)超时值大于 600 秒。

下表列出了修改常用 Web 服务器软件的 keepalive 超时值需要进行的更改。

Web 服务器软件 参数 默认设置 推荐设置
Apache KeepAliveTimeout KeepAliveTimeout 5 KeepAliveTimeout 620
nginx keepalive_timeout keepalive_timeout 75s; keepalive_timeout 620s;

重试

如需配置重试,您可以在网址映射中使用重试政策。默认重试次数 (numRetries) 为 1。每次尝试的默认超时 (perTryTimeout) 为 30 秒,最大可配置 perTryTimeout 为 24 小时。

如果没有重试政策,则没有 HTTP 正文(例如,GET 请求)并导致 HTTP 502503504 响应的失败请求会重试一次。

HTTP POST 请求不会重试。

重试请求仅会为最终响应生成一个日志条目。

如需了解详情,请参阅内部应用负载均衡器日志记录和监控

访问连接的网络

您可以使用以下方式从连接的网络访问 VPC 网络中的内部应用负载均衡器:

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

如需查看详细示例,请参阅内部应用负载均衡器和连接的网络

故障切换

如果后端健康状况不佳,则流量会被自动重定向到健康状况良好的后端。

下表介绍了每种模式下的故障切换行为:

负载均衡器模式 故障切换行为 所有后端运行状况都不正常时的行为
跨区域内部应用负载均衡器

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

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

返回 HTTP 503
区域级内部应用负载均衡器

自动故障切换到同一区域内的健康后端。

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

返回 HTTP 503

高可用性和跨区域故障切换

您可以在多个区域中设置跨区域内部应用负载均衡器,以获享以下优势:

  1. 如果某个区域中的跨区域内部应用负载均衡器发生故障,则 DNS 路由政策会将流量路由到另一个区域中的跨区域内部应用负载均衡器。

    高可用性部署示例展示以下内容:

    • VPC 网络的 RegionARegionB 区域中具有前端虚拟 IP 地址 (VIP) 的跨区域内部应用负载均衡器。客户端位于 RegionA 区域。
    • 您可以使负载均衡器可通过两个区域中的前端 VIP 访问,并使用 DNS 路由政策向客户端返回最佳 VIP。如果您希望客户端使用地理位置最接近的 VIP,请使用地理定位路由政策
    • 在发生区域级服务中断时,DNS 路由政策可以检测 VIP 地址是否没有响应,并向客户端返回下一个最佳 VIP 地址,从而确保应用在区域级服务中断期间仍然正常运行。
    具有高可用性部署的跨区域内部应用负载均衡器。
    具有高可用性部署的跨区域内部应用负载均衡器(点击可放大)。
  2. 如果某个特定区域中的后端发生故障,则跨区域内部应用负载均衡器流量可以安全地故障切换到另一个区域中的后端。

    跨区域故障切换部署示例展示以下内容:

    • 跨区域内部应用负载均衡器具有您的 VPC 网络的 RegionA 区域中的前端 VIP 地址。您的客户端也位于 RegionA 区域。
    • 引用 RegionARegionB Google Cloud 区域中的后端的全球后端服务。
    • RegionA 区域中的后端发生故障时,流量会故障切换到 RegionB 区域。
    具有跨区域故障切换部署的跨区域内部应用负载均衡器。
    具有跨区域故障切换部署的跨区域内部应用负载均衡器(点击可放大)。

WebSocket 支持

当您使用 HTTP 或 HTTPS 作为后端协议时,基于 Google Cloud HTTP(S) 的负载均衡器可以为 WebSocket 协议提供内置支持。负载均衡器无需进行任何配置即可代理 WebSocket 连接。

WebSocket 协议提供客户端和服务器之间的全双工通信通道。该通道由 HTTP(S) 请求发起。如需详细了解该协议,请参阅 RFC 6455

如果负载均衡器识别到来自 HTTP(S) 客户端的 WebSocket Upgrade 请求,并且后端实例为该请求返回了成功的 Upgrade 响应,则负载均衡器会在当前连接期间代理双向流量。如果后端实例未返回成功的 Upgrade 响应,则负载均衡器会关闭连接。

WebSocket 的会话亲和性与其他任何请求的运作方式相同。如需了解详情,请参阅会话亲和性

gRPC 支持

gRPC 是远程过程调用的开源框架。它基于 HTTP/2 标准运行。适合使用 gRPC 的场景如下:

  • 延迟时间短、扩缩能力强的分布式系统
  • 开发与云服务器通信的移动客户端
  • 设计必须准确、高效并且独立于语言的新协议
  • 支持扩展、身份验证和日志记录的分层设计

如需将 gRPC 与您的 Google Cloud 应用搭配使用,您必须通过 HTTP/2 以端到端方式对请求进行代理。为此,请按以下说明操作:

  1. 配置 HTTPS 负载均衡器。
  2. 启用 HTTP/2 作为从负载均衡器到后端的协议。

在进行 SSL 握手过程中,负载均衡器会通过使用 ALPN TLS 扩展程序与客户端协商 HTTP/2。

负载均衡器仍然可以与某些客户端协商 HTTPS,或接受配置为在负载均衡器和后端实例之间使用 HTTP/2 的负载均衡器上的不安全 HTTP 请求。这些 HTTP 或 HTTPS 请求由负载均衡器进行转换,以便通过 HTTP/2 将请求代理到后端实例。

您必须在后端上启用 TLS。如需了解详情,请参阅从负载均衡器到后端的加密

TLS 支持

默认情况下,HTTPS 目标代理在终结客户端 SSL 请求时仅接受 TLS 1.0、1.1、1.2 和 1.3。

当内部应用负载均衡器使用 HTTPS 作为后端服务协议时,它可以与后端协商 TLS 1.0、1.1、1.2 或 1.3。

限制

  • 我们无法保证区域中某可用区的客户端发出的请求会发送到与该客户端位于相同可用区的后端。 会话亲和性不会减少可用区之间的通信。

  • 内部应用负载均衡器与以下功能不兼容:

  • 内部应用负载均衡器仅支持通过 TLS 使用 HTTP/2。

  • 连接到内部应用负载均衡器的客户端必须使用 HTTP 1.1 版或更高版本。不支持 HTTP 1.0。

  • 如果代理专用子网的 IP 地址耗尽,Google Cloud 不会向您发出警告。

  • 内部应用负载均衡器使用的内部转发规则只能有一个端口。

  • 内部应用负载均衡器不支持 Cloud Trace

  • 在共享 VPC 环境中将内部应用负载均衡器与 Cloud Run 搭配使用时,服务项目中的独立 VPC 网络可以将流量发送到部署在同一共享 VPC 环境内的任何其他服务项目中的任何其他 Cloud Run 服务。这是一个已知问题,未来将阻止这种形式的访问。

  • Google Cloud 不保证底层 TCP 连接在后端服务超时的整个期间保持打开状态。客户端系统必须实现重试逻辑,而不是依赖 TCP 连接长时间保持打开状态。

后续步骤