网络端点组 (NEG) 为负载均衡器指定了一组后端端点。无服务器 NEG 是指向 Cloud Run、App Engine、Cloud Functions 或 API Gateway 服务的后端。
无服务器 NEG 可以表示以下各项之一:
- 一项 Cloud Run 服务或一组服务。
- 一个 Cloud Functions 函数或一组函数。
- 一个 App Engine 应用(标准或 Flex 应用)、应用内的一项特定服务、应用的某一特定版本或一组服务。
- 一种 API Gateway,用于通过所有服务一致的 REST API 访问您的服务,而不考虑服务实现。此功能目前为预览版。
支持的负载均衡器
下表列出了每个应用负载均衡器支持的无服务器产品。代理网络负载均衡器和直通式网络负载均衡器不支持无服务器 NEG。
无服务器平台 | 应用负载均衡器 | ||||
---|---|---|---|---|---|
区域 内部 |
跨区域 内部 |
全球 外部 |
传统版 | 区域 外部 |
|
Cloud Run | |||||
App Engine | |||||
Cloud Functions |
使用场景
为无服务器应用启用负载均衡器后,您可以执行以下操作:
- 配置无服务器应用,使其通过未与其他服务共享的专用 IPv4 IP 地址提供服务。
- 将单个网址映射到同一网域处提供的多个无服务器函数或服务。在本文档中,请参阅网址掩码。
- 与其他 Google Cloud 计算平台共享网址空间。通过使用多个后端服务,单个负载均衡器可以将流量发送到多个后端类型。负载均衡器会根据请求网址的主机或路径选择正确的后端服务。
- 重复使用您用于 Compute Engine、Google Kubernetes Engine 和 Cloud Storage 的相同 SSL 证书和私钥。重复使用相同证书就不需要为无服务器应用管理单独的证书。
全球外部应用负载均衡器和传统应用负载均衡器
设置全球外部应用负载均衡器或传统应用负载均衡器可让您的无服务器应用与现有云服务集成。您可以执行以下操作:
- 使用 Google Cloud Armor 保护您的服务。Google Cloud Armor 是一种边缘 DDoS 攻击防御和 WAF 安全产品,适用于通过外部应用负载均衡器访问的所有服务。此功能存在一些限制,尤其是对于 Cloud Run 和 App Engine。
- 可让您的服务使用 Cloud CDN 优化交付。Cloud CDN 在更靠近您的用户的位置缓存内容。Cloud CDN 提供缓存失效操作和 Cloud CDN 签名网址等功能。
- 使用 Google Edge 基础架构终结更靠近用户的 HTTP(S) 连接,从而缩短延迟时间。
如需了解如何配置具有无服务器计算后端的负载均衡器,请参阅以下文档:
- 使用 Cloud Run、App Engine 或 Cloud Functions 设置全球外部应用负载均衡器
- 使用 Cloud Run、App Engine 或 Cloud Functions 设置传统应用负载均衡器
通过将外部应用负载均衡器与 API Gateway 集成,无服务器后端可利用 Cloud Load Balancing 提供的所有功能。如需了解详情,请参阅适用于 API Gateway 的外部应用负载均衡器。如需配置外部应用负载均衡器以将流量路由到 API Gateway,请参阅适用于 API Gateway 的外部应用负载均衡器使用入门。此功能目前为预览版。
区域级外部应用负载均衡器
使用区域级外部应用负载均衡器,您可以在 Cloud Run 后端运行具有监管或合规性要求的工作负载。例如,如果您需要应用的网络配置和流量终结位于特定区域,则区域级外部应用负载均衡器通常是遵守必要管辖区控制的首选方案。
如需了解如何使用无服务器计算后端配置区域级外部应用负载均衡器,请参阅使用 Cloud Run 设置区域级外部应用负载均衡器。
区域内部应用负载均衡器和跨区域内部应用负载均衡器
如果内部应用负载均衡器配置了 Cloud Run 后端,您可以执行以下操作:
- 为您的 Cloud Run 服务启用高级流量管理功能,例如故障注入、标头重写、重定向、流量拆分等。
- 将旧版服务从 Compute Engine、GKE 或本地无缝迁移到 Cloud Run,并利用基于权重的流量拆分将流量逐步转移到 Cloud Run,而无需停机。
- 使用 VPC Service Controls 保护您的 Cloud Run 服务。
- 为在 Cloud Run、Compute Engine 和 GKE 中运行的服务建立单一政策强制执行内部入口点。
如需了解如何使用无服务器计算后端配置区域级内部应用负载均衡器,请参阅使用 Cloud Run 设置区域级内部应用负载均衡器。
本页面的其余部分介绍了如何将无服务器 NEG 与应用负载均衡器搭配使用。如需详细了解其他类型的 NEG,请参阅网络端点组概览。
端点类型
无服务器 NEG 没有任何网络端点,例如端口或 IP 地址。它们只能指向位于 NEG 所在区域的现有 Cloud Run、App Engine、API Gateway 或 Cloud Functions 服务。
当您创建无服务器 NEG 时,请指定 Cloud Run、App Engine、API Gateway 或 Cloud Functions 服务的完全限定域名 (FQDN)。端点类型为 SERVERLESS
。无服务器 NEG 不支持其他端点类型。
无服务器 NEG 不能具有多个端点。此端点指向一个无服务器应用或网址掩码。负载均衡器用作无服务器计算应用的前端,并将流量代理到指定的端点。但是,如果后端服务在不同区域包含多个无服务器 NEG,则负载均衡器会将流量发送到最近区域的 NEG,以最大限度地减少请求延迟时间。
网络层级
对于全球外部应用负载均衡器,您可以在使用标准或高级网络服务层级的负载均衡器中使用无服务器 NEG。仅当您想要在多个区域中设置无服务器 NEG 时,才需要使用优质层级。
区域级外部应用负载均衡器始终是标准层级。
跨区域内部应用负载均衡器和区域级内部应用负载均衡器始终使用高级层级。
负载均衡组件
使用无服务器 NEG 后端的负载均衡器需要仅适用于后端服务的特殊配置。前端配置与任何其他基于代理的 Google Cloud 负载均衡器相同。此外,内部应用负载均衡器需要代理专用子网来代表您运行 Envoy 代理。
下图展示了一个无服务器 NEG 部署示例。
全球外部
下图展示了无服务器 NEG 在全球外部应用负载均衡器架构中的位置。
区域外部
下图展示了无服务器 NEG 在区域级外部应用负载均衡器架构中的位置。
区域内部
下图展示了无服务器 NEG 在区域级内部应用负载均衡器模型中的位置。
跨区域
下图展示了无服务器 NEG 在跨区域内部应用负载均衡器模型中的位置。
前端组件
使用无服务器 NEG 后端实现负载均衡无需特殊的前端配置。转发规则用于根据 IP 地址、端口和协议将流量路由到目标代理。然后,目标代理会终止来自客户端的连接。
应用负载均衡器使用网址映射来设置基于网址将请求路由到相应的后端服务。
如需详细了解这些组件中的每个组件,请参阅特定负载均衡器概览的架构部分:
后端服务
后端服务向负载均衡器提供配置信息。负载均衡器使用后端服务中的信息将传入的流量定向到一个或多个挂接的后端。无服务器 NEG 可用作某些负载均衡器的后端。
根据负载均衡器的类型,存在以下限制:
- 全球外部应用负载均衡器使用的全球后端服务可以附加多个无服务器 NEG,但每个区域只附加一个无服务器 NEG。
- 内部应用负载均衡器和区域级外部应用负载均衡器使用的区域级后端服务只能附加一个无服务器 NEG。
- 跨区域内部应用负载均衡器使用的全局后端服务只能附加 Cloud Run 服务。
每个无服务器 NEG 可以指向以下任一项:
- 单个函数或服务的 FQDN
- 指向在同一网域中提供的多个函数或服务的网址掩码
网址掩码是一个网址架构模板,用于告知无服务器 NEG 后端如何将用户请求映射到正确的服务。如果您对无服务器应用使用自定义网域,并且在同一网域中提供多个服务,则网址掩码非常有用。您可以为自定义网域创建具有通用网址掩码的 NEG,而不是为每个函数或服务创建单独的无服务器 NEG。如需详细了解相关信息并查看示例,请参阅网址掩码。
如需了解将无服务器 NEG 添加为后端的其他限制,请参阅限制。
无服务器 NEG 的离群值检测
离群值检测是一项可选配置,可在关联了无服务器 NEG 的全球后端服务上启用。异常主机检测分析仅适用于跨区域内部应用负载均衡器、全局外部应用负载均衡器,而不适用于传统应用负载均衡器。离群值检测分析根据 HTTP 响应模式识别健康状况不佳的无服务器 NEG,并通过将大多数新请求从健康状况不佳的服务路由到健康状况良好的服务来降低错误率。如需了解离群值检测算法的工作原理并了解其限制,请参阅以下示例。
假设有一项后端服务附加了两个无服务器 NEG(一个位于 REGION_A
区域,另一个位于 REGION_B
区域)。如果用作 REGION_A
区域中全球外部应用负载均衡器的后端的无服务器 NEG 没有响应,则离群值检测会将无服务器 NEG 识别为运行状况不佳。然后,系统会根据离群值检测分析,将一些新请求发送到 REGION_B
区域中的无服务器 NEG。
根据遇到的服务器错误类型,您可以使用以下离群值检测方法之一启用离群值检测:
- 连续 5xx 错误。
5xx
系列 HTTP 状态代码属于错误。 - 连续网关错误。 只有
502
、503
和504
HTTP 状态代码被视为错误。
请注意,即使在启用离群值检测后,您也可能会看到一些请求发送到运行状况不佳的服务,从而向客户端返回 5XX 错误。这是因为离群值检测算法的结果(从负载均衡池中移除端点并将其返回给池)由负载均衡器的每个代理实例独立执行。在大多数情况下,多个代理实例会处理后端服务接收的流量。因此,有可能只有部分代理检测到并移除健康状况不佳的端点,并且在发生这种情况时,其他代理可能会继续向同一健康状况不佳的端点发送请求。
为了进一步降低错误率,您可以配置更积极的离群值检测参数。我们建议为移除阈值 (outlierDetection.baseEjectionTime
) 配置较高的值。例如,我们的测试表明,如果将 outlierDetection.baseEjectionTime
设置为 180 秒,且持续 QPS 高于 100,则观察到的错误率低于 5%。如需详细了解离群值检测 API,请参阅全球后端服务 API 文档中的 outlierDetection
。
如果后端服务附加了无服务器 NEG,则不支持以下 outlierDetection
字段:
outlierDetection.enforcingSuccessRate
outlierDetection.successRateMinimumHosts
outlierDetection.successRateRequestVolume
outlierDetection.successRateStdevFactor
如需了解如何配置离群值检测,请参阅“使用无服务器后端设置全球外部应用负载均衡器:启用离群值检测”。
网址掩码
无服务器 NEG 后端可以指向单个 Cloud Run(App Engine 或 Cloud Functions,如果适用),或者指向网址掩码(指向多个服务)。网址掩码是网址架构的模板。无服务器 NEG 使用此模板将请求映射到相应的服务。
网址掩码是一项可选功能,可让您在无服务器应用由多个 Cloud Run、Cloud Functions 或 App Engine 服务组成时,更轻松地配置无服务器 NEG。与内部应用负载均衡器搭配使用的无服务器 NEG 只能使用指向 Cloud Run 服务的网址掩码。
如果您的无服务器应用映射到自定义网域而不是 Google Cloud 提供的默认地址,则网址掩码非常有用。使用 example.com
等自定义网域时,您可以将多个服务部署到同一网域上的不同子网域或路径。在此类情况下,您可以为自定义网域(例如 example.com/<service>
)创建单个使用通用网址掩码的无服务器 NEG,而不是为每个服务创建单独的无服务器 NEG 后端。NEG 从请求的网址中提取服务名称。
以下示意图展示了一个具有单个后端服务和无服务器 NEG 的外部应用负载均衡器,它使用网址掩码将用户请求映射到不同服务。
当应用的服务使用可预测的网址架构时,网址掩码最适合。使用网址掩码而不是网址映射的优势在于,您无需为 login
和 search
服务创建单独的无服务器 NEG。您也无需在每次向应用添加新服务时都修改负载均衡器配置。
限制
- 无服务器 NEG 不能有任何网络端点,如 IP 地址或端口。
- 无服务器 NEG 只能指向创建 NEG 所在区域中的无服务器应用。
- 对于使用无服务器 NEG 后端的负载均衡器,必须在 NEG 指向的支持性 Cloud Run、App Engine、API Gateway 或 Cloud Functions 服务所在的项目中创建无服务器 NEG。如果您连接的服务与无服务器 NEG 不在同一个项目中,则您可能会看到请求失败。
- 使用无服务器 NEG 配置的负载均衡器无法检测底层无服务器应用或服务是否按预期工作。这意味着,即使您的服务返回错误,负载均衡器也会继续将流量定向到它。将用户流量路由到服务的新版本之前,请务必对新版本进行全面测试。
后端服务限制
以下限制适用于具有无服务器 NEG 后端的后端服务:
- 全球外部应用负载均衡器使用的全球后端服务在每个区域只能有一个无服务器 NEG。如需在单个后端服务中组合多个无服务器 NEG,则所有 NEG 必须表示不同区域中具有等效功能的部署。例如,NEG 可以指向部署在不同区域中的同一 Cloud Run、App Engine 或 Cloud Functions 服务。
- 跨区域内部应用负载均衡器使用的全局后端服务只能附加一项 Cloud Run 服务。
- 区域级后端服务只能附加一个无服务器 NEG。
- 包含无服务器 NEG 的配置支持共享 VPC 部署中的跨项目服务引用。如需使用此功能,请在与负载均衡器后端组件(后端服务和无服务器 NEG)不同的项目中创建负载均衡器的前端组件(IP 地址、转发规则、目标代理和网址映射)。请注意,后端服务、关联的无服务器 NEG 和支持性无服务器服务(Cloud Run、App Engine、API Gateway 或 Cloud Functions)必须始终在同一项目中创建。
- 后端服务超时设置不适用于具有无服务器 NEG 后端的后端服务。尝试修改后端服务的
resource.timeoutSec
属性会导致以下错误:Timeout sec is not supported for a backend service with Serverless network endpoint groups
。
对于使用无服务器 NEG 后端的后端服务,默认超时时间为 60 分钟。此超时不可配置。如果您的应用需要长时间运行的连接,请将客户端配置为在失败时重试请求。 - 组合到后端服务中的所有无服务器 NEG 也必须使用相同类型的后端。这意味着 Cloud Run 无服务器 NEG 只能与其他 Cloud Run 无服务器 NEG 组合,App Engine 无服务器 NEG 只能与 App Engine 无服务器 NEG 组合。
- 您不能在同一后端服务中同时使用无服务器 NEG 与其他类型的 NEG。例如,您无法从同一后端服务路由到 GKE 集群和 Cloud Run 服务。
- 设置路由到无服务器 NEG 的后端服务时,某些字段会受到限制:
- 您不能指定平衡模式。也就是说,
RATE
、UTILIZATION
和CONNECTION
值对负载平衡器的流量分配没有影响。 - 无服务器后端不支持健康检查。因此,无法为包含无服务器 NEG 后端的后端服务配置健康检查。不过,您可以视需要启用离群值检测,以识别运行状况不佳的无服务器服务,并将新请求路由到运行状况良好的无服务器服务。
- 您不能指定平衡模式。也就是说,
- 您无法使用
gcloud compute backend-services edit
命令修改具有无服务器 NEG 后端的后端服务。如需解决此问题,请改用gcloud compute backend-services update
命令。
其他限制适用,具体取决于负载均衡器的类型和无服务器后端。
区域级内部应用负载均衡器和区域级外部应用负载均衡器的限制
- 与区域级内部应用负载均衡器或区域级外部应用负载均衡器搭配使用的无服务器 NEG 只能指向 Cloud Run 服务。
- 对于发送到配置了区域级外部应用负载均衡器或区域级内部应用负载均衡器的任何无服务器 NEG 的流量,每个使用无服务器 NEG 的项目的每秒查询次数 (QPS) 限制为 5,000 QPS。此限制是项目中的所有区域级外部应用负载均衡器和区域级内部应用负载均衡器的汇总限制,而不是针对单个负载均衡器的限制。
跨区域内部应用负载均衡器的限制
- 与跨区域内部应用负载均衡器配合使用的无服务器 NEG 只能指向 Cloud Run 服务。
全球外部应用负载均衡器的限制
本部分列出了使用全球外部应用负载均衡器配置无服务器 NEG 时将遇到的限制。
App Engine 的限制
- 具有 App Engine 柔性环境后端的全球外部应用负载均衡器不支持使用跨项目服务引用。支持 App Engine 标准环境。
Cloud Run 的限制
- 具有无服务器 NEG 的外部应用负载均衡器不支持 Cloud Run for Anthos。
- 外部应用负载均衡器不支持向 Cloud Run 服务发出经过身份验证的请求。
Cloud Functions 的限制
- IAP 不支持 Cloud Functions。
App Engine 的限制
- App Engine 不支持多地区负载平衡。这是因为 App Engine 要求每个项目 1 个地区。
- 请求路径上只允许一个 IAP 政策。例如,如果您已在后端服务中设置了 IAP 政策,则不应针对 App Engine 应用设置其他 IAP 政策。
- 我们建议您使用入站流量控制,以使应用仅接收从负载均衡器和 VPC(如果使用 VPC)发送的请求。否则,用户可以使用应用的 App Engine 网址来绕过负载平衡器、Google Cloud Armor 安全政策、SSL 证书和通过负载平衡器传递的私钥。
API Gateway 的限制
如需了解详情,请参阅无服务器 NEG 和 API Gateway 的限制。
价格
如需查看使用无服务器 NEG 的负载均衡器的价格信息,请参阅所有网络价格:Cloud Load Balancing。
后续步骤
- 使用 Cloud Run、App Engine 或 Cloud Functions 设置全球外部应用负载均衡器
- 使用 Cloud Run、App Engine 或 Cloud Functions 设置传统应用负载均衡器
- 使用 Cloud Run 后端设置区域级外部应用负载均衡器
- 使用 Cloud Run 后端设置区域内部应用负载均衡器
- 使用 Cloud Run 设置跨区域内部应用负载均衡器