使用外部后端设置传统应用负载均衡器

本指南通过一个示例介绍了将外部后端(有时称为“自定义源站”)与全球外部应用负载均衡器搭配使用的基础知识。外部后端是 Google Cloud 外部的端点。将外部后端与全球外部应用负载均衡器搭配使用时,您可以使用 Cloud CDN 缓存来提高性能。

本指南介绍了如何通过启用 Cloud CDN 的后端服务来配置全球外部应用负载均衡器,并将请求代理到外部后端服务器。

在按照本指南进行操作之前,请先熟悉互联网 NEG 概览文档,包括限制

以下架构图显示了具有外部后端的全球外部应用负载均衡器前端。

具有外部后端的全球外部应用负载均衡器。
图 1. 具有外部后端的全球外部应用负载均衡器(点击可放大)。

权限

如需遵循本指南,您需要创建互联网 NEG 并在项目中创建或修改外部应用负载均衡器。您应该是 Project Owner 或 Project Editorroles/ownerroles/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 地址,请使用 dignslookup 等工具查询 _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 地址,供客户端用来访问您的应用。

控制台

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

    转到“外部 IP 地址”

  2. 点击保留预留静态地址以预留 IPv4 地址。

  3. 输入名称。

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

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

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

  7. 点击预留

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

控制台

  1. 在 Google Cloud 控制台中,进入网络端点组页面。

    进入“网络端点组”

  2. 点击创建网络端点组

  3. 输入名称。

  4. 对于网络端点组类型,选择网络端点组(互联网)

  5. 对于默认端口,输入 443

  6. 对于新网络端点,选择完全限定域名和端口

  7. 输入完全限定域名

  8. 对于端口类型,选择默认,并确认端口号443

  9. 点击创建

gcloud

  1. 创建一个互联网 NEG,并将 --network-endpoint-type 设置为 internet-fqdn-port(可通过其访问外部后端的主机名和端口):

    gcloud compute network-endpoint-groups create INTERNET_NEG_NAME \
        --network-endpoint-type="internet-fqdn-port" \
        --global
    
  2. 将您的端点添加到该 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
    

创建负载均衡器

控制台

开始配置

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

    进入“负载均衡”

  2. 点击创建负载均衡器
  3. 应用负载均衡器 (HTTP/S) 卡片上,点击开始配置
  4. 对于面向互联网或仅限内部,选择从互联网到我的虚拟机
  5. 对于全球或区域级,选择经典版应用负载均衡器
  6. 点击继续

前端配置

  1. 点击前端配置
  2. 输入名称。
  3. 如需创建 HTTPS 负载均衡器,您必须有一个 SSL 证书。我们建议您使用 Google 管理的证书。

    验证以下选项是否配置了这些值。

    属性 值(按照说明输入值或选择选项)
    协议 HTTPS
    网络服务层级 优质
    IP 版本 IPv4
    IP 地址 选择预留外部 IP 地址步骤中创建的 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 地址时,才能选中此复选框。

    如果您想在不设置 SSL 证书资源(或 Google 管理的证书所需要的网域)的情况下测试此过程,则可以设置 HTTP 负载均衡器。

    如需创建 HTTP 负载均衡器,请验证以下选项已使用这些值进行配置:

    属性 值(按照说明输入值或选择选项)
    协议 HTTP
    网络服务层级 优质
    IP 版本 IPv4
    IP 地址 选择预留外部 IP 地址步骤中创建的 IP 地址。
    端口 80
  4. 点击完成

后端配置

  1. 点击后端配置
  2. 点击后端服务和后端存储桶
  3. 点击创建后端服务
  4. 输入名称。
  5. 对于后端类型,选择互联网网络端点组
  6. 对于协议,选择将负载均衡器连接到互联网 NEG 时预期使用的协议。对于此示例,请选择 HTTP/2
  7. 对于后端,在新建后端窗口中,选择上一步中创建的互联网 NEG。
  8. 点击创建

检查并最终确定

  1. 点击检查并最终确定
  2. 如果看起来都正确,请点击创建

