设置 Cloud Run、Cloud Functions 或 App Engine

本页面介绍了如何创建外部应用负载均衡器,以将请求路由到无服务器后端。在此处,“无服务器”这一术语指的是以下无服务器计算产品:

  • App Engine
  • Cloud Functions
  • Cloud Run

外部应用负载均衡器与 API Gateway 的集成使无服务器后端能够利用 Cloud Load Balancing 提供的所有功能。如需配置外部应用负载均衡器以将流量路由到 API Gateway,请参阅适用于 API Gateway 的外部应用负载均衡器使用入门。外部应用负载均衡器对 API Gateway 的支持目前处于预览版阶段。

借助无服务器 NEG,您可以将 Google Cloud 无服务器应用外部应用负载均衡器搭配使用。使用无服务器 NEG 后端配置负载均衡器后,对负载均衡器发出的请求会被路由到无服务器应用后端。

如需详细了解无服务器 NEG,请参阅无服务器 NEG 概览

准备工作

  1. 部署 App Engine、Cloud Functions 或 Cloud Run 服务
  2. 如果您尚未安装 Google Cloud CLI,请执行此操作
  3. 配置权限
  4. 添加 SSL 证书资源

部署 App Engine、Cloud Functions 或 Cloud Run 服务

本页面中的说明假定您已运行 Cloud Run、Cloud Functions 或 App Engine 服务。

对于本页面中的示例,我们已使用 Cloud Run Python 快速入门us-central1 区域中部署 Cloud Run 服务。本页面的其余部分介绍了如何设置外部应用负载均衡器,以使其使用无服务器 NEG 后端将请求路由到此服务。

如果您尚未部署无服务器应用,或者如果您想试用示例无服务器 NEG 应用,请按照以下快速入门之一进行操作。您可以在任何地区中创建无服务器应用,但稍后必须使用相同地区创建无服务器 NEG 和负载均衡器。

Cloud Run

如需创建简单的 Hello World 应用,将其打包到一个容器映像中,然后将该容器映像部署到 Cloud Run,请参阅快速入门:构建和部署

如果您已将示例容器上传到 Container Registry,请参阅快速入门:部署预建的示例容器

Cloud Functions

请参阅《Cloud 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 地址,以供客户用来访问您的负载均衡器。

控制台

  1. 在 Google Cloud 控制台中,转到外部 IP 地址页面。

    转到“外部 IP 地址”

  2. 点击预留外部静态 IP 地址

  3. 对于名称,输入 example-ip

  4. 网络服务层级部分,选择高级

  5. 对于 IP 版本,请选择 IPv4

  6. 对于类型,请选择全球

  7. 点击预留

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 记录,才能预配证书。如果您还没有域名,则可以从 Google Domains 获取一个。如需了解详情,请参阅 Google Domains 使用入门。此外,您还需要更新网域的 DNS A 记录,以指向上一步 (example-ip) 中创建的负载均衡器的 IP 地址。有关详细说明,请参阅使用 Google 管理的证书

  • 自签发证书。如果您暂时不想设置网域,则可以使用自签名 SSL 证书进行测试。

此示例假定您已创建 SSL 证书资源。

如果您想在不创建 SSL 证书资源(或 Google 管理的证书所需的网域)的情况下测试此过程,则仍然可以改用此页面中的说明来设置 HTTP 负载均衡器。

创建负载均衡器

在下图中,负载均衡器使用无服务器 NEG 后端将请求定向到无服务器 Cloud Run 服务。对于本示例,我们按照 Cloud Run Python 快速入门中的说明来部署 Cloud Run 服务。

Cloud Run 应用的外部应用负载均衡器架构。
Cloud Run 应用的外部应用负载均衡器架构(点击可放大)。

由于使用无服务器 NEG 后端的后端服务不支持健康检查,因此如果负载均衡器只有无服务器 NEG 后端,则您无需创建允许健康检查的防火墙规则。

控制台

开始配置

  1. 在 Google Cloud 控制台中,转到负载均衡页面。

    转到“负载均衡”

  2. 点击创建负载均衡器
  3. 负载均衡器类型部分,选择应用负载均衡器 (HTTP/HTTPS),然后点击下一步
  4. 公开或内部部分,选择公开(外部),然后点击下一步
  5. 对于全球或单区域部署,选择最适合全球工作负载,然后点击下一步
  6. 生成负载平衡器部分,选择传统应用负载平衡器,然后点击下一步
  7. 点击配置

