本指南通过一个示例介绍了将外部后端(有时称为“自定义源站”)与全球外部应用负载均衡器搭配使用的基础知识。外部后端是 Google Cloud外部的端点。将外部后端与全球外部应用负载均衡器搭配使用时,您可以使用 Cloud CDN 缓存来提高性能。
本指南介绍了如何通过启用 Cloud CDN 的后端服务来配置全球外部应用负载均衡器,并将请求代理到外部后端服务器。
在按照本指南进行操作之前,请先熟悉互联网 NEG 概览文档,包括限制。以下架构图显示了具有外部后端的全球外部应用负载均衡器前端。
权限
如需遵循本指南,您需要创建互联网 NEG 并在项目中创建或修改外部应用负载均衡器。您应该是 Project Owner 或 Project Editor(roles/owner 或 roles/editor),或者应同时具有下列 Compute Engine IAM 角色:
| 任务 | 所需角色 | 
|---|---|
| 创建和修改负载均衡器组件 | Compute Network Admin ( roles/compute.networkAdmin) | 
| 创建和修改 NEG | Compute Instance Admin ( roles/compute.instanceAdmin) | 
在 Google Cloud外部设置外部后端环境
如需设置您的环境,请参阅以下部分。
配置网络端点
配置网络端点,以将外部后端公开给Google Cloud。确保端点可通过互联网访问,即 IP:Port 组合或完全限定的域名 (FQDN) 和端口。此端点稍后可从互联网 NEG 引用。
如需详细了解互联网 NEG 端点的配置要求,请参阅互联网 NEG 概览。
允许外部后端接收来自 Google Cloud的流量
如需允许来自 Google Cloud 的请求到达您的外部后端,您必须将 Google 用于向外部后端发送请求的 IP 地址范围列入许可名单。如需查找需要允许将流量发送到外部后端的 IP 地址,请使用 dig 或 nslookup 等工具查询 _cloud-eoips.googleusercontent.com DNS TXT 记录。
示例:
- 运行以下 - nslookup命令:- nslookup -q=TXT _cloud-eoips.googleusercontent.com 8.8.8.8 - 输出如下所示: - Non-authoritative answer: _cloud-eoips.googleusercontent.com text = "v=spf1 ip4:34.96.0.0/20 ip4:34.127.192.0/18 ~all" - 请注意 - ip4:后面的 CIDR 范围,并确保在外部后端上配置的防火墙规则或云访问控制列表 (ACL) 允许使用这些范围。
- 运行以下 - dig命令:- dig TXT _cloud-eoips.googleusercontent.com | grep -Eo 'ip4:[^ ]+' | cut -d':' -f2 - 输出包含两个 IP 地址范围,如下所示: - 34.96.0.0/20 34.127.192.0/18
设置 Google Cloud 环境
创建具有互联网 NEG 后端的全球外部应用负载均衡器。
保留外部 IP 地址
预留全局静态外部 IP 地址,供客户端用来访问您的应用。
控制台
- 在 Google Cloud 控制台中,前往外部 IP 地址页面。 
- 点击保留预留静态地址以预留 IPv4 地址。 
- 输入名称。 
- 在网络服务层级部分,选择高级。 
- 对于 IP 版本,请选择 IPv4。 
- 对于类型,请选择全球。 
- 点击预留。 
gcloud
gcloud compute addresses create LB_IP_ADDRESS_NAME \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global
请记下预留的 IPv4 地址:
gcloud compute addresses describe LB_IP_ADDRESS_NAME \
    --format="get(address)" \
    --global
