本指南通过一个示例介绍了在外部 HTTP(S) 负载均衡器中使用外部后端(有时称为“自定义源站”)的基础知识。外部后端是 Google Cloud 外部的端点。将外部后端与外部 HTTP(S) 负载均衡器搭配使用时,您可以使用 Cloud CDN 缓存来提高性能。
具有高级流量管理功能的全球外部 HTTP(S) 负载均衡器不支持外部后端。您只能将外部后端与全球外部 HTTP(S) 负载均衡器(经典版)搭配使用。
本指南逐步说明如何使用启用了 Cloud CDN 的后端服务(作为位于 backend.example.com
的外部后端服务器的代理)来配置全球外部 HTTP(S) 负载均衡器。
在此示例中,负载均衡器接受来自客户端的 HTTPS 请求,并将这些请求作为 HTTP/2 代理到外部后端。此示例假定外部后端支持 HTTP/2。
其他选项包括:将负载均衡器配置为接受 HTTP 或 HTTP/2 请求,以及在将请求代理到外部后端时使用 HTTPS。
本指南假定您已经设置负载均衡器,并且要添加新的外部后端。
示例架构如下所示:
在该图中,www.example.com
有一个 IP 地址为 120.1.1.1
的负载均衡器前端。如果存在缓存未命中,则系统会通过 HTTP/2 从外部后端提取用户对 /cart/id/1223515
的请求。所有其他传入流量都会根据网址映射定向到使用 Compute Engine 虚拟机的 Google Cloud 后端服务或定向到后端存储分区。
准备工作
在按照本指南进行操作之前,请先熟悉以下内容:
权限
如需遵循本指南,您需要创建互联网 NEG 并在项目中创建或修改外部 HTTP(S) 负载均衡器。您应该是 Project Owner 或 Project Editor,或者应同时具有下列 Compute Engine IAM 角色:
任务 | 所需角色 |
---|---|
创建和修改负载均衡器组件 | Network Admin |
创建和修改 NEG | Compute Instance Admin |
配置具有外部后端的负载均衡器
本指南介绍了如何配置和测试互联网网络端点组。
设置概览
设置互联网 NEG 包括以下操作:
- 在互联网 NEG 中定义互联网端点。
- 将互联网 NEG 作为后端添加到后端服务。
- 通过配置外部 HTTP(S) 负载均衡器的网址映射来定义要映射到此后端服务的用户流量。
- 将必要的 IP 范围列入许可名单。
本示例会创建以下资源:
- 具有
120.1.1.1
IP 地址的转发规则将传入的请求定向到目标代理。 - 转发规则的
networkTier
必须是PREMIUM
。 - 目标 HTTP 代理根据网址映射检查每个请求以确定请求的相应后端服务。
- 对于外部后端,目标代理必须是
TargetHttpProxy
或TargetHttpsProxy
。本示例使用TargetHttpsProxy
。 - 在后端服务上启用 Cloud CDN(可选),将允许从 Cloud CDN 缓存进行响应缓存和传送。
- 此示例包含用户定义的请求标头,这在外部后端需要特定值作为 HTTP 请求的
Host
标头时是必需的。
设置如下所示:
创建 NEG 和互联网端点
控制台
- 在 Google Cloud Console 中,转到网络端点组页面。
- 点击创建网络端点组。
- 输入网络端点组的名称:
example-fqdn-neg
。 - 对于网络端点组类型,选择网络端点组(互联网)。
- 对于默认端口,输入
443
。 - 对于新网络端点,选择完全限定域名和端口。
- 对于 FQDN,输入
backend.example.com
。 - 对于端口类型,选择默认,并确认端口号为
443
。 - 点击创建。
gcloud
创建一个互联网 NEG,并将
--network-endpoint-type
设置为internet-fqdn-port
(可通过其访问外部后端的主机名和端口):gcloud compute network-endpoint-groups create example-fqdn-neg \ --network-endpoint-type="internet-fqdn-port" --global
将您的端点添加到该 NEG。如果未指定端口,则端口选择默认为端口
80
(HTTP) 或443
(HTTPS、HTTP/2),具体取决于后端服务中配置的协议。请务必添加--global
标志。gcloud compute network-endpoint-groups update example-fqdn-neg \ --add-endpoint="fqdn=backend.example.com,port=443" \ --global
列出所创建的互联网 NEG:
gcloud compute network-endpoint-groups list --global
输出:
NAME LOCATION ENDPOINT_TYPE SIZE example-fqdn-neg global INTERNET_FQDN_PORT 1
列出该 NEG 内的端点:
gcloud compute network-endpoint-groups list-network-endpoints example-fqdn-neg \ --global
输出:
INSTANCE IP_ADDRESS PORT FQDN backend.example.com
将外部后端添加到负载均衡器
以下示例会更新现有负载均衡器。
在现有负载均衡器中,默认服务是 Google Cloud 服务。此示例会通过添加路径匹配器以向与互联网 NEG 关联的 images
后端服务发送对 cart/id/1223515
的所有请求,来修改现有网址映射。
控制台
创建后端服务并添加互联网 NEG
- 在 Google Cloud Console 中,转到负载均衡页面。
- 如需将后端服务添加到现有负载均衡器,请选择您的外部 HTTP(S) 负载均衡器,点击菜单 ,然后选择修改。
- 点击后端配置。
- 在创建或选择后端服务和后端存储分区下拉菜单中,选择后端服务 > 创建后端服务。
- 将后端服务的名称设置为
images
。 - 对于后端类型,选择互联网网络端点组。
- 选择您要用于从负载均衡器连接到互联网 NEG 的协议。对于此示例,选择 HTTP/2。
- 在新建后端 > 互联网网络端点组下,选择
example-fqdn-neg
,然后点击完成。 - 选择启用 Cloud CDN。
- (可选)修改缓存模式和 TTL 设置。
- 在高级配置的自定义请求标头下,点击添加标头。
- 对于标头名称,输入
Host
。 - 对于标头值,输入
backend.example.com
。
- 对于标头名称,输入
- 点击创建。
- 保持窗口打开以继续。
将后端服务连接到现有网址映射
- 点击主机和路径规则。
- 右侧列的第一行或前几行包含 Google Cloud 服务,其中一行已填充了主机和路径的默认规则
Any unmatched (default)
。 - 确保在右侧列中选择含有
images
的行。如果此行不存在,请点击添加主机和路径规则,然后选择images
。按如下所示填充其他字段:- 在主机中输入
*
。 - 在路径中输入
/cart/id/1223515
。
- 在主机中输入
检查并最终确定
- 点击检查并最终确定。
- 将您的设置与您之前打算创建的内容进行比较。
- 如果看起来都正确,请点击创建以创建您的外部 HTTP(S) 负载均衡器。
gcloud
为 NEG 创建新的后端服务:
gcloud compute backend-services create images \ --global \ --enable-cdn \ --cache-mode=CACHE_MODE --protocol=HTTP2
通过将 CACHE_MODE 替换为以下项之一来设置缓存模式:
将此后端服务配置为向请求添加自定义请求标头
Host: backend.example.com
。gcloud compute backend-services update images \ --custom-request-header "Host: backend.example.com" --global
使用
backend-services add-backend
命令向此后端服务添加互联网 NEG。gcloud compute backend-services add-backend images \ --network-endpoint-group "example-fqdn-neg" \ --global-network-endpoint-group \ --global
通过创建新的匹配规则将请求定向到该后端,从而将此新后端服务连接到负载均衡器的网址映射。
gcloud compute url-maps add-path-matcher EXAMPLE_URL_MAP \ --default-service=GCP_SERVICE_EXAMPLE \ --path-matcher-name=CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE \ --backend-service-path-rules=/CART/ID/1223515=IMAGES
替换以下内容:
EXAMPLE_URL_MAP
:现有网址映射的名称GCP_SERVICE_EXAMPLE
:现有默认后端服务的名称CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE
:此新路径规则的名称/CART/ID/1223515
:路径IMAGES
:连接互联网 NEG 的新后端服务的名称
将必要的 IP 范围列入许可名单
如需允许外部 HTTP(S) 负载均衡器将请求发送到您的互联网 NEG,您必须使用 dig
或 nslookup
等工具查询 _cloud-eoips.googleusercontent.com
DNS TXT 记录。
例如,运行以下 dig
命令:
dig TXT _cloud-eoips.googleusercontent.com | grep -Eo 'ip4:[^ ]+' | cut -d':' -f2
输出包含两个 IP 范围,如下所示:
34.96.0.0/20
34.127.192.0/18
请记下 IP 范围并确保您的防火墙或云访问控制列表 (ACL) 允许使用这些范围。
如需了解详情,请参阅对请求进行身份验证。
将您的网域连接到负载均衡器
创建负载均衡器后,请记好与负载均衡器关联的 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
如果您使用的是 Google Domains,请参阅 Google Domains 帮助页面了解详情。
测试外部 HTTP(S) 负载均衡器
现在您已经配置了负载均衡器,接下来可以开始向负载均衡器的 IP 地址发送流量了。如果您配置了网域,则还可以将流量发送到该域名。不过,DNS 传播可能需要一些时间才能完成,因此您可以先使用 IP 地址进行测试。
- 转到 Google Cloud Console 中的“负载均衡”页面。
转到“负载均衡”页面 - 点击刚刚创建的负载均衡器。
- 记下负载均衡器的 IP 地址。
如果您创建了 HTTP 负载均衡器,则可以使用网络浏览器转到
http://IP_ADDRESS
来测试您的负载均衡器。将IP_ADDRESS
替换为负载均衡器的 IP 地址。系统会将您定向到helloworld
服务首页。如果您创建了 HTTPS 负载均衡器,则可以使用网络浏览器转到
https://IP_ADDRESS
来测试您的负载均衡器。将IP_ADDRESS
替换为负载均衡器的 IP 地址。系统会将您定向到helloworld
服务首页。如果此操作无效并且您使用的是 Google 管理的证书,请确认证书资源的状态为“有效”。如需了解详情,请参阅 Google 管理的 SSL 证书资源状态。
或者,您也可以通过本地机器的命令行使用 curl。将 IP_ADDRESS 替换为负载均衡器的 IPv4 地址。
如果您使用的是 Google 管理的证书,请测试指向负载均衡器的 IP 地址的网域。例如:
curl -s 'https://backend.example.com:443' --resolve backend.example.com:443:IP_ADDRESS
(可选)如果您使用的是自定义网域,则可能需要等待更新后的 DNS 设置传播。然后,在网络浏览器中测试您的网域(例如
backend.example.com
)。如需获取问题排查方面的帮助,请参阅排查外部后端和互联网 NEG 问题。
停用 Cloud CDN
控制台
为单个后端服务停用 Cloud CDN
- 在 Google Cloud Console 中,转到 Cloud CDN 页面。
- 在源站所在行的右侧,点击菜单 ,然后选择修改。
- 取消选中您想要停止使用 Cloud CDN 的所有后端服务的复选框。
- 点击更新。
为某个源站的所有后端服务移除 Cloud CDN
- 在 Google Cloud 控制台中,转到 Cloud CDN 页面。
- 在源站所在行的右侧,点击菜单 ,然后选择移除。
- 点击移除进行确认。
gcloud
gcloud compute backend-services update BACKEND_SERVICE_NAME \ --no-enable-cdn
停用 Cloud CDN 后,系统不会使缓存失效或完全清除缓存。如果您关闭 Cloud CDN,然后重新开启 Cloud CDN,则大部分或所有缓存的内容仍可能会被缓存。为了防止缓存使用内容,您必须使该内容失效。