基本配置

  1. 对于负载均衡器的名称,请输入 serverless-lb
  2. 不关闭窗口继续操作。

前端配置

  1. 点击前端配置
  2. 名称部分,输入名称。
  3. 要创建 HTTPS 负载均衡器,您必须有一个 SSL 证书 (gcloud compute ssl-certificates list)。

    我们建议您使用 Google 管理的证书,如先前所述。

  4. 如需配置外部应用负载均衡器,请按如下所示填写各个字段。

    验证以下选项配置了以下值:

    属性 值(按照说明输入值或选择选项)
    协议 HTTPS
    网络服务层级 优质
    IP 版本 IPv4
    IP 地址 example-ip
    端口 443
    证书 选择现有的 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 地址时,才能选中此复选框。

  5. 点击完成

后端配置

  1. 点击后端配置
  2. 后端服务和后端存储桶列表中,点击创建后端服务
  3. 名称部分,输入名称。
  4. 后端类型下,选择无服务器网络端点组
  5. 保持协议不变。此参数会被忽略。
  6. 后端部分的新建后端中,选择创建无服务器网络端点组
  7. 名称部分,输入名称。
  8. 点击创建
  9. 新建后端部分中,点击完成
  10. 选择启用 Cloud CDN
  11. 可选:修改缓存模式TTL 设置。
  12. 点击创建

路由规则

路由规则决定了流量的定向方式。如需配置路由,您需要设置主机规则和路径匹配器,即外部应用负载均衡器网址映射的配置组件。

  1. 点击主机和路径规则

  2. 保留默认主机和路径。对于本示例,所有请求都会转到上一步中创建的后端服务。

检查配置

  1. 点击检查并最终确定
  2. 检查所有设置。
  3. 可选:点击等效代码以查看将用于创建负载均衡器的 REST API 请求。
  4. 点击创建
  5. 等待负载均衡器创建完毕。
  6. 点击负载均衡器的名称 (serverless-lb)。
  7. 请记下负载均衡器的 IP 地址,以备在下一个任务中使用。它被称为 IP_ADDRESS

gcloud

  1. 为无服务器应用创建无服务器 NEG。如需了解详情,请参阅 gcloud compute network-endpoint-groups creategcloud 参考指南。
  2. 创建后端服务。
       gcloud compute backend-services create BACKEND_SERVICE_NAME \
           --load-balancing-scheme=LOAD_BALANCING_SCHEME \
           --global \
           --enable-cdn \
           --cache-mode=CACHE_MODE \
           --custom-response-header='Cache-Status: {cdn_cache_status}' \
           --custom-response-header='Cache-ID: {cdn_cache_id}'
       

    通过将 CACHE_MODE 替换为以下项之一来设置缓存模式

    • CACHE_All_STATIC(默认):自动缓存静态内容
    • USE_ORIGIN_HEADERS:要求源站设置有效缓存标头以缓存内容。
    • FORCE_CACHE_ALL:缓存所有内容,并忽略 Cache-Control 响应标头中的任何 privateno-storeno-cache 指令。

    如需了解 Cloud CDN 理解的缓存指令以及 Cloud CDN 未缓存的内容,请参阅可缓存的内容无法缓存的内容

  3. 将无服务器 NEG 作为后端添加到此后端服务:
       gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
           --global \
           --network-endpoint-group=SERVERLESS_NEG_NAME \
           --network-endpoint-group-region=us-central1
       
  4. 创建网址映射以将传入的请求路由到此后端服务:
       gcloud compute url-maps create URL_MAP_NAME \
           --default-service BACKEND_SERVICE_NAME
       

    此示例网址映射仅会定位一项代表单个无服务器应用的后端服务,因此我们不需要设置主机规则或路径匹配器。如果您有多项后端服务,则可以使用主机规则根据主机名将请求定向到不同的服务,还可以设置路径匹配器以根据请求路径将请求定向到不同的服务。

  5. 如需创建 HTTPS 负载均衡器,您必须具有要在 HTTPS 目标代理中使用的 SSL 证书资源。您可以使用 Google 管理的 SSL 证书或自行管理的 SSL 证书创建 SSL 证书资源。建议使用 Google 管理的证书,因为 Google Cloud 会自动获取、管理和续订这些证书。

    如需创建 Google 管理的证书,您必须拥有一个网域。如果您没有网域,则可以使用自签名 SSL 证书进行测试。

    如需创建 Google 管理的 SSL 证书资源,请运行以下命令:
       gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
           --domains DOMAIN
       
    如需创建自行管理的 SSL 证书资源,请运行以下命令:
       gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
           --certificate CRT_FILE_PATH \
           --private-key KEY_FILE_PATH
       
  6. 创建目标 HTTPS 代理以将请求路由到您的网址映射:

    对于 HTTPS 负载均衡器,请创建 HTTPS 目标代理。该代理属于负载均衡器,保存用于 HTTPS 负载均衡的 SSL 证书,因此您还需要在此步骤中加载证书。

       gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
          --ssl-certificates=SSL_CERTIFICATE_NAME \
          --url-map=URL_MAP_NAME
       
  7. 创建转发规则以将传入请求路由到代理。

    对于 HTTPS 负载均衡器:

       gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
           --load-balancing-scheme=EXTERNAL \
           --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.comexample.com 创建 A 记录,请使用以下命令:

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