设置互联网 NEG
控制台
- 在 Google Cloud 控制台中,转到网络端点群组页面。 
- 点击创建网络端点组。 
- 输入名称。 
- 对于网络端点组类型,选择网络端点组(互联网)。 
- 对于默认端口,输入 - 443。
- 对于新网络端点,选择完全限定域名和端口。 
- 输入完全限定域名。 
- 对于端口类型,选择默认,并确认端口号为 - 443。
- 点击创建。 
gcloud
- 创建一个互联网 NEG,并将 - --network-endpoint-type设置为- internet-fqdn-port(可通过其访问外部后端的主机名和端口):- gcloud compute network-endpoint-groups create INTERNET_NEG_NAME \ --network-endpoint-type="internet-fqdn-port" \ --global
- 将您的端点添加到该 NEG。如果未指定端口,则端口选择默认为端口 - 80(HTTP) 或- 443(HTTPS、HTTP/2),具体取决于后端服务中配置的协议。请务必添加- --global标志。- gcloud compute network-endpoint-groups update INTERNET_NEG_NAME \ --add-endpoint="fqdn=FULLY_QUALIFIED_DOMAIN_NAME,port=443" \ --global
创建负载均衡器
控制台
选择负载均衡器类型
- 在 Google Cloud 控制台中,前往负载均衡页面。 
- 点击创建负载均衡器。
- 在负载均衡器的类型字段中,选择应用负载均衡器 (HTTP/HTTPS),然后点击下一步。
- 在公共或内部字段中,选择公共(外部),然后点击下一步。
- 在全球或单个区域部署字段中,选择最适合全球性工作负载,然后点击下一步。
- 在负载均衡器世代字段中,选择全球外部应用负载均衡器,然后点击下一步。
- 点击配置。
前端配置
- 点击前端配置。
- 输入名称。
- 如需创建 HTTPS 负载均衡器,您必须有一个 SSL 证书。我们建议您使用 Google 管理的证书。 - 验证以下选项是否配置了这些值。 - 属性 - 值(按照说明输入值或选择选项) - 协议 - HTTPS - 网络服务层 - 优质 - IP 版本 - IPv4 - IP 地址 - 选择预留外部 IP 地址步骤中创建的 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 地址 - 选择预留外部 IP 地址步骤中创建的 IP 地址。 - 端口 - 80 - 可选:HTTP keepalive 超时 - 输入 5 到 1200 秒的超时值。默认值为 610 秒。 
- 点击完成。 
后端配置
- 点击后端配置。
- 点击后端服务和后端存储桶。
- 点击创建后端服务。
- 输入名称。
- 对于后端类型,选择互联网网络端点组。
- 对于协议,选择将负载均衡器连接到互联网 NEG 时预期使用的协议。对于此示例,请选择 HTTP/2。
- 对于后端,在新建后端窗口中,选择上一步中创建的互联网 NEG。
- 点击创建。
检查并最终确定
- 点击检查并最终确定。
- 如果看起来都正确,请点击创建。
gcloud
- 创建后端服务:
  
  
  gcloud compute backend-services create BACKEND_SERVICE \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global
- 将互联网 NEG 添加到后端服务:gcloud compute backend-services add-backend BACKEND_SERVICE \ --network-endpoint-group=INTERNET_NEG_NAME \ --global-network-endpoint-group \ --global
- 创建网址映射以将传入的请求路由到此后端服务:
  gcloud compute url-maps create URL_MAP_NAME \ --default-service=BACKEND_SERVICE \ --global
- 仅在您想要创建 HTTPS 负载均衡器时执行此步骤。HTTP 负载均衡器不需要执行此步骤。 - 如需创建 HTTPS 负载均衡器,您必须拥有要在 HTTPS 目标代理中使用的 SSL 证书资源。您可以使用 Google 管理的 SSL 证书或自行管理的 SSL 证书创建 SSL 证书资源。我们建议您使用 Google 管理的证书,因为 Google Cloud 会自动获取、管理和续订这些证书。 - 如需创建 Google 管理的证书,您必须拥有一个网域。如果您没有网域,则可以使用自行管理的 SSL 证书进行测试。 如需创建 Google 管理的 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 \ --url-map=URL_MAP_NAME \ --global- 对于 HTTPS 负载均衡器,请创建 HTTPS 目标代理。该代理属于负载均衡器,保存用于 HTTPS 负载均衡的 SSL 证书,因此您还需要在此步骤中加载证书。 - gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \ --ssl-certificates=SSL_CERTIFICATE_NAME \ --url-map=URL_MAP_NAME \ --global- 请替换以下内容: - TARGET_HTTP_PROXY_NAME:目标 HTTP 代理的名称。
- TARGET_HTTPS_PROXY_NAME:目标 HTTPS 代理的名称。
- SSL_CERTIFICATE_NAME:SSL 证书的名称。
- URL_MAP_NAME:网址映射的名称。
 - --http-keep-alive-timeout-sec选项设置客户端 HTTP keepalive 超时。超时值必须介于 5 到 1200 秒之间。默认值为 610 秒。
