Cloud Load Balancing 支持将流量代理到 Google Cloud 外部的外部后端。如需为负载均衡器定义外部后端,请使用称为互联网网络端点组 (NEG) 的资源。
如果您想从外部后端传送内容,但希望 Google Cloud 负载均衡器作为前端,则可以使用此类部署。这样一来,您将能够执行以下操作:
- 使用 Google Edge 基础架构来终止用户连接。
- 将连接定向到您的外部后端。
- 通过 Google 的专有骨干网向您的公共端点传送流量,从而提高可靠性并缩短客户端和服务器之间的延迟时间。
- 借助全球负载均衡器,您可以使用 Cloud CDN 为您的外部后端缓存内容。
图 1 展示了具有多种后端类型(其中一种是配置有互联网 NEG 的外部后端)的外部应用负载均衡器。
各种全球和区域级负载均衡器均支持互联网 NEG 后端。根据您的负载均衡器(全球或区域级),互联网 NEG 支持在 DNS、健康检查、可用端点数量和流量路由行为方面会有所不同。
以下各部分介绍了外部后端如何与 Cloud Load Balancing 搭配使用。如果要将外部后端与 Cloud Service Mesh 搭配使用,请参阅具有互联网网络端点组的 Cloud Service Mesh。
术语
以下术语有时可以互换使用,因为它们的含义相同或相似:
- 外部后端:驻留在 Google Cloud 外部且可通过互联网访问的后端。互联网 NEG 中的端点。
- 自定义源站:与外部后端相同。在 CDN 中,“源站”是一个业界标准术语,用于表示传送 Web 内容的后端实例。
- 互联网网络端点组 (NEG):用于指定外部后端的 Google Cloud API 资源。
- 外部端点:与外部后端相同。
本文档在提及互联网 NEG API 资源时使用的是“外部后端”一词。
负载均衡器组件
本部分介绍配置具有外部后端的负载均衡器所需的负载均衡架构和资源。负载均衡器需要仅适用于后端服务的特殊配置。前端配置与任何其他负载均衡器相同。
下图显示了设置具有外部后端的负载均衡器所需的 Google Cloud 资源。
全球外部
该图展示了设置具有外部后端的全球外部应用负载均衡器所需的 Google Cloud 资源。
区域外部
该图展示了设置具有外部后端的区域级外部应用负载均衡器所需的 Google Cloud 资源。
区域内部
该图展示了设置具有外部后端的区域级内部应用负载均衡器所需的 Google Cloud 资源。
此图展示了设置具有外部后端的区域级内部代理网络负载均衡器所需的 Google Cloud 资源。
互联网 NEG 只能在高级 Network Service Tiers 上使用。
前端配置
使用互联网 NEG 后端创建负载均衡器时,无需特殊的前端配置。转发规则用于根据 IP 地址、端口和协议将流量路由到目标代理。然后,目标代理会终止来自客户端的连接。此外,基于 Envoy 的负载均衡器需要代理专用子网。
应用负载均衡器还使用网址映射设置基于网址将请求路由到相应后端服务。
如需详细了解这些组件中的每个组件,请参阅相应负载均衡器的架构部分:
互联网 NEG
互联网 NEG 是用于为负载均衡器定义外部后端的资源。互联网 NEG 有两种类型:全球互联网 NEG 和区域互联网 NEG。它们在范围(全球与区域)和行为方面有所不同。全局互联网 NEG 所引用的外部后端必须只能通过互联网访问;不能通过 Cloud VPN 或 Cloud Interconnect 访问。如果外部后端引用 Google API 或服务,则必须通过使用 HTTP
、HTTPS
或 HTTP/2
协议的 TCP 端口 80
或 443
访问该服务。
有两种方法可以配置 NEG 引用的外部端点:INTERNET_FQDN_PORT
或 INTERNET_IP_PORT
。如果选择 INTERNET_IP_PORT
格式,则只能使用可在互联网上路由的公共 IP 地址;如果选择 INTERNET_FQDN_PORT
格式,则 FQDN 可以解析为可在互联网上路由的公共 IP 地址或专用 IP 地址,具体取决于端点的范围(区域级或全球级)。
全球互联网 NEG 由 Google Front End (GFE) 技术提供支持。它们使用一组固定的 IP 地址来发送出站流量,以将其发送到所有客户端。它们仅支持每个 NEG 一个端点,以及每项后端服务一个互联网 NEG。
下表介绍了不同负载均衡器会以何种方式支持全球互联网 NEG。
负载均衡器 | 端点类型 | 端点定义 | 范围 | 健康检查 |
---|---|---|---|---|
|
|
可公开解析的完全限定域名和可选端口。例如: 域名必须可由 Google 的公共 DNS 基础架构解析。 每个 NEG 只允许一个端点。 |
全球 | 不支持 |
|
可公开路由的 IP 地址和可选端口。例如 IP 地址不能是 RFC 1918 地址。 每个 NEG 只允许一个端点。 |
† 如果您在添加端点时未指定端口,则系统会使用 NEG 的默认端口。如果您没有为 NEG 指定默认端口,则使用后端协议的已知端口(HTTP 为 80
,HTTPS 和 HTTP/2 为 443
)。
区域级互联网 NEG 由托管式 Envoy 代理和 Cloud NAT 网关提供支持。它们支持每个 NEG 允许多个端点,以及每项后端服务允许多个互联网 NEG。您可以使用 Cloud NAT 网关配置用于向客户端发送出站流量的 IP 地址。
下表介绍了不同负载均衡器会以何种方式支持区域级互联网 NEG。
负载均衡器 | 端点类型 | 端点定义 | 范围 | 健康检查 |
---|---|---|---|---|
|
|
可公开或私下解析的完全限定域名和可选端口。例如: 域名解析过程遵循 Cloud DNS 域名解析顺序过程。 每个 NEG 最多允许 256 个端点。 |
区域 | Envoy 分布式健康检查 |
|
仅可公开路由的 IP 地址和可选端口。例如 IP 地址不能是 RFC 1918 地址。 每个 NEG 最多允许 256 个端点。 |
* 使用区域级互联网 NEG 时,您需要指定端口。您可以在创建 NEG 时指定默认端口,也可以在每次向 NEG 添加端点时指定端口,也可以同时执行这两项操作。如果您在添加端点时未指定端口,则系统会使用 NEG 的默认端口。
区域 INTERNET_FQDN_PORT
端点的 DNS 解析
如果您的网域可通过互联网解析,则无需其他配置来设置 DNS。但是,如果您解析的是专用 FQDN,则需要配置 Cloud DNS 以便于进行 DNS 解析。该名称必须托管在 Cloud DNS 上,或者必须可使用从 Cloud DNS 到本地 DNS 的 DNS 转发进行解析;如果引用其他 VPC 网络中的专用 DNS 区域,则还必须可使用 DNS 对等互连进行解析。
首先,创建一个 Cloud DNS 区域以在您的项目中托管 DNS 记录。然后向其添加 DNS 记录。如需了解具体的配置步骤,请参阅 Cloud DNS 文档。如需详细了解 Cloud DNS 解析顺序,请参阅名称解析顺序。
如果您使用的是共享 VPC,请注意特定的网络要求。您还可以使用 Cloud DNS 的其他功能(例如转发区域)从本地 DNS 服务器提取记录。
全球 INTERNET_FQDN_PORT
端点的 IP 地址解析
如果 INTERNET_FQDN_PORT
端点指向一个返回多个 IP 地址的 DNS 记录,则 IP 地址将通过以下方式解析:
负载均衡器使用互联网中最接近其客户端的 Google Cloud 区域中的 DNS 解析器。如果您的
INTERNET_FQDN_PORT
端点的 DNS 记录根据客户端的位置返回不同的 IP 地址,请确保负载均衡器可以访问其中的每个 IP 地址。负载均衡器尝试连接到 DNS 响应中的第一个 IP 地址。如果该 IP 地址无法访问,则负载均衡器将返回 HTTP
502 (Bad Gateway)
响应。即使 DNS 响应中有其他 IP 地址可用,也是如此。
如需详细了解 Google DNS 解析器基础架构使用的 IP 地址范围和位置,请参阅 Google 公共 DNS 文档。无法被公共 DNS 系统解析的名称不能用作外部后端。
区域 INTERNET_FQDN_PORT
端点的 IP 地址解析
区域级互联网 NEG 支持使用 Cloud DNS 和 Google 的公共 DNS 进行域名解析。
- 对于公共 DNS 解析,Cloud DNS 会将流量转发到 Google 的公共 DNS 服务器。
- 对于 Cloud DNS,域名必须为以下之一:
- 托管在 Cloud DNS 上
- 可使用从 Cloud DNS 到本地 DNS 服务器的 DNS 转发进行解析
- 如果您引用的是其他 VPC 网络中的专用 DNS 区域,则可使用 DNS 对等互连进行解析。
如果 DNS 服务器返回多个 IP 地址,Envoy 会根据配置的负载均衡算法(轮询、最少请求等)在返回的 IP 地址之间实现流量负载均衡。系统会根据 DNS TTL 定期刷新端点列表。您可以配置重试政策,以强制 Envoy 在一个 IP 地址失败时尝试连接到另一个 IP 地址。
后端服务
后端服务向负载均衡器提供配置信息。负载均衡器使用后端服务中的信息将传入的流量定向到一个或多个挂接的后端。
如需使用外部后端设置负载均衡器,请使用互联网 NEG 后端来配置后端服务。将互联网 NEG 添加到后端服务时,请考虑以下注意事项,具体取决于 NEG 的范围:
后端服务也不能使用其他后端类型(例如可用区级 NEG 或实例组)作为后端。
每个后端服务的 NEG 数量
- 全球 NEG。您只能向后端服务添加一个互联网 NEG 后端。
- 区域 NEG。您最多可以向同一后端服务添加 50 个互联网 NEG。
每个 NEG 的端点数
全球 NEG。一个互联网 NEG 中只能添加一个端点。
由于每个全球互联网 NEG 中只允许有一个端点,因此实际上并未执行负载均衡。负载均衡器仅用作前端,并且将流量代理到指定的外部后端。这意味着您无法使用任何负载均衡模式,如速率、连接或利用率。
- 区域 NEG。每个 NEG 最多可以添加 256 个端点到同一后端服务。
区域 NEG 不支持负载均衡模式,例如速率、连接或利用率。连接到后端服务的所有 NEG 的所有端点都汇集到一个组中。此端点池中的负载均衡流量使用 Envoy 负载均衡算法进行处理。如需了解受支持的负载均衡政策算法,请参阅区域级后端服务 API 文档中的
localityLbPolicy
。健康检查
- 全球 NEG。后端服务不能引用健康检查。
- 区域 NEG。负载均衡器使用分布式 Envoy 健康检查。
后端服务的负载均衡方案必须与您要部署的负载均衡器所需的方案匹配。如需查看完整列表,请参阅后端服务。
后端服务协议必须是
HTTP
、HTTPS
或HTTP2
之一。我们强烈建议您在使用互联网 NEG 配置后端服务时使用 HTTPS 或 HTTP/2 作为协议,以便在传输公共互联网时加密和验证负载均衡器与后端之间的通信。
此外,使用 HTTPS 或 HTTP/2 作为后端协议时,请确保使用
INTERNET_FQDN_PORT
端点创建外部后端。这有两个优势:它确保负载均衡器验证外部后端提供的 SSL 服务器证书,并验证以下信息是否为 true:
- 该证书由知名证书授权机构 (CA) 签名。
- 该证书没有过期。
- 该证书签名有效。
- 配置的 FQDN 与证书中的某个主题备用名称 (SAN) 匹配。
如果使用
INTERNET_IP_PORT
端点创建外部后端,则系统不会执行 SSL 服务器证书验证。只有
INTERNET_FQDN_PORT
端点支持 SSL 服务器名称指示 (SNI) 扩展程序。在负载均衡器和外部端点之间的 SSL 握手期间,已配置的 FQDN 将在客户端 hello 中发送 SNI。使用INTERNET_IP_PORT
端点时,系统不会发送 SNI,因为 SNI 载荷的HostName
字段中不允许使用 IP 地址字面量。
健康检查
健康检查配置因负载均衡器的类型而异:
全球外部应用负载均衡器和传统应用负载均衡器。具有全球互联网 NEG 的后端服务不支持健康检查。
如果您的外部后端无法访问,或者配置的主机名 (FQDN) 无法解析,则负载均衡器会向其客户端返回 HTTP
502 (Bad Gateway)
响应。
区域级外部应用负载均衡器、区域级内部应用负载均衡器、区域级外部代理网络负载均衡器和区域级内部代理网络负载均衡器。健康检查是可选项。这些负载均衡器的健康检查探测源自代理专用子网,然后(使用 Cloud NAT)经 NAT 转换为预留的 IP 地址,或者自动分配的 NAT IP 地址。如需了解详情,请参阅区域级 NEG:使用 Cloud NAT 网关。
分布式 Envoy 健康检查是使用与集中式健康检查相同的 Google Cloud 控制台、gcloud CLI 和 API 进程创建的。 无需其他配置。
注意事项:
- 不支持 gRPC 健康检查。
- 不支持启用 PROXY 协议 v1 的健康检查。
由于 Envoy 数据平面会处理健康检查,因此您无法使用 Google Cloud 控制台、API 或 gcloud CLI 来检查这些外部端点的健康状态。对于使用基于 Envoy 的负载均衡器的混合 NEG,Google Cloud 控制台会将健康检查状态显示为
N/A
。这是正常现象。分配给 VPC 网络的该区域中代理专用子网的每个 Envoy 代理都会独立启动健康检查。因此,您可能会看到健康检查导致网络流量增加。网络流量增加取决于分配给您的区域中 VPC 网络的 Envoy 代理数量、这些代理接收的流量以及每个 Envoy 代理需要进行健康检查的端点数量。在最坏的情况下,网络流量因健康检查而以二次函数
(O(n^2))
增加。分布式 Envoy 健康检查的健康检查日志不包含详细的健康状态。如需详细了解记录的内容,请参阅健康检查日志记录。如需进一步排查从 Envoy 代理到 NEG 端点的连接问题,您还应检查相应的负载均衡器日志。
启用外部后端以接收请求
将外部后端配置为允许来自 Google Cloud 的流量。
此程序取决于 NEG 的范围:全球或区域级。
全球 NEG:将默认 Google 出站流量 IP 地址列入许可名单
如果您使用的是全球互联网 NEG,则必须将 Google 用于向外部后端发送请求的 IP 地址范围添加到许可名单中。如需查找要添加到许可名单的 IP 地址,请使用 dig
或 nslookup
等工具查询 _cloud-eoips.googleusercontent.com
DNS TXT 记录。
如需查看示例,请参阅允许外部后端接收来自 Google Cloud 的流量。
区域 NEG:使用 Cloud NAT 网关
如果您使用的是区域级互联网 NEG,则首先需要设置 Cloud NAT 网关,以分配一组作为 Google Cloud 流量来源的 IP 地址范围。
网关端点的类型应为 ENDPOINT_TYPE_MANAGED_PROXY_LB
。
Cloud NAT 网关可以配置为根据需求动态分配外部 IP 地址,或者使用一组手动预留的外部 IP 地址。
自动分配的 IP 地址
如果外部后端环境不要求您将可将流量发送到外部后端的特定 Google Cloud IP 地址添加到许可名单,请使用自动分配的 IP 地址。
手动分配的 IP 地址
仅当外部后端环境要求您将特定 Google Cloud IP 地址添加到许可名单时,才使用手动分配的 IP 地址。由于分配给您的代理子网的每个 Envoy 都会使用整个 IP 地址,因此请确保预留的 IP 地址池足够大,可以容纳所有 Envoy。
如果您遇到大规模连接问题,请检查您是否已达到 Cloud NAT 限制。默认情况下,每个网关最多只能有 50 个手动分配的 NAT IP 地址。
此 Cloud NAT 配置适用于整个代理专用子网。 与区域内所有基于 Envoy 的区域级负载均衡器关联的网络流量共享同一个 NAT 网关。
使用 Cloud NAT 时会同时产生用户流量和健康检查流量的费用。如需详细了解区域级互联网 NEG 价格的制定原理,请参阅区域级互联网 NEG 价格。
在代理专用子网上配置的 NAT 网关存在一些限制:
- 仅执行一对一 NAT 转换。不支持 IP 地址共享。
- 不支持日志记录和监控。也就是说,
--enable-logging
和--log-filter
标志不受支持。 - 不支持与端口相关的功能,例如静态和动态端口分配、设置每个虚拟机的端口数上限和下限以及端点独立映射。每个代理都会获取 65536 个端口。
对发送至外部后端的请求进行身份验证
本部分仅适用于应用负载均衡器。
如需对发送到外部后端的请求进行身份验证,您可以执行以下一项操作:
使用自定义请求标头设置自定义标头以指示请求来自 Google Cloud 负载均衡器。 例如,您可以将 16 个或更多的加密随机字节用作共享密钥。
自定义标头转换的实现取决于您使用的负载均衡器类型:
全球外部应用负载均衡器和传统应用负载均衡器。您可以在后端服务或网址映射上配置自定义标头转换。
例如,您可以将外部后端配置为期望 HTTP 请求的
Host
标头具有特定值,还可以配置负载均衡器以将Host
标头设置为该预期值。如果您未配置自定义请求标头,则负载均衡器会保留客户端用于连接到负载均衡器的标头,并在其响应中包含相同的标头。但请注意,网址映射不支持修改Host
标头。配置
Host
标头时,还有其他额外的限制。如需了解详情,请参阅在后端服务中创建自定义标头。如需获取具体示例,请参阅设置具有外部后端的全球外部应用负载均衡器。
区域级外部应用负载均衡器和区域级内部应用负载均衡器。自定义标头转换只能在网址映射上配置。
对于这些基于 Envoy 的负载均衡器,
Host
和authority
是 Google Cloud 预留的特殊关键字。您无法为这些负载均衡器修改这些标头。我们建议您创建其他自定义标头(例如MyHost
),以免干扰预留的标头名称。
启用 IAP,并验证请求标头中已签名的 JWT 是否由 Google 签名,以及
aud
(受众群体)声明是否包含在其中定义了负载均衡器的项目的编号。请注意以下几点:
- IAP 与 Cloud CDN 不兼容。
- 代理网络负载平衡器(内部和外部)不支持 IAP。
- 启用专用域身份验证,以便为外部应用负载均衡器提供对专用 Amazon Simple Storage Service (Amazon S3) 存储桶或其他兼容对象存储区的长期访问权限。 区域级外部应用负载均衡器和区域级内部应用负载均衡器不支持 Cloud CDN(因此,也不支持专用源站身份验证)。
日志
与记录针对其他后端发出的请求时一样,通过代理发送到外部后端的请求也会记录到 Cloud Logging。
详情请参阅以下内容:
如果您为使用外部后端的外部应用负载均衡器启用 Cloud CDN,则系统还会记录缓存命中数。使用外部后端进行标头处理
将请求代理到外部后端时,不同负载均衡器可能会以不同的方式进行标头处理。请查看以下信息,了解您的负载均衡器类型可能会如何处理 HTTP 标头。
全球外部应用负载均衡器和传统应用负载均衡器
当全球外部应用负载均衡器或传统应用负载均衡器将请求代理到外部后端时,它会通过以下方式调整 HTTP 标头:
某些标头会合并。如果同一标头键(例如
Via
)具有多个实例,则负载均衡器会将它们的值组合成单个标头键的单一英文逗号分隔列表。只有其值可以用英文逗号分隔列表来表示的标头会合并。Set-Cookie
之类的其他标头永远不会合并。如果后端服务的协议为
HTTP
或HTTPS
,则标头会采用正确的大小写形式:标头键的第一个字母以及连字符 (
-
) 后面的所有字母均为大写,以保持与 HTTP/1.1 客户端兼容。例如,user-agent
会更改为User-Agent
,而content-encoding
会更改为Content-Encoding
。Accept-CH
(客户端提示)等某些标头会被转换以与标准混合字母表示法匹配。
系统会添加一些标头,或者为一些标头附加值。外部应用负载均衡器始终会添加或修改某些标头,例如
Via
和X-Forwarded-For
。
区域级外部应用负载均衡器和区域级内部应用负载均衡器
使用互联网 NEG 的基于 Envoy 的负载均衡器没有特殊的标头处理。如需了解 Envoy 通常如何处理标头,请参阅 HTTP 标头处理。
限制
- 请查看后端服务部分,了解将互联网 NEG 配置为后端的相关限制。
- 当您修改负载均衡器以将后端从互联网 NEG 更改为任何其他后端类型,或将后端从任何其他后端类型更改为互联网 NEG 时,您的应用会遇到大约 30-90 秒的临时停机时间。
例如,在此停机时间期间,向全球外部应用负载均衡器发送请求的客户端会看到
502
错误,错误代码为failed_to_connect_to_backend
。这是预期行为。
- 全球互联网 NEG 后端不支持以下高级流量管理功能:
- 请求镜像
- 重试政策
- 流量政策(包括负载均衡位置政策、会话亲和性及离群值检测)
- 请查看 Cloud NAT 网关部分,了解与代理专用子网上配置的 NAT 网关相关的限制。
配额和限制
如需了解配额和限制,请参阅 NEG 后端配额表和每个 NEG 的端点数配额表。
价格
外部互联网 NEG 端点的出站流量按高级层级网络的互联网出站流量费率计费。来源取决于客户端位置,而目标取决于您的公共端点的位置。
如果您配置了 Cloud NAT 网关以映射基于 Envoy 的区域级负载均衡器的代理专用子网,则会产生 Cloud NAT 费用。 为负载均衡器分配的 Cloud NAT 网关与包含 32 个以上虚拟机实例的网络的每小时费用等价。如需了解详情,请参阅 Cloud NAT 价格。
如需了解详情,请参阅 Cloud Load Balancing 价格。
后续步骤
- 设置具有互联网 NEG 的全球外部应用负载均衡器
- 设置具有互联网 NEG 的经典版应用负载均衡器
- 为具有外部后端的外部应用负载平衡器设置 Cloud CDN
- 具有互联网网络端点组的 Cloud Service Mesh 概览