本文档介绍配置内部应用负载均衡器时需要了解的概念。
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 控制台
在 Google Cloud 控制台中,转到负载均衡页面。
在负载均衡器标签页中,您可以看到负载均衡器类型、协议和区域。如果区域为空,则负载均衡器处于跨区域模式。下表总结了如何识别负载均衡器的模式。
负载均衡器模式 负载均衡器类型 访问权限类型 区域 区域级内部应用负载均衡器 应用 内部 指定一个区域 跨区域内部应用负载均衡器 应用 内部
gcloud
如需确定负载均衡器的模式,请运行以下命令:
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 地址规范。每条转发规则都会引用一个区域级 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 地址
|
全球访问权限默认处于启用状态,以允许来自 VPC 中任何区域的客户端访问负载均衡器。 后端可以位于多个区域中。 |
区域级内部应用负载均衡器 |
负载均衡方案:
代理专用子网
IP 地址
|
您可以启用全球访问权限,以允许来自 VPC 中任何区域的客户端访问负载均衡器。后端也必须与负载均衡器位于同一区域。 |
转发规则和 VPC 网络
本部分介绍了外部应用负载均衡器使用的转发规则如何与 VPC 网络相关联。
负载均衡器模式 | VPC 网络关联 |
---|---|
跨区域内部应用负载均衡器 区域级内部应用负载均衡器 |
区域级内部 IPv4 地址始终位于 VPC 网络内。创建转发规则时,您需要指定从中获取内部 IP 地址的子网。此子网必须位于创建代理专用子网的同一区域和 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 证书类型 |
---|---|
区域级内部应用负载均衡器 |
Certificate Manager 自行管理的区域级证书和 Google 管理的证书。 Certificate Manager 支持以下类型的 Google 管理的证书:
不支持具有负载均衡器授权的 Google 管理的证书。 |
跨区域内部应用负载均衡器 | Certificate Manager 自行管理的证书和 Google 管理的证书。 Certificate Manager 支持以下类型的 Google 管理的证书:
不支持具有负载均衡器授权的 Google 管理的证书。 |
网址映射
目标 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 |
1 将 GCE_VM_IP_PORT
类型端点用于 GKE:使用独立可用区级 NEG 或使用 Ingress
2 将 GCE_VM_IP_PORT
类型端点用于 GKE:使用独立可用区级 NEG
如需了解详情,请参阅后端服务概览。
后端和 VPC 网络
后端位置的限制取决于负载均衡器的类型。
对于实例组、可用区级 NEG 和混合连接 NEG,所有后端都必须位于与后端服务相同的项目和区域中。不过,负载均衡器可以引用与后端服务位于同一项目中,但使用其他 VPC 网络的后端(此功能目前处于预览版阶段)。负载均衡器的 VPC 网络与后端 VPC 网络之间的连接可以使用 VPC 网络对等互连、Cloud VPN 隧道、Cloud Interconnect VLAN 连接或 Network Connectivity Center 框架进行配置。
后端网络定义
- 对于可用区级 NEG 和混合 NEG,您需要在创建 NEG 时明确指定 VPC 网络。
- 对于托管式实例组,VPC 网络在实例模板中定义。
- 对于非托管式实例组,实例组的 VPC 网络设置为与添加到实例组的第一个虚拟机的
nic0
接口的 VPC 网络相匹配。
后端网络要求
您的后端网络必须满足以下网络要求之一:
后端的 VPC 网络必须与转发规则的 VPC 网络完全匹配。
后端的 VPC 网络必须使用 VPC 网络对等互连连接到转发规则的 VPC 网络。您必须配置子网路由交换,以允许转发规则 VPC 网络中的代理专用子网与后端实例或端点所使用的子网之间进行通信。
- 后端的 VPC 网络和转发规则的 VPC 网络都必须是位于同一个 Network Connectivity Center hub 上的 VPC spoke。导入和导出过滤条件必须允许转发规则 VPC 网络中的代理专用子网与后端实例或端点所使用的子网之间进行通信。
- 对于所有其他类型的后端,所有后端都必须位于同一 VPC 网络和区域中。
后端和网络接口
如果您使用实例组后端,数据包始终会递送到 nic0
。如果您想将数据包发送到不同的 NIC,请改用 NEG 后端。
如果您使用的是可用区级 NEG 后端,数据包会发送到 NEG 中的端点所代表的任何网络接口。NEG 端点必须与 NEG 明确定义的 VPC 网络位于同一 VPC 网络中。
后端子集
后端子集化是区域级内部应用负载均衡器支持的一项可选功能,通过为每个代理实例分配后端子集来提高性能和可伸缩性。
默认情况下,后端子集化处于停用状态。如需了解如何启用此功能,请参阅内部应用负载均衡器的后端子集化。
健康检查
每项后端服务都会指定健康检查,用于定期监控后端是否已准备好从负载均衡器接收连接。这样可以降低向无法处理请求的后端发送请求的风险。健康检查不会检查应用本身是否正常运行。
为了使健康检查探测成功运行,您必须创建入站流量允许防火墙规则,以允许健康检查探测到达您的后端实例。通常,健康检查探测源自 Google 的集中式健康检查机制。但是,对于混合 NEG,健康检查源自代理专用子网。如需了解详情,请参阅混合 NEG 概览中的分布式 Envoy 健康检查。
健康检查协议
最佳实践是使用其协议与后端服务的协议相匹配的健康检查,不过这并非强制性要求,而且也不一定可行。例如,HTTP/2 健康检查能够最准确地测试后端的 HTTP/2 连接性。相比之下,使用混合 NEG 后端的内部应用负载均衡器不支持 gRPC 健康检查。如需查看受支持的健康检查协议的列表,请参阅负载均衡功能。
下表指定了每种模式下内部应用负载均衡器支持的健康检查范围:
负载均衡器模式 | 健康检查类型 |
---|---|
跨区域内部应用负载均衡器 | 全球 |
区域级内部应用负载均衡器 | 区域 |
如需详细了解健康检查,请参阅以下内容:
防火墙规则
内部应用负载均衡器需要以下防火墙规则:
- 允许来自 Google 的中央健康检查范围的流量的入站流量允许规则。
35.191.0.0/16
130.211.0.0/22
对于进入后端的 IPv6 流量:
2600:2d00:1:b029::/64
- 允许来自代理专用子网的流量的入站流量允许规则。
这些范围的防火墙规则要求有一些例外情况:
- 对于混合 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) 代理和关联的网址映射必须在同一项目中定义。此项目可以是宿主项目,也可以是服务项目。 | 您可以执行下列任一操作:
每个后端服务都必须在其引用的后端所在的项目中定义。与后端服务相关的健康检查也必须在后端服务所在的项目中定义。 |
虽然您可以在共享 VPC 宿主项目中创建所有负载均衡组件和后端,但此部署类型不会划分网络管理和服务开发责任。
服务项目中的所有负载均衡器组件和后端
以下架构图展示了标准共享 VPC 部署,其中所有负载均衡器组件和后端都位于服务项目中。所有应用负载均衡器都支持此部署类型。
负载均衡器使用宿主项目中的 IP 地址和子网。 如果客户端与内部应用负载均衡器位于同一共享 VPC 网络和区域,则可以访问该负载均衡器。客户端可以位于宿主项目、连接的服务项目或任何连接的网络中。
共享 VPC 环境中的无服务器后端**
对于使用无服务器 NEG 后端的内部应用负载均衡器,提供支持的 Cloud Run 服务必须与后端服务和无服务器 NEG 位于同一服务项目中。负载均衡器的前端组件(转发规则、目标代理、网址映射)可以在宿主项目、后端组件所在的服务项目或者同一共享 VPC 环境中的任何其他服务项目中创建。
跨项目服务引用
在此模型中,负载均衡器的前端和网址映射位于宿主项目或服务项目中。负载均衡器的后端服务和后端可以在共享 VPC 环境中跨项目分布。系统可以在单个网址映射中引用跨项目后端服务。这称为跨项目服务引用。
跨项目服务引用使组织可以配置一个中央负载均衡器并将流量路由到跨多个不同项目分布的数百个服务。您可以在一个网址映射中集中管理所有流量路由规则和政策。您还可以将负载均衡器与一组主机名和 SSL 证书相关联。这样,您就可以优化部署应用所需的负载均衡器数量,并降低可管理性、运营费用和配额要求。
通过为每个职能团队设置不同的项目,您还可以实现组织中的角色分离。服务所有者可以专注于在服务项目中构建服务,而网络团队可以在另一个项目中预配和维护负载均衡器,这两个角色都可以使用跨项目服务引用进行连接。
服务所有者可以维护其服务公开的自主性,并控制哪些用户可以通过使用负载均衡器访问其服务。这是通过名为 Compute Load Balancer Services User 角色 (roles/compute.loadBalancerServiceUser
) 的特殊 IAM 角色实现的。
跨项目服务引用的已知限制
- 如果后端服务具有区域级互联网 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 响应返回到负载均衡器,则剩余响应数据会被丢弃。 |
|
|||
客户端 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 请求并返回完整响应,则应增加后端服务超时值。
后端服务超时接受 1
到 2,147,483,647
秒之间的值,但过大的值不是切实可行的配置选项。Google Cloud 也不保证底层 TCP 连接在后端服务超时的整个期间保持打开状态。客户端系统必须实现重试逻辑,而不是依赖 TCP 连接长时间保持打开状态。
如需配置后端服务超时,请使用以下方法之一:
- Google Cloud 控制台:修改负载均衡器后端服务的超时字段。
- Google Cloud CLI:使用
gcloud compute backend-services update
命令修改后端服务资源的--timeout
参数。 - API:修改
regionBackendServices
资源的timeoutSec
参数。
客户端 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
上限为 24 小时。
如果没有重试政策,则没有 HTTP 正文(例如,GET
请求)并导致 HTTP 502
、503
或 504
响应的失败请求会重试一次。
HTTP POST
请求不会重试。
重试请求仅会为最终响应生成一个日志条目。
如需了解详情,请参阅内部应用负载均衡器日志记录和监控。
访问连接的网络
您的客户端可以使用以下方式从连接的网络访问 VPC 网络中的内部应用负载均衡器:
- VPC 网络对等互连
- Cloud VPN 和 Cloud Interconnect
如需查看详细示例,请参阅内部应用负载均衡器和连接的网络。
故障切换
如果后端健康状况不佳,则流量会被自动重定向到健康状况良好的后端。
下表介绍了每种模式下的故障切换行为:
负载均衡器模式 | 故障切换行为 | 所有后端运行状况都不正常时的行为 |
---|---|---|
跨区域内部应用负载均衡器 | 自动故障切换到同一区域或其他区域中的健康后端。 根据配置的流量分配将流量分配到多个区域中的健康后端。 |
返回 HTTP 503 |
区域级内部应用负载均衡器 | 自动故障切换到同一区域内的健康后端。 Envoy 代理会根据配置的流量分配将流量发送到区域中的健康后端。 |
返回 HTTP 503 |
高可用性和跨区域故障切换
对于区域级内部应用负载均衡器
如需实现高可用性,请在最支持应用流量的区域中部署多个单独的区域级内部应用负载均衡器。然后,您可以使用 Cloud DNS 地理定位路由政策检测负载均衡器在区域级服务中断期间是否响应。地理定位政策会根据客户端请求的来源,将流量路由到下一个最近的可用区域。健康检查在默认情况下可用于内部应用负载均衡器。
对于跨区域内部应用负载均衡器
您可以在多个区域中设置跨区域内部应用负载均衡器,以获享以下优势:
如果某个区域中的跨区域内部应用负载均衡器发生故障,则 DNS 路由政策会将流量路由到另一个区域中的跨区域内部应用负载均衡器。
高可用性部署示例展示以下内容:
- VPC 网络的
RegionA
和RegionB
区域中具有前端虚拟 IP 地址 (VIP) 的跨区域内部应用负载均衡器。客户端位于RegionA
区域。 - 您可以使负载均衡器可通过两个区域中的前端 VIP 访问,并使用 DNS 路由政策向客户端返回最佳 VIP。如果您希望客户端使用地理位置最接近的 VIP,请使用地理定位路由政策。
- 在发生区域级服务中断时,DNS 路由政策可以检测 VIP 地址是否没有响应,并向客户端返回下一个最佳 VIP 地址,从而确保应用在区域级服务中断期间仍然正常运行。
- VPC 网络的
如果某个特定区域中的后端发生故障,则跨区域内部应用负载均衡器流量可以安全地故障切换到另一个区域中的后端。
跨区域故障切换部署示例展示以下内容:
- 跨区域内部应用负载均衡器具有您的 VPC 网络的
RegionA
区域中的前端 VIP 地址。您的客户端也位于RegionA
区域。 - 引用
RegionA
和RegionB
Google Cloud 区域中的后端的全球后端服务。 - 当
RegionA
区域中的后端发生故障时,流量会故障切换到RegionB
区域。
- 跨区域内部应用负载均衡器具有您的 VPC 网络的
WebSocket 支持
当您使用 HTTP 或 HTTPS 作为后端协议时,基于 Google Cloud HTTP(S) 的负载均衡器支持 WebSocket 协议。负载均衡器无需进行任何配置即可代理 WebSocket 连接。
WebSocket 协议提供客户端和负载均衡器之间的全双工通信通道。如需了解详情,请参阅 RFC 6455。
WebSocket 协议的工作原理如下:
- 负载均衡器识别到来自 HTTP(S) 客户端的 WebSocket
Upgrade
请求。该请求包含Connection: Upgrade
、Upgrade: websocket
标头,后跟其他有关的 WebSocket 相关请求标头。 - 后端发送 WebSocket
Upgrade
响应。后端实例发送包含Connection: Upgrade
、Upgrade: websocket
标头和其他 WebSocket 相关响应标头的101 switching protocol
响应。 - 负载均衡器会在当前连接期间代理双向流量。
如果后端实例返回响应代码为 426
或 502
的错误响应,则负载均衡器会关闭连接。
WebSocket 的会话亲和性与其他任何请求的运作方式相同。如需了解详情,请参阅会话亲和性。
gRPC 支持
gRPC 是远程过程调用的开源框架。它基于 HTTP/2 标准运行。适合使用 gRPC 的场景如下:
- 延迟时间短、扩缩能力强的分布式系统
- 开发与云服务器通信的移动客户端
- 设计必须准确、高效并且独立于语言的新协议
- 支持扩展、身份验证和日志记录的分层设计
如需将 gRPC 与您的 Google Cloud 应用搭配使用,您必须通过 HTTP/2 以端到端方式对请求进行代理。为此,请按以下说明操作:
- 配置 HTTPS 负载均衡器。
- 启用 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 连接长时间保持打开状态。
后续步骤
- 如需在共享 VPC 设置中配置负载均衡,请参阅为共享 VPC 设置内部应用负载均衡器。
- 如需为在 GKE pod 中运行的服务配置负载均衡,请参阅部署 GKE 网关、使用独立 NEG 实现容器原生负载均衡和将内部应用负载均衡器连接到独立 NEG 部分。
- 如需使用 Private Service Connect 配置区域级内部应用负载均衡器,请参阅通过使用方 HTTP(S) 服务控制配置 Private Service Connect。
- 如需管理代理专用子网资源,请参阅代理专用子网。
- 如需在区域级内部应用负载均衡器上配置后端子集化,请参阅后端子集化。
- 如需将自定义逻辑注入负载均衡数据路径,请配置 Service Extensions 标注。