Cloud CDN 利用 Google Cloud 全球外部应用负载均衡器来提供路由、健康检查和任播 IP 支持。全球外部应用负载均衡器可以有多个后端实例类型,并且您可以选择要为哪些后端(也称为源站)启用 Cloud CDN。
本设置指南介绍如何使用启用了 Cloud CDN 的 Compute Engine 代管式实例组后端创建全球外部应用负载平衡器。如需了解一般概念,请参阅外部应用负载均衡器概览。
如果您是传统版应用负载平衡器的现有用户,则在规划使用全球外部应用负载平衡器的新部署时,请务必查看迁移概览。
负载均衡器拓扑
对于 HTTPS 负载均衡器,您需要创建下图所示的配置。
对于 HTTP 负载均衡器,您需要创建下图所示的配置。
图中的事件顺序如下所示:
- 客户端将内容请求发送到转发规则中定义的外部 IPv4 地址。
负载平衡器检查是否可以从缓存传送请求。如果可以,负载均衡器会将请求的内容从缓存中传送出去。否则,继续进行处理。
对于 HTTPS 负载均衡器,转发规则会将请求定向到目标 HTTPS 代理。
对于 HTTP 负载均衡器,转发规则会将请求定向到目标 HTTP 代理。
目标代理使用网址映射中的规则确定单个后端服务接收所有请求。
负载均衡器确定后端服务只有一个实例组,并将请求定向到该组中的虚拟机实例。
该虚拟机提供用户请求的内容。
须知事项
在创建负载均衡器之前,请先完成以下步骤。
设置 SSL 证书资源
对于 HTTPS 负载均衡器,按照以下说明创建 SSL 证书资源:
我们建议您使用 Google 管理的证书。
此示例假设您已有一个名为 www-ssl-cert
的 SSL 证书资源。
设置权限
为完成本指南中的步骤,您必须拥有在项目中创建 Compute Engine 实例、防火墙规则和预留 IP 地址的权限。您必须具有 Project Owner 或 Project Editor 角色,或者必须具有以下 Compute Engine IAM 角色。
任务 | 所需角色 |
---|---|
创建实例 | Instance Admin |
添加和移除防火墙规则 | Security Admin |
创建负载均衡器组件 | Network Admin |
创建项目(可选) | Project Creator |
如需了解详情,请参阅以下指南:
配置网络和子网
如需创建示例网络和子网,请按照以下步骤操作。
控制台
在 Google Cloud 控制台中,进入 VPC 网络页面。
点击创建 VPC 网络。
输入网络的名称。
在子网创建模式字段中,选择自定义。
在新子网部分中,配置以下字段:
- 为子网提供名称。
- 选择区域。
- 在 IP 栈类型字段中,选择 IPv4(单栈)。
- 输入 IP 地址范围。这是子网的主要 IPv4 范围。
点击完成。
如需在其他区域中添加子网,请点击添加子网,然后重复上述步骤。
点击创建。
gcloud
创建自定义模式 VPC 网络:
gcloud compute networks create NETWORK \ --subnet-mode=custom
在该网络中,为后端创建子网:
gcloud compute networks subnets create SUBNET \ --network=NETWORK \ --stack-type=IPV4_ONLY \ --range=10.1.2.0/24 \ --region=REGION
替换以下内容:
NETWORK
:VPC 网络的名称。SUBNET
:子网的名称。REGION
:区域的名称。
创建代管式实例组
如需使用 Compute Engine 后端设置负载均衡器,您的虚拟机必须属于某个实例组。本指南介绍了如何创建由一组运行有 Apache 的 Linux 虚拟机组成的托管式实例组,然后设置负载均衡。 托管式实例组根据您指定的实例模板创建每个托管式实例。
这个托管式实例组提供运行外部 HTTP(S) 负载均衡器的后端服务器的虚拟机。出于演示目的,后端会传送其各自的主机名。
在创建托管式实例组之前,请先创建实例模板。
控制台
如需支持 IPv4 流量,请按以下步骤操作:
在 Google Cloud 控制台中,转到实例模板页面。
点击创建实例模板。
对于名称,输入
lb-backend-template
。确保启动磁盘已设置为 Debian 映像,例如 Debian GNU/Linux 10 (buster)。本文中的说明使用仅 Debian 支持的命令,例如
apt-get
。展开高级选项。
展开网络并配置以下字段:
- 对于网络标记,请输入
allow-health-check
。 - 在网络接口部分中,点击
- 网络:
NETWORK
- 子网:
SUBNET
- IPv4 流量:IPv4(单栈)
修改并进行以下更改:
- 网络:
- 点击完成。
- 对于网络标记,请输入
展开管理。 在启动脚本字段中,输入以下脚本:
#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2
点击创建。
gcloud
如需支持 IPv4 流量,请运行以下命令:
gcloud compute instance-templates create TEMPLATE_NAME \ --region=REGION \ --network=NETWORK \ --subnet=SUBNET \ --stack-type=IPV4_ONLY \ --tags=allow-health-check \ --image-family=debian-10 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'
Terraform
如需创建实例模板,请使用 google_compute_instance_template
资源。
创建代管式实例组并选择实例模板。
控制台
在 Google Cloud 控制台中,转到实例组页面。
点击创建实例组。
在左侧选择新建托管式实例组(无状态)。
对于名称,输入
lb-backend-example
。在位置下方,选择单个可用区。
对于区域,选择您的首选区域。
对于可用区,选择一个可用区。
在实例模板下方,选择实例模板
lb-backend-template
。对于自动扩缩模式,选择“开启:在实例组中添加和移除实例”。
将实例数下限设置为
2
,并将实例数上限设置为2
或更大。如需创建新的实例组,请点击创建。
gcloud
基于模板创建托管式实例组。
gcloud compute instance-groups managed create lb-backend-example \ --template=TEMPLATE_NAME --size=2 --zone=ZONE_A
Terraform
如需创建托管式实例组,请使用 google_compute_instance_group_manager
资源。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
向实例组添加已命名端口
对于您的实例组,定义一个 HTTP 服务并将端口名称映射到相关端口上。负载均衡服务会将流量转发到已命名的端口。 如需了解详情,请参阅已命名的端口。
控制台
在 Google Cloud 控制台中,转到实例组页面。
点击 lb-backend-example。
在实例组的概览页面上,点击
修改。在端口映射部分中,点击添加端口。
- 对于端口名称,请输入
http
。对于端口号,请输入80
。
- 对于端口名称,请输入
点击保存。
gcloud
使用 gcloud compute instance-groups
set-named-ports
命令。
gcloud compute instance-groups set-named-ports lb-backend-example \ --named-ports http:80 \ --zone ZONE_A
Terraform
named_port
属性包含在托管式实例组示例中。
配置防火墙规则
在此示例中,您将创建 fw-allow-health-check
防火墙规则。这是一种入站流量规则,允许来自 Google Cloud 健康检查系统(130.211.0.0/22
和 35.191.0.0/16
)的流量。此示例使用目标标记 allow-health-check
来标识虚拟机。
控制台
在 Google Cloud 控制台中,转到防火墙页面。
点击创建防火墙规则以创建防火墙规则。
对于名称,输入
fw-allow-health-check
。选择网络。
在目标下,选择指定的目标标记。
使用
allow-health-check
填充目标标记字段。将来源过滤条件设置为 IPv4 范围。
将来源 IPv4 范围设置为
130.211.0.0/22
和35.191.0.0/16
。在协议和端口下,选择指定的协议和端口。
选中 TCP 复选框,然后输入端口号
80
。点击创建。
gcloud
gcloud compute firewall-rules create fw-allow-health-check \ --network=NETWORK \ --action=allow \ --direction=ingress \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=allow-health-check \ --rules=tcp:80
Terraform
如需创建防火墙规则,请使用 google_compute_firewall
资源。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
保留外部 IP 地址
现在您的实例已启动并正在运行,接下来请设置一个全局静态外部 IP 地址,以供客户用来访问您的负载均衡器。
控制台
在 Google Cloud 控制台中,转到外部 IP 地址页面。
如需预留 IPv4 地址,请点击预留外部静态 IP 地址。
对于名称,输入
lb-ipv4-1
。将网络服务层级设置为优质。
将 IP 版本设置为 IPv4。
将类型设置为全局。
点击预留。
gcloud
gcloud compute addresses create lb-ipv4-1 \ --ip-version=IPV4 \ --network-tier=PREMIUM \ --global
请记下预留的 IPv4 地址:
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
Terraform
如需预留 IP 地址,请使用 google_compute_global_address
资源。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
设置负载均衡器
在此示例中,您将在客户端和负载均衡器之间使用 HTTPS(前端)。对于 HTTPS,您需要一个或多个 SSL 证书资源来配置代理。我们建议您使用 Google 管理的证书。
即使您在前端使用 HTTPS,也可以在后端使用 HTTP。Google 会自动对 Google Front End (GFE) 前端与 Google Cloud VPC 网络中的后端之间的流量进行加密。
控制台
开始配置
在 Google Cloud 控制台中,转到负载均衡页面。
- 点击创建负载均衡器。
- 在负载均衡器的类型字段中,选择应用负载均衡器 (HTTP/HTTPS),然后点击下一步。
- 在公共或内部字段中,选择公共(外部),然后点击下一步。
- 在全球或单个区域部署字段中,选择最适合全球性工作负载,然后点击下一步。
- 对于负载均衡器世代,选择传统应用负载均衡器,然后点击下一步。
- 点击配置。
基本配置
在负载均衡器名称部分,输入 web-map-https
或 web-map-http
等内容。
前端配置
- 点击前端配置。
- 将协议设置为 HTTPS。
- 对于 IPv4 流量,选择
IPv4
。将 IP 地址设置为您之前创建的lb-ipv4-1
。 - 将端口设置为 443。
- 点击证书,然后选择您的主要 SSL 证书。
- 可选:创建 SSL 政策:
- 在 SSL 政策列表中,选择创建政策。
- 将 SSL 政策的名称设置为
my-ssl-policy
。 - 对于最低的 TLS 版本,请选择 TLS 1.0。
- 对于配置文件,请选择新型。您将看到已启用的功能和已停用的功能。
- 点击保存。
-
可选:选中启用从 HTTP 到 HTTPS 的重定向复选框以启用重定向。
启用此复选框会创建一个额外的部分 HTTP 负载均衡器,它使用与 HTTPS 负载均衡器相同的 IP 地址,并将传入 HTTP 请求重定向到负载均衡器的 HTTPS 前端。
只有在选择 HTTPS 协议并使用预留的 IP 地址时,才能选中此复选框。
- 点击完成。
后端配置
- 点击后端配置。
- 在创建或选择后端服务和后端存储桶下,选择后端服务 > 创建后端服务。
- 添加后端服务的名称,例如
web-backend-service
。 - 在协议下,选择 HTTP。
- 在已命名端口中输入
http
。 - 在后端 > 新建后端 > 实例组中,选择实例组
lb-backend-example
。 - 在端口号中输入
80
。 - 保留其他默认设置。
- 在健康检查下,选择创建健康检查,然后添加健康检查的名称,例如
http-basic-check
。 - 将协议设置为 HTTP,然后点击保存。
-
可选:配置默认的后端安全政策。默认安全政策会限制超出用户配置阈值的流量。如需详细了解默认安全政策,请参阅速率限制概览。
- 如需停用 Google Cloud Armor 默认安全政策,请在后端安全政策列表菜单中选择
None
。 - 在安全部分中,选择默认安全政策。
- 在政策名称字段中,接受自动生成的名称或输入安全政策的名称。
- 在请求数字段中,接受默认请求数,或输入介于
1
和10,000
之间的整数。 - 在间隔字段中,选择间隔。
- 在对密钥实施字段中,选择以下值之一:全部、IP 地址或 X-Forwarded-For IP 地址。如需详细了解这些选项,请参阅确定客户端以进行速率限制。
- 如需停用 Google Cloud Armor 默认安全政策,请在后端安全政策列表菜单中选择
- 选择启用 Cloud CDN。
- 可选:修改缓存模式和 TTL 设置。
- 保留其他默认设置。
- 点击创建。
宿主机和路径规则
对于主机和路径规则,保留默认设置。
检查并最终确定
- 点击检查并最终确定。
- 查看负载均衡器配置设置。
- 可选:点击等效代码以查看将用于创建负载均衡器的 REST API 请求。
- 点击创建。
等待负载均衡器创建完毕。
如果您已创建 HTTPS 负载均衡器并选中了启用从 HTTP 到 HTTPS 的重定向复选框,您还将看到使用 -redirect 后缀创建的 HTTP 负载均衡器。
- 点击负载均衡器的名称。
- 在负载均衡器详情屏幕上,记下负载均衡器的 IP:端口。
gcloud
- 创建健康检查。
gcloud compute health-checks create http http-basic-check \ --port 80
- 创建后端服务。
gcloud compute backend-services create web-backend-service \ --load-balancing-scheme=EXTERNAL \ --protocol=HTTP \ --port-name=http \ --health-checks=http-basic-check \ --global
- 将您的实例组作为后端添加到后端服务。
gcloud beta compute backend-services add-backend web-backend-service \ --instance-group=lb-backend-example \ --instance-group-zone=ZONE_A \ --global
- 对于 HTTP,请创建网址映射以将传入请求路由到默认后端服务。
gcloud beta compute url-maps create web-map-http \ --default-service web-backend-service
- 对于 HTTPS,请创建网址映射以将传入请求路由到默认后端服务。
gcloud beta compute url-maps create web-map-https \ --default-service web-backend-service
设置 HTTPS 前端
对于 HTTP 负载均衡器,请跳过此部分。
- 对于 HTTPS,请按照以下部分所述创建全球 SSL 证书资源(如果您尚未创建):
对于 HTTPS,请创建目标 HTTPS 代理以将请求路由到网址映射。该代理属于负载均衡器,包含用于 HTTPS 负载均衡器的 SSL 证书,因此您还需要在此步骤中加载证书。
gcloud compute target-https-proxies create https-lb-proxy \ --url-map=web-map-https \ --ssl-certificates=www-ssl-cert
- 对于 HTTPS,请创建全球转发规则以将传入请求路由到代理。
gcloud compute forwarding-rules create https-content-rule \ --load-balancing-scheme=EXTERNAL \ --network-tier=PREMIUM \ --address=lb-ipv4-1 \ --global \ --target-https-proxy=https-lb-proxy \ --ports=443
- 可选:对于 HTTPS,请创建全局 SSL 政策并将其附加到 HTTPS 代理。
如需创建全局 SSL 政策,请执行以下操作: 如需将 SSL 政策附加到全球目标 HTTPS 代理,请执行以下操作:gcloud compute ssl-policies create my-ssl-policy \ --profile MODERN \ --min-tls-version 1.0
gcloud compute target-https-proxies update https-lb-proxy \ --ssl-policy my-ssl-policy
设置 HTTP 前端
对于 HTTPS 负载均衡器,请跳过此部分。
- 对于 HTTP,请创建一个目标 HTTP 代理,将请求路由到您的网址映射。
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=web-map-http
- 对于 HTTP,请创建全球转发规则以将传入请求路由到代理。
gcloud compute forwarding-rules create http-content-rule \ --load-balancing-scheme=EXTERNAL \ --address=lb-ipv4-1 \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
Terraform
-
如需创建健康检查,请使用
google_compute_health_check
资源。 -
如需创建后端服务,请使用
google_compute_backend_service
资源。此示例使用
load_balancing_scheme="EXTERNAL_MANAGED"
,这将设置具有高级流量管理功能的全球外部应用负载均衡器。如需创建传统版应用负载均衡器,请确保在运行脚本之前将load_balancing_scheme
更改为EXTERNAL
。 -
如需创建网址映射,请使用
google_compute_url_map
资源。 -
如需创建目标 HTTP 代理,请使用
google_compute_target_http_proxy
资源。 -
如需创建转发规则,请使用
google_compute_global_forwarding_rule
资源。此示例使用
load_balancing_scheme="EXTERNAL_MANAGED"
,这将设置具有高级流量管理功能的全球外部应用负载均衡器。如需创建传统版应用负载均衡器,请确保在运行脚本之前将load_balancing_scheme
更改为EXTERNAL
。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
启用 Cloud CDN
如果您在创建后端服务时尚未启用 Cloud CDN,请立即通过更新后端服务执行此操作。
gcloud compute backend-services update web-backend-service \ --enable-cdn \ --cache-mode=CACHE_MODE
通过将 CACHE_MODE 替换为以下项之一来设置缓存模式:
CACHE_All_STATIC
:自动缓存静态内容。USE_ORIGIN_HEADERS
:要求源站设置有效缓存标头以缓存内容。FORCE_CACHE_ALL
:缓存所有内容,并忽略Cache-Control
响应标头中的任何private
、no-store
或no-cache
指令。
将您的网域连接到负载均衡器
创建负载均衡器后,请记好与负载均衡器关联的 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 提供商,请参阅添加、修改和删除记录。
测试发送到实例的流量
现在负载均衡服务已运行,您可以将流量发送到转发规则并会发现流量被分散到不同的实例。
控制台
在 Google Cloud 控制台中,转到负载均衡页面。
- 点击您刚刚创建的负载均衡器。
在后端部分中,确认虚拟机运行状况良好。运行状况良好列应该会填充相应信息,指示两个虚拟机运行状况都良好 (
2/2
)。否则,请先尝试重新加载页面。Google Cloud 控制台可能需要一些时间才能指示虚拟机运行状况良好。如果几分钟后后端似乎仍运行状况不佳,请检查防火墙配置以及分配给后端虚拟机的网络标记。- 对于 HTTPS,如果您要使用 Google 管理的证书,请确认证书资源的状态为“有效”。如需了解详情,请参阅 Google 管理的 SSL 证书资源状态。
- 在 Google Cloud 控制台显示后端实例运行状况良好后,您可使用网络浏览器转到
https://IP_ADDRESS
(或http://IP_ADDRESS
),来测试您的负载均衡器。将IP_ADDRESS
替换为负载均衡器的 IP 地址。 - 如果您使用自签名证书来测试 HTTPS,您的浏览器将显示警告。您必须明确指示浏览器接受自签名证书。
- 您的浏览器应该会呈现一个页面,其中的内容显示提供该页面的实例的名称以及其可用区(例如,
Page served from: lb-backend-example-xxxx
)。如果您的浏览器未呈现此页面,请查看本指南中的配置设置。
gcloud
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
几分钟后,您可以通过运行以下 curl
命令来测试设置。
curl http://IP_ADDRESS
-或-
curl https://HOSTNAME
停用 Cloud CDN
控制台
为单个后端服务停用 Cloud CDN
在 Google Cloud 控制台中,转到 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,则大部分或所有缓存的内容仍可能会被缓存。为了防止内容通过缓存传送,您必须使该内容失效。
后续步骤
- 如需了解缓存的内容,请参阅缓存概览。
- 如需在 GKE 中使用 Cloud CDN,请参阅 Ingress 功能。
- 如需检查 Cloud CDN 是否正在从缓存传送响应,请参阅查看日志。
- 如需了解常见问题及解决方案,请参阅问题排查。
- 如需了解 Cloud CDN 的工作原理,请参阅 Cloud CDN 概览。