无服务器网络端点组概览

网络端点组 (NEG) 为负载平衡器指定了一组后端端点。无服务器 NEG 是指向 Cloud RunApp EngineCloud Functions 服务的后端。

无服务器 NEG 可以表示以下内容:

  • 一项 Cloud Run 服务或一组共用相同网址格式的服务。
  • 一个 Cloud Functions 函数或一组共用相同网址格式的函数。
  • 一个 App Engine 应用(标准或 Flex 应用)、应用内的一个特定服务,甚至是应用的某一特定版本。

为无服务器应用启用 HTTP(S) 负载平衡后,您可以执行以下操作:

  • 配置无服务器应用,使其通过未与其他服务共享的专用 IPv4 和/或 IPv6 IP 地址提供服务。
  • 将单个网址映射到在不同地区中运行的多个服务,从而将请求路由到离用户最近的地区。只有 Cloud Run(全代管式)支持此功能。
  • 重复使用您用于 Compute Engine、Google Kubernetes Engine 和 Cloud Storage 的相同 SSL 证书和私钥。这样就不需要为无服务器应用管理单独的证书。

设置 HTTP(S) 负载平衡还可让您的无服务器应用与现有 Cloud 服务集成。您可以执行以下操作:

  • 与其他 Google Cloud 技术共享网址空间。通过使用多个后端服务,单个外部 HTTP(S) 负载平衡器可以根据请求网址的主机或路径将流量发送到 Cloud Run(全代管式)、App Engine、Cloud Functions、Compute Engine、Google Kubernetes Engine 和 Cloud Storage。
  • 使用 Google Cloud Armor 保护您的服务;Google Cloud Armor 是一种边缘 DDoS 防御/WAF 安全产品,适用于通过外部 HTTP(S) 负载平衡器访问的服务。请注意,此功能存在一些限制,尤其是 Cloud Run(全代管式)和 App Engine。
  • 可让您的服务使用 Cloud CDN 优化交付。借助 Cloud CDN,您可以在靠近用户的位置缓存内容。Cloud CDN 提供缓存失效操作和 Cloud CDN 签名网址等功能。
  • 使用 Google Edge 基础架构终结更靠近用户的 HTTP(S) 连接,从而缩短延迟时间。

本文档的其余部分讨论如何将无服务器 NEG 与 HTTP(S) 负载平衡搭配使用。您不能将无服务器 NEG 与其他负载平衡器类型搭配使用。

如需详细了解其他类型的 NEG,请参阅:

端点类型

无服务器 NEG 没有任何网络端点,例如端口或 IP 地址。它们只能指向位于 NEG 所在地区的现有 Cloud Run(全代管式)App EngineCloud Functions 服务。

当您创建无服务器 NEG 时,请指定 Cloud Run(全代管式)App EngineCloud Functions 服务的完全限定域名 (FQDN)。端点类型为 SERVERLESS。无服务器 NEG 不支持其他端点类型。

无服务器 NEG 不能具有多个端点。由于每个无服务器 NEG 中只允许一个端点,因此负载平衡器仅充当前端,并将流量代理到指定的无服务器端点。但是,如果后端服务包含多个无服务器 NEG,则负载平衡器会平衡这些 NEG 之间的流量,从而最大限度地缩短请求延迟时间。

网络层级

您可以通过标准或优质网络服务层级在负载平衡器中使用无服务器 NEG。仅当您想要在多个地区中设置无服务器 NEG 时,才需要使用优质层级。

负载平衡组件

这是无服务器 NEG 在 HTTP(S) 负载平衡模型中的位置。

简单的 HTTPS 负载平衡(点击放大)
用于无服务器应用的 HTTP(S) 负载平衡

转发规则

转发规则是前端配置的一部分,包含外部 IP 地址、IP 版本(IPv4 或 IPv6)、协议(HTTP 或 HTTPS,包括 HTTP/2)以及端口号(80 或 443)。

目标代理

无服务器 NEG 只能与 HTTP 和 HTTPS 目标代理搭配使用。使用无服务器 NEG 的服务不能与 TCP 或 SSL 目标代理搭配使用。

网址映射