gcloud

  1. 创建后端服务:
      gcloud compute backend-services create BACKEND_SERVICE \
          --global
      
  2. 将互联网 NEG 添加到后端服务:
      gcloud compute backend-services add-backend BACKEND_SERVICE \
          --network-endpoint-group=INTERNET_NEG_NAME \
          --global-network-endpoint-group \
          --global
       
  3. 创建网址映射以将传入请求路由到相应后端服务:
      gcloud compute url-maps create URL_MAP_NAME \
          --default-service=BACKEND_SERVICE \
          --global
      
  4. 仅在您想要创建 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
      
    如需创建自行管理的 SSL 证书资源,请运行以下命令:
      gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
          --certificate CRT_FILE_PATH \
          --private-key KEY_FILE_PATH
      
  5. 创建目标 HTTP(S) 代理以将请求路由到您的网址映射:

    对于 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:网址映射的名称。
  6. 创建转发规则以将传入请求路由到代理。

    对于 HTTP 负载均衡器:

      gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \
          --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 \
          --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.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. 将流量发送到负载均衡器。

    • 如果您创建了 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
    

  5. 可选:如果您使用的是自定义网域,则可能需要等待更新后的 DNS 设置传播。然后,在网络浏览器中测试您的网域。

    如需获取问题排查方面的帮助,请参阅排查外部后端和互联网 NEG 问题

其他配置

本部分对配置示例进行了扩展,以提供一些额外的替代配置选项。所有任务均为可选任务。您可以按任意顺序执行这些任务。

启用 Cloud CDN

启用 Cloud CDN 后,外部应用负载均衡器仅在存在 Cloud CDN 缓存未命中时向互联网 NEG 后端发送请求。

控制台

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

    转到“负载均衡”

  2. 点击要修改的负载均衡器的名称。

  3. 点击修改

  4. 点击后端配置

  5. 对于使用互联网 NEG 后端的后端服务,请点击 修改

  6. 选择启用 Cloud CDN

  7. 可选:修改缓存模式TTL 设置。

  8. 点击更新

  9. 如需查看更改,请点击查看并最终确定,然后点击更新

gcloud

  • 如需在后端服务上启用 Cloud CDN,请使用以下命令:
      gcloud compute backend-services update BACKEND_SERVICE \
          --global \
          --enable-cdn \
          --cache-mode=CACHE_MODE
      

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

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

使用自定义标头对请求进行身份验证

如需对发送到外部后端的请求进行身份验证,您可以设置自定义标头来指明请求来自 Google Cloud 负载均衡器。例如,您可以将外部后端配置为期望 HTTP 请求的 Host 标头具有特定值,还可以配置后端服务以将 Host 标头设置为该预期值。

按照以下步骤配置后端服务以向每个请求添加自定义 Host 标头。

控制台

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

    转到“负载均衡”

  2. 点击要修改的负载均衡器的名称。

  3. 点击修改

  4. 点击后端配置

  5. 对于使用互联网 NEG 后端的后端服务,请点击 修改

  6. 点击高级配置

  7. 对于自定义请求标头,点击添加标头

    1. 对于标头名称,输入 Host
    2. 对于标头值,输入 FQDN_NEG_ENDPOINT
  8. 点击更新

  9. 如需查看更改,请点击查看并最终确定,然后点击更新

gcloud

  • 使用以下命令将后端服务配置为向每个请求添加自定义 `Host` 标头。
      gcloud compute backend-services update BACKEND_SERVICE \
          --custom-request-header "Host: HEADER_VALUE" \
          --global
      

确保您还配置了外部后端以预期 Host 标头,以便它可以对传入的请求进行身份验证。

如需了解有关自定义请求标头的一般信息,请参阅配置自定义请求标头。如需了解其他身份验证方法,请参阅对发送至外部后端的请求进行身份验证

在外部应用负载均衡器上启用 IAP

您可以将 IAP 配置为启用或停用(默认)。如果设置为启用,您必须为 oauth2-client-idoauth2-client-secret 提供值。

如需启用 IAP,请更新后端服务以添加具有 oauth2-client-idoauth2-client-secret--iap=enabled 标志。

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --iap=enabled,oauth2-client-id=ID,oauth2-client-secret=SECRET \
    --global

后续步骤