如果您使用 Cloud DNS 作为 DNS 提供商,请参阅添加、修改和删除记录

测试负载均衡器

现在您已经配置了负载均衡器,接下来可以开始向负载均衡器的 IP 地址发送流量了。如果您配置了网域,则还可以将流量发送到该域名。不过,DNS 传播可能需要一些时间才能完成,因此您可以先使用 IP 地址进行测试。

  1. 在 Google Cloud 控制台中,转到负载均衡页面。

    进入“负载均衡”

  2. 点击刚刚创建的负载均衡器。

  3. 记下负载均衡器的 IP 地址

  4. 对于 HTTPS 负载均衡器,您可以使用网络浏览器转到 https://IP_ADDRESS 来测试负载均衡器。将 IP_ADDRESS 替换为负载均衡器的 IP 地址。系统会将您定向到 helloworld 服务首页。
    如果此操作无效并且您使用的是 Google 管理的证书,请确认证书资源的状态为“有效”。如需了解详情,请参阅 Google 管理的 SSL 证书资源状态
    如果您使用自签名证书进行测试,您的浏览器将显示警告。您必须明确指示浏览器接受自签名证书。点击该警告即可查看实际页面。

  5. 如需验证缓存响应,请通过本地机器的命令行使用 curl。将 IP_ADDRESS 替换为负载均衡器的 IPv4 地址

    curl -v -o/dev/null https://IP_ADDRESS
    

    如果您使用的是 Google 管理的证书,请测试指向负载均衡器的 IP 地址的网域。例如:

    curl -v -o/dev/null -k -s 'https://DOMAIN:443' --connect-to DOMAIN:443:IP_ADDRESS:443
    

    如果您使用的是自签名证书,则还必须指定 -k 标志。如果您有自签名证书,则 curl -k 选项可让 curl 正常工作。 您只能将 -k 参数用于测试您自己的网站。在正常情况下,有效证书是一项重要的安全措施,因此不应忽略证书警告。

    输出应包含您配置的自定义标头 Cache-IDCache-Status,以指示响应是否是从缓存传送的:

    HTTP/2 200
    cache-status: hit
    cache-id: SEA-b9fa975e
    

    输出包含指示存在缓存命中的响应标头,这意味着无服务器应用中的静态资源是从 Cloud CDN 边缘缓存传送给用户的。

    对于 Cloud CDN 中未缓存的响应,cache-status 标头会显示 disabled 值。对于缓存的响应,cache-status 标头值为 hitmissrevalidated

停用 Cloud CDN

控制台

为单个后端服务停用 Cloud CDN

  1. 在 Google Cloud 控制台中,转到 Cloud CDN 页面。

    转到 Cloud CDN

  2. 在源站所在行的右侧,点击菜单 ,然后选择修改

  3. 取消选中您想要停止使用 Cloud CDN 的所有后端服务的复选框。

  4. 点击更新

为某个源站的所有后端服务移除 Cloud CDN

  1. 在 Google Cloud 控制台中,转到 Cloud CDN 页面。

    转到 Cloud CDN

  2. 在源站所在行的右侧,点击菜单 ,然后选择移除

  3. 点击移除进行确认。

gcloud

gcloud compute backend-services update BACKEND_SERVICE_NAME 
--no-enable-cdn

停用 Cloud CDN 后,系统不会使缓存失效或完全清除缓存。如果您关闭 Cloud CDN,然后重新开启 Cloud CDN,则大部分或所有缓存的内容仍可能会被缓存。为了防止缓存使用内容,您必须使该内容失效

后续步骤