外部 HTTP (S) 负载平衡器的转发选择基于网址映射。使用网址映射时,目标 HTTP(S) 代理通过检查网址映射中的请求主机名和路径来确定要使用的后端服务。负载平衡器可以有多个从网址映射引用的后端服务。每个后端服务都可以与不同的后端类型相关联。例如,您可以为无服务器 NEG 提供后端服务,并为 Compute Engine 实例组提供另一个后端服务。

后端服务

无服务器 NEG 可用作负载平衡器中后端服务的后端。后端服务可以由多个无服务器 NEG 提供支持,但每个无服务器 NEG 只能指向单个 Cloud Run(全代管式)、App Engine 或 Cloud Functions 服务的 FQDN,或者指向网址掩码(指向同一网域处提供的多个服务)。

网址掩码是一个网址架构模板,用于告知无服务器 NEG 后端如何将用户请求映射到正确的服务。如果您对应用使用自定义网域,并且在同一网域中提供多个 Cloud Run(全代管式)、Cloud Functions 或 App Engine 服务,则网址掩码非常有用。在此类情况下,您可以为自定义网域(例如 example.com/<service>)创建使用通用网址掩码的 NEG 并允许 NEG 从请求的网址中提取服务名称,而不是为每个 Cloud Run(全代管式)、App Engine 或 Cloud Functions 服务创建单独的无服务器 NEG。如需详细了解相关信息并查看示例,请参阅网址掩码

将无服务器 NEG 添加为后端时,需要注意一些额外的限制。如需了解详情,请参阅限制

网址掩码

网址掩码是一项可选功能,可让您在应用由多个 Cloud Run(全代管式)、Cloud Functions 或 App Engine 服务组成时,更轻松地配置无服务器 NEG。无服务器 NEG 后端可以指向单个 Cloud Run(全代管式)、App Engine 或 Cloud Functions 服务,或者指向网址掩码(指向多个服务)。

网址掩码是网址架构的模板。无服务器 NEG 将使用此模板(例如 example.com/<service>)从传入请求的网址中提取服务名称,并将请求映射到相应服务。

如果您的无服务器应用映射到自定义网域而不是 Google Cloud 提供的默认地址,则网址掩码非常有用。使用 example.com 等自定义网域时,您可以将多个 Cloud Run(全代管式)、Cloud Functions 或 App Engine 服务部署到同一网域上的不同子网域或路径。在此类情况下,您可以为自定义网域(例如 example.com/<service>)创建单个使用通用网址掩码的无服务器 NEG 并允许 NEG 从请求的网址中提取服务名称,而不是为每个 Cloud Run(全代管式)、App Engine 或 Cloud Functions 服务创建单独的无服务器 NEG 后端。

以下示例展示了一个具有单个后端服务和无服务器 NEG 的外部 HTTP(S) 负载平衡器,它使用网址掩码将用户请求映射到不同服务。

将流量分配到无服务器应用(点击放大)
使用网址掩码将流量分配给不同的服务

当应用的服务使用可预测的网址架构时,网址掩码最适合。使用网址掩码而不是网址映射的优势在于,您无需为 loginsearch 服务创建单独的无服务器 NEG。此外,您还无需在每次向应用添加新服务时都修改负载平衡器配置。

如需了解如何为无服务器 NEG 构造和配置网址掩码,请参阅设置无服务器 NEG

限制

  • 您无法使用 Google Cloud Console 创建无服务器 NEG。请使用 gcloud 命令行工具或 API。如需了解该工具的概念和安装信息,请参阅 gcloud 概览
  • 无服务器 NEG 不能有任何网络端点,如 IP 地址或端口。
  • 无服务器 NEG 只能指向创建 NEG 所在地区中的 Cloud Run(全代管式)、App Engine 或 Cloud Functions 服务。
  • 使用无服务器 NEG 后端的负载平衡器必须在由 NEG 指向的 Cloud Run(全代管式)、App Engine 或 Cloud Functions 服务所在的项目中创建。
  • 无服务器 NEG 后端不支持 Cloud Monitoring。使用其他后端类型的后端服务不受影响。
  • 使用无服务器 NEG 配置的外部 HTTP(S) 负载平衡器无法检测底层无服务器资源(如 App Engine,Cloud Functions 或 Cloud Run(全代管式)服务)是否按预期运行。这意味着如果一个地区中的服务返回错误,但该地区中的整体 Cloud Run(全代管式)、Cloud Functions 或 App Engine 基础架构正常运行,则外部 HTTP(S) 负载平衡器不会自动将流量定向到其他地区。将用户流量路由到服务的新版本之前,请务必对新版本进行全面测试。

