本页面介绍如何创建外部应用负载均衡器,以将请求路由到无服务器后端。在此处,“无服务器”这一术语指的是以下无服务器计算产品:
- App Engine
- Cloud Run functions
- Cloud Run
外部应用负载均衡器与 API Gateway 的集成使无服务器后端能够利用 Cloud Load Balancing 提供的所有功能。如需配置外部应用负载均衡器以将流量路由到 API Gateway,请参阅适用于 API Gateway 的外部应用负载均衡器使用入门。外部应用负载均衡器对 API Gateway 的支持目前处于预览版阶段。
借助无服务器 NEG,您可以将 Google Cloud 无服务器应用与外部应用负载均衡器搭配使用。使用无服务器 NEG 后端配置负载均衡器后,对负载均衡器发出的请求会被路由到无服务器应用后端。
如需详细了解无服务器 NEG,请参阅无服务器 NEG 概览。
如果您是传统版应用负载均衡器的现有用户,在规划使用全球外部应用负载均衡器的新部署时,请确保查看规划向全球外部应用负载均衡器的迁移。准备工作
- 部署 App Engine、Cloud Run functions 或 Cloud Run 服务。
- 如果您尚未安装 Google Cloud CLI,请执行此操作。
- 配置权限。
- 添加 SSL 证书资源。
部署 App Engine、Cloud Run functions 或 Cloud Run 服务
本页面中的说明假定您已运行 Cloud Run、Cloud Run functions 或 App Engine 服务。
对于本页面中的示例,我们已使用 Cloud Run Python 快速入门在 us-central1
区域中部署 Cloud Run 服务。本页面的其余部分介绍了如何设置外部应用负载均衡器,以使其使用无服务器 NEG 后端将请求路由到此服务。
如果您尚未部署无服务器应用,或者如果您想试用示例无服务器 NEG 应用,请按照以下快速入门之一进行操作。您可以在任何地区中创建无服务器应用,但稍后必须使用相同地区创建无服务器 NEG 和负载均衡器。
Cloud Run
如需创建简单的 Hello World 应用,将其打包到一个容器映像中,然后将该容器映像部署到 Cloud Run,请参阅快速入门:构建和部署。
如果您已将示例容器上传到 Container Registry,请参阅快速入门:部署预建的示例容器。
Cloud Run functions
请参阅 Cloud Run functions:Python 快速入门。
App Engine
请参阅以下 App Engine Python 3 快速入门指南:
安装 Google Cloud CLI
安装 Google Cloud CLI。如需了解该工具的概念信息和安装信息,请参阅 gcloud 概览。
如果您之前未运行过 gcloud CLI,请先运行 gcloud init
,以初始化您的 gcloud 目录。
配置权限
如需按照本指南中的说明进行操作,您需要创建无服务器 NEG 并在项目中创建外部 HTTP(S) 负载均衡器。您应该是项目的 Owner 或 Editor,或者应具有下列 Compute Engine IAM 角色:
任务 | 所需角色 |
---|---|
创建负载均衡器和网络组件 | Network Admin |
创建和修改 NEG | Compute Instance Admin |
创建和修改 SSL 证书 | Security Admin |
保留外部 IP 地址
现在您的服务已启动并正在运行,接下来请设置一个全球静态外部 IP 地址,以供客户用来访问您的负载均衡器。
控制台
在 Google Cloud 控制台中,转到外部 IP 地址页面。
点击预留外部静态 IP 地址。
对于名称,输入
example-ip
。在网络服务层级部分,选择高级。
对于 IP 版本,请选择 IPv4。
对于类型,请选择全球。
点击预留。
gcloud
gcloud compute addresses create example-ip \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global
请记下预留的 IPv4 地址:
gcloud compute addresses describe example-ip \ --format="get(address)" \ --global
创建 SSL 证书资源
如需创建 HTTPS 负载均衡器,您必须向该负载均衡器的前端添加 SSL 证书资源。使用 Google 管理的 SSL 证书或自行管理的 SSL 证书创建 SSL 证书资源。
Google 管理的证书。建议使用 Google 管理的证书,因为 Google Cloud 会自动获取、管理和续订这些证书。如需创建 Google 管理的证书,您必须拥有该网域的网域和 DNS 记录,才能预配证书。此外,您还需要更新网域的 DNS A 记录,以指向上一步 (
example-ip
) 中创建的负载均衡器的 IP 地址。有关详细说明,请参阅使用 Google 管理的证书。自签发证书。如果您暂时不想设置网域,则可以使用自签名 SSL 证书进行测试。
此示例假定您已创建 SSL 证书资源。
如果您想在不创建 SSL 证书资源(或 Google 管理的证书所需的网域)的情况下测试此过程,则仍然可以改用此页面中的说明来设置 HTTP 负载均衡器。
创建负载均衡器
在下图中,负载均衡器使用无服务器 NEG 后端将请求定向到无服务器 Cloud Run 服务。对于本示例,我们按照 Cloud Run Python 快速入门中的说明来部署 Cloud Run 服务。
由于使用无服务器 NEG 后端的后端服务不支持健康检查,因此如果负载均衡器只有无服务器 NEG 后端,则您无需创建允许健康检查的防火墙规则。
控制台
开始配置
在 Google Cloud 控制台中,转到负载均衡页面。
- 点击创建负载均衡器。
- 在负载均衡器的类型字段中,选择应用负载均衡器 (HTTP/HTTPS),然后点击下一步。
- 在公共或内部字段中,选择公共(外部),然后点击下一步。
- 在全球或单个区域部署字段中,选择最适合全球性工作负载,然后点击下一步。
- 在负载均衡器世代字段中,选择全球外部应用负载均衡器,然后点击下一步。
- 点击配置。
基本配置
- 对于负载均衡器的名称,请输入
serverless-lb
。 - 不关闭窗口继续操作。
前端配置
- 点击前端配置。
- 在名称部分,输入名称。
-
要创建 HTTPS 负载均衡器,您必须有一个 SSL 证书 (
gcloud compute ssl-certificates list
)。我们建议您使用 Google 管理的证书,如先前所述。
- 点击完成。
如需配置外部应用负载均衡器,请按如下所示填写各个字段。
验证以下选项配置了以下值:
属性 | 值(按照说明输入值或选择选项) |
---|---|
协议 | HTTPS |
网络服务层级 | 优质 |
IP 版本 | IPv4 |
IP 地址 | example-ip |
端口 | 443 |
可选:HTTP keepalive 超时 | 输入 5 到 1200 秒的超时值。默认值为 610 秒。 |
证书 | 选择现有的 SSL 证书或创建新证书。 如需创建 HTTPS 负载均衡器,您必须具有要在 HTTPS 代理中使用的 SSL 证书资源。您可以使用 Google 管理的 SSL 证书或自行管理的 SSL 证书创建 SSL 证书资源。 如需创建 Google 管理的证书,您必须拥有一个网域。该网域的 A 记录必须解析为负载均衡器的 IP 地址(在此示例中为 example-ip)。建议使用 Google 管理的证书,因为 Google Cloud 会自动获取、管理和续订这些证书。如果您没有网域,则可以使用自签名 SSL 证书进行测试。 |
可选:启用从 HTTP 到 HTTPS 的重定向 |
使用此复选框可启用从 HTTP 到 HTTPS 的重定向。
启用此复选框会创建一个额外的部分 HTTP 负载均衡器,它使用与 HTTPS 负载均衡器相同的 IP 地址,并将 HTTP 请求重定向到负载均衡器的 HTTPS 前端。 只有在选择 HTTPS 协议并使用预留 IP 地址时,才能选中此复选框。 |
如果您想在不设置 SSL 证书资源(或 Google 管理的证书所需要的网域)的情况下测试此过程,则可以设置 HTTP 负载均衡器。
如需创建 HTTP 负载均衡器,请验证以下选项已使用这些值进行配置:
属性 | 值(按照说明输入值或选择选项) |
---|---|
协议 | HTTP |
网络服务层级 | 高级 |
IP 版本 | IPv4 |
IP 地址 | example-ip |
端口 | 80 |
可选:HTTP keepalive 超时 | 输入 5 到 1200 秒的超时值。默认值为 610 秒。 |
后端配置
- 点击后端配置。
- 在后端服务和后端存储桶列表中,点击创建后端服务。
- 在名称部分,输入名称。
- 在后端类型下,选择无服务器网络端点组。
- 保持协议不变。此参数会被忽略。
- 在后端部分的新建后端中,选择创建无服务器网络端点组。
- 在名称部分,输入名称。
- 在区域中,选择 us-central1,然后选择 Cloud Run。
- 选中选择服务名称。
- 在服务列表中,选择您要为其创建负载均衡器的 Cloud Run 服务。
- 点击创建。
- 在新建后端部分中,点击完成。
- 点击创建。
路由规则
路由规则决定了流量的定向方式。如需配置路由,您需要设置主机规则和路径匹配器,它们是外部应用负载均衡器网址映射的配置组件。
点击路由规则。
- 保留默认主机和路径。对于本示例,所有请求都会转到上一步中创建的后端服务。
检查配置
- 点击检查并最终确定。
- 检查所有设置。
- 可选:点击等效代码以查看将用于创建负载均衡器的 REST API 请求。
- 点击创建。
- 等待负载均衡器创建完毕。
- 点击负载均衡器的名称 (serverless-lb)。
- 请记下负载均衡器的 IP 地址,以备在下一个任务中使用。它被称为
IP_ADDRESS
。
gcloud
- 为您的无服务器应用创建无服务器 NEG。
如需使用 Cloud Run 服务创建无服务器 NEG,请运行以下命令:
如需了解更多选项,请参阅gcloud compute network-endpoint-groups create SERVERLESS_NEG_NAME \ --region=us-central1 \ --network-endpoint-type=serverless \ --cloud-run-service=CLOUD_RUN_SERVICE_NAME
gcloud compute network-endpoint-groups create
的gcloud
参考指南。 - 创建后端服务。
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global
- 将无服务器 NEG 作为后端添加到此后端服务:
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --global \ --network-endpoint-group=SERVERLESS_NEG_NAME \ --network-endpoint-group-region=us-central1
- 创建网址映射以将传入的请求路由到此后端服务:
gcloud compute url-maps create URL_MAP_NAME \ --default-service BACKEND_SERVICE_NAME
此示例网址映射仅会定位一项代表单个无服务器应用的后端服务,因此我们不需要设置主机规则或路径匹配器。如果您有多项后端服务,则可以使用主机规则根据主机名将请求定向到不同的服务,还可以设置路径匹配器以根据请求路径将请求定向到不同的服务。
-
如需创建 HTTPS 负载均衡器,您必须具有要在 HTTPS 目标代理中使用的 SSL 证书资源。您可以使用 Google 管理的 SSL 证书或自行管理的 SSL 证书创建 SSL 证书资源。建议使用 Google 管理的证书,因为 Google Cloud 会自动获取、管理和续订这些证书。
如需创建 Google 管理的证书,您必须拥有一个网域。如果您没有网域,则可以使用自签名 SSL 证书进行测试。
如需创建 Google 管理的 SSL 证书资源,请运行以下命令: 如需创建自行管理的 SSL 证书资源,请运行以下命令:gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --domains DOMAIN
gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --certificate CRT_FILE_PATH \ --private-key KEY_FILE_PATH
-
创建目标 HTTPS 代理以将请求路由到您的网址映射:
对于 HTTP 负载均衡器,请创建 HTTP 目标代理:
gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --url-map=URL_MAP_NAME
对于 HTTPS 负载均衡器,请创建 HTTPS 目标代理。该代理属于负载均衡器,保存用于 HTTPS 负载均衡的 SSL 证书,因此您还需要在此步骤中加载证书。
gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --ssl-certificates=SSL_CERTIFICATE_NAME \ --url-map=URL_MAP_NAME
请替换以下内容:
TARGET_HTTP_PROXY_NAME
:目标 HTTP 代理的名称。TARGET_HTTPS_PROXY_NAME
:目标 HTTPS 代理的名称。HTTP_KEEP_ALIVE_TIMEOUT_SEC
:可选字段,用于指定客户端 HTTP keepalive 超时。超时值必须介于 5 到 1200 秒之间。默认值为 610 秒。SSL_CERTIFICATE_NAME
:SSL 证书的名称。URL_MAP_NAME
:网址映射的名称。
- 创建转发规则以将传入请求路由到代理。
对于 HTTP 负载均衡器:
gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=example-ip \ --target-http-proxy=TARGET_HTTP_PROXY_NAME \ --global \ --ports=80
对于 HTTPS 负载均衡器:
gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=example-ip \ --target-https-proxy=TARGET_HTTPS_PROXY_NAME \ --global \ --ports=443
将您的网域连接到负载均衡器
创建负载均衡器后,请记好与负载均衡器关联的 IP 地址,例如 30.90.80.100
。如需将您的网域指向负载均衡器,请使用您的网域注册服务创建 A
记录。如果您向 SSL 证书添加了多个网域,则必须为每个网域添加一条 A
记录,所有网域均指向负载均衡器的 IP 地址。例如,如需为 www.example.com
和 example.com
创建 A
记录,请使用以下命令:
NAME TYPE DATA www A 30.90.80.100 @ A 30.90.80.100
如果您使用 Cloud DNS 作为 DNS 提供商,请参阅添加、修改和删除记录。
测试负载均衡器
现在您已经配置了负载均衡器,接下来可以开始向负载均衡器的 IP 地址发送流量了。如果您配置了网域,则还可以将流量发送到该域名。不过,DNS 传播可能需要一些时间才能完成,因此您可以先使用 IP 地址进行测试。
在 Google Cloud 控制台中,转到负载均衡页面。
点击刚刚创建的负载均衡器。
记下负载均衡器的 IP 地址。
对于 HTTP 负载均衡器,您可以使用网络浏览器转到
http://IP_ADDRESS
来测试负载均衡器。将IP_ADDRESS
替换为负载均衡器的 IP 地址。系统会将您定向到helloworld
服务首页。
对于 HTTPS 负载均衡器,您可以使用网络浏览器转到
https://IP_ADDRESS
来测试负载均衡器。将IP_ADDRESS
替换为负载均衡器的 IP 地址。系统会将您定向到helloworld
服务首页。
如果此操作无效并且您使用的是 Google 管理的证书,请确认证书资源的状态为“有效”。如需了解详情,请参阅 Google 管理的 SSL 证书资源状态。
如果您使用自签名证书进行测试,您的浏览器将显示警告。您必须明确指示浏览器接受自签名证书。点击该警告即可查看实际页面。
其他配置选项
本部分对配置示例进行了扩展,以提供一些额外的替代配置选项。所有任务均为可选任务。您可以按任意顺序执行这些任务。
设置多区域负载均衡
在本页面前面的示例中,我们只有一项 Cloud Run 服务用作 us-central1
区域中的后端。由于无服务器 NEG 一次只能指向一个端点,因此不会跨多个区域执行负载均衡。外部应用负载均衡器仅用作前端,并将流量代理到指定的 helloworld
应用端点。但是,建议您从多个区域提供 Cloud Run 应用,以缩短最终用户延迟时间。
如果后端服务附加了多个无服务器 NEG,则负载均衡器会通过将请求转发到最近的可用区域中的无服务器 NEG 来均衡流量。但是,后端服务在每个区域只能包含一个无服务器 NEG。如需使 Cloud Run 服务在多个区域可用,您需要设置跨区域路由。您应该能够使用一个全球通用的网址方案来从距离用户最近的区域处理用户请求。
如需设置多区域传送,您需要使用优质网络层级,以确保所有区域 Cloud Run 部署都兼容并可处理来自任何区域的流量。
如需设置多区域负载均衡器,请执行以下操作:
- 在不同区域中设置两项 Cloud Run 服务。假设您已经部署了两项 Cloud Run 服务:一项服务部署到美国的一个区域,另一项服务部署到欧洲的一个区域。
- 使用以下设置创建外部应用负载均衡器:
- 设置具有两个无服务器 NEG 的全球后端服务:
- 在被部署到美国的 Cloud Run 服务所在的区域中创建第一个 NEG。
- 在被部署到欧洲的 Cloud Run 服务所在的区域中创建第二个 NEG。
- 在您的前端配置中设置高级网络服务层级。
- 设置具有两个无服务器 NEG 的全球后端服务:
下图展示了生成的设置。
本部分基于本页前面所述的负载均衡器设置,在此设置过程中,您在 us-central1
区域中创建了一个无服务器 NEG,用于指向同一区域中的 Cloud Run 服务。此外,本部分还假设您已在 europe-west1
区域中创建第二项 Cloud Run 服务。您创建的第二个无服务器 NEG 将指向 europe-west1
区域中的此 Cloud Run 服务。
在此示例中,您将完成以下步骤:
- 在
europe-west1
区域中创建第二个无服务器 NEG。 - 将第二个无服务器 NEG 连接到后端服务。
如需将第二个无服务器 NEG 添加到现有的后端服务,请按照以下步骤操作。
控制台
在 Google Cloud 控制台中,转到负载均衡页面。
点击要修改其后端服务的负载均衡器的名称。
在负载均衡器详情页面上,点击
修改。在修改全球外部应用负载均衡器页面上,点击后端配置。
在后端配置页面上,针对要修改的后端服务点击
修改。在后端部分中,点击添加后端。
在无服务器网络端点组列表中,选择创建无服务器网络端点组。
输入无服务器 NEG 的名称。
对于区域,请选择
europe-west1
。对于无服务器网络端点组类型,选择 Cloud Run,然后执行以下操作:
- 选中选择服务选项。
- 在服务列表中,选择要为其创建负载均衡器的 Cloud Run 服务。
点击创建。
在新建后端页面上,点击完成。
点击保存。
如需更新后端服务,请点击更新。
如需更新负载均衡器,请在修改全球外部应用负载均衡器页面上点击更新。
gcloud
在部署 Cloud Run 服务的同一区域中创建第二个无服务器 NEG。
gcloud compute network-endpoint-groups create SERVERLESS_NEG_NAME_2 \ --region=europe-west1 \ --network-endpoint-type=SERVERLESS \ --cloud-run-service=CLOUD_RUN_SERVICE_2
请替换以下内容:
SERVERLESS_NEG_NAME_2
:第二个无服务器 NEG 的名称CLOUD_RUN_SERVICE_2
:Cloud Run 服务的名称
将第二个无服务器 NEG 作为后端添加到此后端服务。
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --global \ --network-endpoint-group=SERVERLESS_NEG_NAME_2 \ --network-endpoint-group-region=europe-west1
请替换以下内容:
BACKEND_SERVICE_NAME
:后端服务的名称SERVERLESS_NEG_NAME_2
:第二个无服务器 NEG 的名称
将经过身份验证的 Pub/Sub 推送订阅与多区域 Cloud Run 部署搭配使用
对于经过身份验证的推送请求,默认情况下,Cloud Run 预期它包含特定于区域的受众群体字段。在多区域 Cloud Run 部署中,如果推送请求路由到其他区域的 Cloud Run 服务,JWT 令牌验证将因受众群体不匹配而失败。
如需解决该特定区域的限制,请执行以下操作:
- 为不同区域中的服务部署配置相同的自定义受众群体。
- 配置 Pub/Sub 推送消息,以将自定义受众群体用作 JWT 令牌中的受众群体。
设置区域路由
从多个区域提供应用的一个常见原因是满足数据位置要求。 例如,您可能需要确保欧洲用户发出的请求始终从位于欧洲的某一区域传送。如需进行此项设置,您需要一个分别包含欧盟用户网址和非欧盟用户网址的网址架构,并将您的欧盟用户定向到欧盟网址。
在这种情况下,您可以使用网址映射将请求从特定网址路由到其相应区域。通过这种设置,针对一个区域的请求绝不会传送到其他区域。这样可以在各区域之间实现隔离。另一方面,如果一个区域发生故障,请求并不会被路由到其他区域。因此,此设置并不会增加服务的可用性。
如需设置区域路由,您需要使用优质网络层级,以便将不同的区域合并到一条转发规则中。
如需设置使用地区路由的负载均衡器,请执行以下操作:
- 在不同区域中设置两项 Cloud Run 服务。假设您已经部署了以下两项 Cloud Run 服务:一项 hello-world-eu 服务部署到欧洲的一个区域,另一项 hello-world-us 服务部署到美国的一个区域。
- 使用以下设置创建外部应用负载均衡器:
- 在欧洲区域设置一项使用无服务器 NEG 的后端服务。必须在部署到欧洲的 Cloud Run 服务所在的区域中创建无服务器 NEG。
- 在美国设置第二项使用其他无服务器 NEG 的后端服务,此无服务器 NEG 必须在部署到美国的 Cloud Run 服务所在的同一区域中创建。
- 使用适当的主机和路径规则设置网址映射,以使一组网址路由到位于欧洲的后端服务,而所有请求都路由到位于美国的后端服务。
- 在您的前端配置中设置优质网络层级。
其余设置可与前文所述相同。您会得到类似如下所示的设置:
使用网址掩码
创建无服务器 NEG 时,您可以使用网址掩码来指向同一网域处提供的多项服务,而不必选择特定的 Cloud Run 服务。网址掩码是网址架构的模板。无服务器 NEG 将使用此模板从传入请求的网址中提取服务名称,并将请求映射到相应服务。
如果您的服务映射到自定义网域,而不是 Google Cloud 为已部署的服务提供的默认地址,则网址掩码特别有用。借助网址掩码,即使应用使用自定义网址格式,您也可以通过一条规则定位多项服务和版本。
如果您尚未阅读无服务器 NEG 概览:网址掩码,请务必阅读该文档。
构建网址掩码
如需为负载均衡器构建网址掩码,请从您的服务网址入手。对于本示例,我们将使用在 https://example.com/login
处运行的示例无服务器应用。这是将提供该应用的 login
服务的网址。
- 从该网址中移除
http
或https
。仍保留example.com/login
。 - 将服务名称替换为网址掩码的占位符。
- Cloud Run:将 Cloud Run 服务名称替换为占位符
<service>
。如果 Cloud Run 服务具有与之关联的标记,请将标记名称替换为占位符<tag>
。 在此示例中,保留的网址掩码是example.com/<service>
。 - Cloud Run functions:将函数名称替换为占位符
<function>
。在此示例中,保留的网址掩码是example.com/<function>
。 - App Engine:将服务名称替换为占位符
<service>
。 如果服务具有与之关联的版本,请将该版本替换为占位符<version>
。 在此示例中,保留的网址掩码是example.com/<service>
。 - API Gateway:将网关名称替换为占位符
<gateway>
。在此示例中,保留的网址掩码是example.com/<gateway>
。
- Cloud Run:将 Cloud Run 服务名称替换为占位符
(可选)如果可以从网址的路径部分提取服务名称(或者函数、版本或标记),则可以省略网域。网址掩码的路径部分通过第一个
/
字符区分。如果网址掩码中没有/
,则掩码将被理解为仅代表主机。因此,对于此示例,网址掩码可以缩减至/<service>
、/<gateway>
或/<function>
。同样,如果可以从网址的主机部分提取服务名称,则可以从网址掩码中完全省略路径。
您还可以省略位于第一个占位符之前的任何主机或子网域组成部分以及位于最后一个占位符之后的任何路径组成部分。在这种情况下,占位符会捕获相应组成部分所需的信息。
以下几个示例演示了这些规则:
Cloud Run
下表假定您有一个名为 example.com
的自定义网域,并且您的所有 Cloud Run 服务都使用外部应用负载均衡器映射到此网域。
服务名称,标记名称 | 自定义网域网址 | 网址掩码 |
---|---|---|
service:login | https://login-home.example.com/web | <service>-home.example.com |
service:login | https://example.com/login/web | example.com/<service> 或 /<service> |
service:login,tag:test | https://test.login.example.com/web | <tag>.<service>.example.com |
service:login,tag:test | https://example.com/home/login/test | example.com/home/<service>/<tag> 或 /home/<service>/<tag> |
service:login,tag:test | https://test.example.com/home/login/web | <tag>.example.com/home/<service> |
Cloud Run functions
下表假定您有一个名为 example.com
的自定义网域,并且您的所有 Cloud Run functions 服务都映射到此网域。
函数名称 | 自定义网域网址 | 网址掩码 |
---|---|---|
login | https://example.com/login | /<function> |
login | https://example.com/home/login | /home/<function> |
login | https://login.example.com | <function>.example.com |
login | https://login.home.example.com | <function>.home.example.com |
App Engine
下表假定您有一个名为 example.com
的自定义网域,并且您的所有 App Engine 服务都映射到此网域。
服务名称,版本 | 自定义网域网址 | 网址掩码 |
---|---|---|
service:login | https://login.example.com/web | <service>.example.com |
service:login | https://example.com/home/login/web | example.com/home/<service> 或 /home/<service> |
service:login,version:test | https://test.example.com/login/web | <version>.example.com/<service> |
service:login,version:test | https://example.com/login/test | example.com/<service>/<version> |
API 网关
下表假定您有一个名为 example.com
的自定义网域,并且您的所有 API Gateway 服务都映射到此网域。
网关名称 | API Gateway(预览版)自定义网域网址 | 网址掩码 |
---|---|---|
login | https://example.com/login | /<gateway> |
login | https://example.com/home/login | /home/<gateway> |
login | https://login.example.com | <gateway>.example.com |
login | https://login.home.example.com | <gateway>.home.example.com |
使用网址掩码创建无服务器 NEG
控制台
对于新的负载均衡器,您可以使用与本主题前面介绍的相同的端到端流程。配置后端服务时,请不要选择特定服务,而是输入网址掩码。
如果您已有负载均衡器,则可以修改后端配置,并让无服务器 NEG 指向网址掩码而不是特定服务。
如需将基于网址掩码的无服务器 NEG 添加到现有的后端服务,请执行以下操作:
- 转到 Google Cloud 控制台中的“负载均衡”页面。
转到“负载均衡”页面 - 点击要修改其后端服务的负载均衡器的名称。
- 在负载均衡器详情页面上,点击修改 。
- 在修改全球外部应用负载均衡器页面上,点击后端配置。
- 在后端配置页面上,针对要修改的后端服务点击修改 。
- 点击添加后端。
- 选择创建无服务器网络端点组。
- 为名称输入
helloworld-serverless-neg
。 - 在区域下,选择 us-central1。
- 在无服务器网络端点组类型下,选择其中创建了无服务器应用(或服务或功能)的平台。
- 选择使用网址掩码。
- 输入网址掩码。如需了解如何创建网址掩码,请参阅构建网址掩码。
- 点击创建。
- 为名称输入
- 在新建后端部分中,点击完成。
- 点击更新。
gcloud:Cloud Run
如需使用示例网址掩码 example.com/<service>
创建无服务器 NEG,请使用以下命令:
gcloud compute network-endpoint-groups create helloworld-neg-mask \ --region=us-central1 \ --network-endpoint-type=serverless \ --cloud-run-url-mask="example.com/<service>"
gcloud:Cloud Run functions
如需使用示例网址掩码 example.com/<service>
创建无服务器 NEG,请使用以下命令:
gcloud compute network-endpoint-groups create helloworld-neg-mask \ --region=us-central1 \ --network-endpoint-type=serverless \ --cloud-function-url-mask="example.com/<service>"
gcloud:App Engine
如需使用示例网址掩码 example.com/<service>
创建无服务器 NEG,请使用以下命令:
gcloud compute network-endpoint-groups create helloworld-neg-mask \ --region=us-central1 \ --network-endpoint-type=serverless \ --app-engine-url-mask="example.com/<service>"
gcloud:API Gateway
如需使用示例网址掩码 example.com/<gateway>
创建无服务器 NEG,请使用以下命令:
gcloud beta compute network-endpoint-groups create helloworld-neg-mask \ --region=us-central1 \ --network-endpoint-type=serverless \ --serverless-deployment-platform=apigateway.googleapis.com \ --serverless-deployment-resource=my-gateway \ --serverless-deployment-url-mask="example.com/<gateway>"
如需了解负载均衡器如何处理网址掩码不匹配的问题,请参阅排查无服务器 NEG 的问题。
迁移自定义网域以便由外部应用负载均衡器处理
如果要将无服务器计算应用映射到自定义网域,则建议您更新 DNS 记录,以便改为通过负载均衡器路由发送到现有 Cloud Run、Cloud Run functions、API Gateway 或 App Engine 自定义网域网址的流量。
例如,如果您有一个名为 example.com
的自定义网域,并且所有 Cloud Run 服务都映射到此网域,则应更新 example.com
的 DNS 记录以使其指向负载均衡器的 IP 地址。
在更新 DNS 记录之前,您可以在本地测试您的配置,方法是将自定义网域的本地 DNS 解析强制设置为负载均衡器的 IP 地址。如需在本地进行测试,请修改本地机器上的 /etc/hosts/
文件以将 example.com
指向负载均衡器的 IP 地址,或者使用 curl --resolve
标志强制 curl
对该请求使用负载均衡器的 IP 地址。
当 example.com
的 DNS 记录解析为 HTTP(S) 负载均衡器的 IP 地址时,发送到 example.com
的请求会开始通过负载均衡器进行路由。负载均衡器会根据其网址映射将请求分配到相关后端服务。此外,如果后端服务配置了网址掩码,则无服务器 NEG 会使用该掩码将请求路由到相应的 Cloud Run、Cloud Run functions、API Gateway 或 App Engine 服务。
启用 Cloud CDN
通过为 Cloud Run 服务启用 Cloud CDN,您可以将内容缓存到您的用户附近,从而优化内容传送。
您可以使用 gcloud compute
backend-services update
命令在全球外部应用负载均衡器使用的后端服务上启用 Cloud CDN。
gcloud compute backend-services update helloworld-backend-service
--enable-cdn
--global
使用 Cloud Run、Cloud Run functions、API Gateway 和 App Engine 后端的后端服务支持 Cloud CDN。
在外部应用负载均衡器上启用 IAP
注意:IAP 与 Cloud CDN 不兼容。您可以将 IAP 配置为启用或停用(默认)。如果设置为启用,您必须为 oauth2-client-id
和 oauth2-client-secret
提供值。
如需启用 IAP,请更新后端服务以添加具有 oauth2-client-id
和 oauth2-client-secret
的 --iap=enabled
标志。
gcloud compute backend-services update BACKEND_SERVICE_NAME \ --iap=enabled,oauth2-client-id=ID,oauth2-client-secret=SECRET \ --global
您可以选择使用 Google Cloud 控制台、gcloud CLI 或 API 为 Compute Engine 资源启用 IAP。
启用 Google Cloud Armor
Google Cloud Armor 是一款安全产品,可为所有 GCLB 代理负载均衡器提供针对分布式拒绝服务攻击 (DDoS) 的保护。Google Cloud Armor 还为通过外部应用负载均衡器访问的服务提供可配置的安全政策。如需了解适用于外部应用负载均衡器的 Google Cloud Armor 安全政策,请参阅 Google Cloud Armor 安全政策概览。
如果您使用的是 Cloud Run functions,则可以使用 internal-and-gclb
入站流量设置来确保发送到默认网址的请求都已经屏蔽。
如果您使用的是 Cloud Run,则可以通过将入站流量限制到“内部和 Cloud Load Balancing”来屏蔽发送到默认网址或通过 Cloud Run 设置的任何其他自定义网域的请求”。
如果您使用的是 App Engine,则可以使用入站流量控制机制,以便您的应用仅接收负载均衡器(如果您使用 VPC,则还有 VPC)发送的请求。
如果没有适当的入站流量设置,用户可使用无服务器应用的默认网址来绕过负载均衡器、Google Cloud Armor 安全政策、SSL 证书和通过负载均衡器传递的私钥。
可选:配置默认的后端安全政策。默认安全政策会限制超出用户配置阈值的流量。如需详细了解默认安全政策,请参阅速率限制概览。
- 如需停用 Google Cloud Armor 默认安全政策,请在后端安全政策列表菜单中选择
None
。 - 在安全部分中,选择默认安全政策。
- 在政策名称字段中,接受自动生成的名称或输入安全政策的名称。
- 在请求数字段中,接受默认请求数,或输入介于
1
和10,000
之间的整数。 - 在间隔字段中,选择间隔。
- 在对密钥实施字段中,选择以下值之一:全部、IP 地址或 X-Forwarded-For IP 地址。如需详细了解这些选项,请参阅确定客户端以进行速率限制。
启用日志记录和监控
您可以为外部应用负载均衡器后端服务启用和停用日志记录功能,还可以查看其日志。使用 Google Cloud 控制台时,对于具有无服务器 NEG 后端的后端服务,日志记录功能默认启用。您可以根据需要使用 gcloud
停用每个后端服务的日志记录功能。有关说明,请参阅日志记录。
负载均衡器还会将监控数据导出到 Cloud Monitoring。监控指标可用于评估负载均衡器的配置、使用情况和性能。指标还可用于排查问题以及提高资源利用率和改善用户体验。有关说明,请参阅监控。
更新客户端 HTTP keepalive 超时
前面步骤中创建的负载均衡器已配置客户端 HTTP keepalive 超时的默认值。如需更新客户端 HTTP keepalive 超时,请按照以下说明操作。
控制台
在 Google Cloud 控制台中,转到负载均衡页面。
- 点击要修改的负载均衡器的名称。
- 点击 修改。
- 点击前端配置。
- 展开高级功能。对于 HTTP keepalive 超时,请输入 5 到 1,200 秒的超时值。
- 点击更新。
- 如需查看更改,请点击查看并最终确定,然后点击更新。
gcloud
对于 HTTP 负载均衡器,请使用 gcloud compute target-http-proxies update
命令更新目标 HTTP 代理:
gcloud compute target-http-proxies update TARGET_HTTP_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --global
对于 HTTPS 负载均衡器,请使用 gcloud compute target-https-proxies update
命令更新目标 HTTPS 代理:
gcloud compute target-https-proxies update TARGET_HTTPS_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --global
请替换以下内容:
TARGET_HTTP_PROXY_NAME
:目标 HTTP 代理的名称。TARGET_HTTPS_PROXY_NAME
:目标 HTTPS 代理的名称。HTTP_KEEP_ALIVE_TIMEOUT_SEC
:HTTP keepalive 超时值(5 到 1200 秒)。
启用离群值检测
您可以在全球后端服务上启用离群值检测,以识别运行状况不佳的无服务器 NEG 并减少发送到运行状况不佳的无服务器 NEG 的请求数。
可以使用以下方法之一在后端服务上启用离群值检测:
consecutiveErrors
方法 (outlierDetection.consecutiveErrors
),其中5xx
系列 HTTP 状态代码被视为错误。consecutiveGatewayFailure
方法 (outlierDetection.consecutiveGatewayFailure
),其中只有502
、503
和504
HTTP 状态代码被视为错误。
请按照以下步骤为现有后端服务启用离群值检测。请注意,即使在启用离群值检测后,某些请求也可以发送到运行状况不佳的服务,并向客户端返回 5xx
状态代码。为了进一步降低错误率,您可以为离群值检测参数配置更激进的值。如需了解详情,请参阅 outlierDetection
字段。
控制台
在 Google Cloud 控制台中,转到负载均衡页面。
点击要修改其后端服务的负载均衡器的名称。
在负载均衡器详情页面上,点击
修改。在修改全球外部应用负载均衡器页面上,点击后端配置。
在后端配置页面上,针对要修改的后端服务点击
修改。向下滚动并展开高级配置部分。
在离群值检测部分中,选中启用复选框。
点击
修改以配置离群值检测。验证以下选项是否配置了这些值:
属性 值 连续错误数 5 间隔时间 1000 基本移除时间 30000 最大移除百分比 50 引发强制执行的连续错误数 100 在此示例中,离群值检测分析每秒运行一次。如果 Envoy 代理收到的连续 HTTP
5xx
状态代码数为 5 个或更多,则后端端点会从 Envoy 代理的负载均衡池中移除 30 秒。当强制百分比设置为 100% 时,后端服务会在每次运行离群值检测分析时从这些特定 Envoy 代理的负载均衡池中逐出运行状况不佳的端点。如果满足移除条件,则最多可以从负载均衡池中移除 50% 的后端端点。点击保存。
如需更新后端服务,请点击更新。
如需更新负载均衡器,请在修改全球外部应用负载均衡器页面上点击更新。
gcloud
将后端服务导出到 YAML 文件。
gcloud compute backend-services export BACKEND_SERVICE_NAME \ --destination=BACKEND_SERVICE_NAME.yaml --global
将
BACKEND_SERVICE_NAME
替换为后端服务的名称。修改后端服务的 YAML 配置,以添加离群值检测字段,如
outlierDetection
部分中的以下 YAML 配置所示。在此示例中,离群值检测分析每秒运行一次。如果 Envoy 代理收到的连续 HTTP
5xx
状态代码数为 5 个或更多,则后端端点会从 Envoy 代理的负载均衡池中移除 30 秒。当强制百分比设置为 100% 时,后端服务会在每次运行离群值检测分析时从这些特定 Envoy 代理的负载均衡池中逐出运行状况不佳的端点。如果满足移除条件,则最多可以从负载均衡池中移除 50% 的后端端点。name: BACKEND_SERVICE_NAME backends: - balancingMode: UTILIZATION capacityScaler: 1.0 group: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_A/networkEndpointGroups/SERVERLESS_NEG_NAME - balancingMode: UTILIZATION capacityScaler: 1.0 group: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_B/networkEndpointGroups/SERVERLESS_NEG_NAME_2 outlierDetection: baseEjectionTime: nanos: 0 seconds: 30 consecutiveErrors: 5 enforcingConsecutiveErrors: 100 interval: nanos: 0 seconds: 1 maxEjectionPercent: 50 port: 80 selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME sessionAffinity: NONE timeoutSec: 30 ...
请替换以下内容:
BACKEND_SERVICE_NAME
:后端服务的名称PROJECT_ID
:您的项目的 IDREGION_A
和REGION_B
:已配置负载均衡器的区域。SERVERLESS_NEG_NAME
:第一个无服务器 NEG 的名称SERVERLESS_NEG_NAME_2
:第二个无服务器 NEG 的名称
通过导入最新配置来更新后端服务。
gcloud compute backend-services import BACKEND_SERVICE_NAME \ --source=BACKEND_SERVICE_NAME.yaml --global
离群值检测现已在后端服务上启用。
删除无服务器 NEG
如果网络端点组已连接到后端服务,则您无法将其删除。在删除 NEG 之前,请确保该 NEG 已与后端服务分离。
控制台
- 如需确保要删除的无服务器 NEG 当前未被任何后端服务使用,请转到负载均衡高级菜单中的后端服务标签页。
转到“后端服务”标签页 - 如果无服务器 NEG 当前正在使用:
- 点击使用无服务器 NEG 的后端服务的名称。
- 点击修改 。
- 从后端列表中,点击 以从后端服务中移除无服务器 NEG 后端。
- 点击保存。
- 转到 Google Cloud 控制台中的网络端点组页面。
转到“网络端点组”页面 - 选中您要删除的无服务器 NEG 对应的复选框。
- 点击删除。
- 再次点击删除进行确认。
gcloud
如需从后端服务中移除无服务器 NEG,您必须指定在其中创建该 NEG 的区域。此外,您还必须指定 --global
标志,因为 helloworld-backend-service
是全球性资源。
gcloud compute backend-services remove-backend helloworld-backend-service \ --network-endpoint-group=helloworld-serverless-neg \ --network-endpoint-group-region=us-central1 \ --global
如需删除无服务器 NEG,请使用以下命令:
gcloud compute network-endpoint-groups delete helloworld-serverless-neg \ --region=us-central1