- 创建转发规则以将传入请求路由到代理。 - 对于 HTTP 负载均衡器: - gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=LB_IP_ADDRESS_NAME \ --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=LB_IP_ADDRESS_NAME \ --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 地址。系统应该会将您定向到您在外部后端上运行的应用。
- 如果您创建了 HTTPS 负载均衡器,则可以转到 - https://IP_ADDRESS来测试您的负载均衡器。将- IP_ADDRESS替换为负载均衡器的 IP 地址。系统应该会将您定向到您在外部后端上运行的应用。
 - 如果此操作无效并且您使用的是 Google 管理的证书,请确认证书资源的状态为“有效”。如需了解详情,请参阅 Google 管理的 SSL 证书资源状态。 - 或者,您也可以通过本地机器的命令行使用 - curl。将- IP_ADDRESS替换为负载均衡器的 IPv4 地址。如果您使用的是 Google 管理的证书,请测试指向负载均衡器的 IP 地址的网域。例如:- curl -s 'https://www.example.com:443' --resolve www.example.com:443:IP_ADDRESS 
- 可选:如果您使用的是自定义网域,则可能需要等待更新后的 DNS 设置传播。然后,在网络浏览器中测试您的网域。 - 如需获取问题排查方面的帮助,请参阅排查外部后端和互联网 NEG 问题。 
其他配置
本部分对配置示例进行了扩展,以提供一些额外的替代配置选项。所有任务均为可选任务。您可以按任意顺序执行这些任务。
启用 Cloud CDN
启用 Cloud CDN 后,外部应用负载均衡器仅在存在 Cloud CDN 缓存未命中时向互联网 NEG 后端发送请求。
控制台
gcloud
- 如需在后端服务上启用 Cloud CDN,请使用以下命令:
  
  
  gcloud compute backend-services update BACKEND_SERVICE \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global \ --enable-cdn \ --cache-mode=CACHE_MODE通过将 CACHE_MODE替换为以下项之一来设置缓存模式:
使用自定义标头对请求进行身份验证
如需对发送到外部后端的请求进行身份验证,您可以设置自定义标头来指明请求来自 Google Cloud 负载均衡器。例如,您可以将外部后端配置为期望 HTTP 请求的 Host 标头具有特定值,还可以配置后端服务以将 Host 标头设置为该预期值。
按照以下步骤配置后端服务以向每个请求添加自定义 Host 标头。
控制台
- 在 Google Cloud 控制台中,转到负载均衡页面。 
- 点击要修改的负载均衡器的名称。 
- 点击修改。 
- 点击后端配置。 
- 对于使用互联网 NEG 后端的后端服务,请点击 修改。 
- 点击高级配置。 
- 对于自定义请求标头,点击添加标头: - 对于标头名称,输入 Host。
- 对于标头值,输入 FQDN_NEG_ENDPOINT。
 
- 对于标头名称,输入 
- 点击更新。 
- 如需查看更改,请点击查看并最终确定,然后点击更新。 
gcloud
- 使用以下命令将后端服务配置为向每个请求添加自定义 `Host` 标头。
  
  
  gcloud compute backend-services update BACKEND_SERVICE \ --custom-request-header "Host: HEADER_VALUE" \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global
确保您还配置了外部后端以预期 Host 标头,以便它可以对传入的请求进行身份验证。
如需了解有关自定义请求标头的一般信息,请参阅配置自定义请求标头。如需了解其他身份验证方法,请参阅对发送至外部后端的请求进行身份验证。
在外部应用负载均衡器上启用 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。
更新客户端 HTTP keepalive 超时
前面步骤中创建的负载均衡器已配置客户端 HTTP keepalive 超时的默认值。如需更新客户端 HTTP keepalive 超时,请按照以下说明操作。
控制台
- 在 Google Cloud 控制台中,前往负载均衡页面。 
- 点击要修改的负载均衡器的名称。
- 点击修改。
- 点击前端配置。
- 展开高级功能。对于 HTTP keepalive 超时,请输入超时值。
- 点击更新。
- 如需查看更改,请点击查看并最终确定,然后点击更新。
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 到 600 秒)。
后续步骤
- 如需检查 Cloud CDN 是否正在从缓存传送响应,请参阅查看日志。
- 如需了解哪些内容可缓存或不可缓存,请参阅缓存概览。
- 如需查找 Cloud CDN 的接入点,请参阅缓存位置。
- 清理负载均衡器设置。
- 如需了解如何停用 Cloud CDN,请参阅停用 Cloud CDN。