与具有无服务器 NEG 后端的后端服务相关联的限制:

  • 一个后端服务只能在每个地区包含一个无服务器 NEG。如果您想要在单个后端服务中组合多个无服务器 NEG,则所有 NEG 必须表示不同地区中具有等效功能的部署。例如,NEG 可以指向部署在不同地区中的同一 Cloud Run(全代管式)、App Engine 或 Cloud Functions 服务。
  • 您无法修改无服务器 NEG 后端服务默认 30 秒的后端服务超时。尝试修改后端服务配置以增加超时时间(通过设置 resource.timeoutSec 属性)会导致以下错误:Timeout sec is not supported for a backend service with Serverless network endpoint groups
  • 组合到后端服务中的所有无服务器 NEG 也必须使用相同类型的后端。这意味着 Cloud Run(全代管式)无服务器 NEG 只能与其他 Cloud Run(全代管式)无服务器 NEG、App Engine 无服务器 NEG 以及 App Engine 无服务器 NEG 等组合。
  • 您不能在同一后端服务中同时使用无服务器 NEG 与其他类型的 NEG(区域或互联网 NEG)。例如,这意味着您无法从同一后端服务路由到 GKE 集群和 Cloud Run(全代管式)服务。
  • 设置路由到无服务器 NEG 的后端服务时,某些字段会受到限制:
    • 您不能指定平衡模式。也就是说,RATEUTILIZATIONCONNECTION 值对负载平衡器的流量分配没有影响。
    • 无服务器后端不支持运行状况检查。因此,无法为包含无服务器 NEG 后端的后端服务配置运行状况检查。
  • 从后端服务中移除所有无服务器 NEG 不会自动导致针对用户返回 502 Bad Gateway 响应。即使所有无服务器 NEG 后端都已从后端服务中移除,用户仍会看到对其请求的 HTTP 200 OK 响应。要更改此行为,您必须停止将流量发送到后端服务

其他限制可能适用,取决于您使用的无服务器计算平台。

Cloud Run(全代管式)的限制

  • Identity-Aware Proxy (IAP) 不适用于 Cloud Run(全代管式)。
  • 您无法停用 Google Cloud 自动分配给 Cloud Run(全代管式)服务的网址。已拥有 Cloud Run(全代管式)服务默认网址的用户可以绕过负载平衡器并直接转到服务网址。这意味着,即使您可以通过负载平衡器配置 Google Cloud Armor 安全政策,使用默认网址的用户也可以规避这些政策。
  • 在 Cloud Run(全代管式)上使用 gRPC 服务器端流式传输 API 时,花费的时间超过 30 秒的请求会生成 RST_STREAM 消息。

Cloud Functions 的限制

  • IAP 不支持 Cloud Functions。
  • 您无法停用 Google Cloud 自动分配给 Cloud Functions 函数的网址。但是,您可以使用 internal-and-gclb Ingress 设置,以只允许内部流量和发送至由外部 HTTP(S) 负载平衡器所公开的公共 IP 的流量。发送至 cloudfunctions.net 或通过 Cloud Functions 设置的任何其他自定义网域的流量会被屏蔽。这将防止用户规避通过外部 HTTP(S) 负载平衡器设置的任何访问权限控制(例如 Google Cloud Armor 安全政策)。

App Engine 的限制

  • App Engine 不支持多地区负载平衡。这是因为 App Engine 要求每个项目 1 个地区。
  • 请求路径上只允许一个 IAP 政策。例如,如果您已在后端服务中设置了 IAP 政策,则不应针对 App Engine 应用设置其他 IAP 政策。

  • 您无法停用 Google Cloud 自动分配给 App Engine 服务的网址。已拥有 App Engine 服务默认网址的用户可以绕过负载平衡器并直接转到服务网址。这意味着,即使您可以通过负载平衡器配置 Google Cloud Armor 安全政策、SSL 证书和私钥,使用默认网址的用户也可以规避这些政策。

价格

如需查看使用无服务器 NEG 的外部 HTTP(S) 负载平衡器的价格信息,请参阅网络价格

后续步骤