本文档介绍了如何将传统应用负载平衡器基础架构资源迁移到全球外部应用负载平衡器基础架构。
准备工作
确保您的设置符合以下前提条件。
设置默认项目
控制台
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
gcloud
gcloud config set project PROJECT_ID
将 PROJECT_ID
替换为您在本指南中使用的项目。
权限
如需按照本文档中的说明操作,您必须拥有在 Google Cloud 项目中创建 Compute Engine 虚拟机 (VM) 实例、防火墙规则、预留 IP 地址和 Cloud Storage 存储分区的权限。您必须是项目的 Owner 或 Editor,或者必须拥有以下 Compute Engine IAM 角色:
任务 | 所需角色 |
---|---|
创建实例 | Compute Instance Admin(Beta 版)角色 (roles/compute.instanceAdmin )
|
添加和移除防火墙规则 | Compute Security Admin 角色 (roles/compute.securityAdmin )
|
创建负载均衡器组件 | Compute Network Admin 角色 (roles/compute.networkAdmin )
|
创建项目(可选) | Project Creator 角色 (roles/resourcemanager.projectCreator )
|
创建 Cloud Storage 存储桶 | Storage Object Admin 角色 (roles/storage.objectAdmin )
|
如需了解详情,请参阅以下指南:
创建传统应用负载平衡器资源
在本文档中,您将创建以下传统应用负载平衡器资源,然后将其迁移到全球外部应用负载平衡器基础架构。
- 包含虚拟机的代管式实例组。
- Cloud Storage 存储桶。
- 一个 HTTP 传统版应用负载平衡器,其后端是代管式实例组和 Cloud Storage 存储桶。
创建托管式实例组
本部分介绍了如何使用运行 Apache 的 Linux 虚拟机创建代管式实例组。代管式实例组根据您指定的实例模板创建每个托管式实例。
创建实例模板
控制台
在 Google Cloud 控制台中,转到实例模板页面。
点击创建实例模板。
对于名称,输入
lb-backend-template
。对于区域,请选择
REGION
。在启动磁盘部分,确保将启动磁盘的映像设置为 Debian 映像,例如 Debian GNU/Linux 12 (bookworm)。本文中的说明使用仅 Debian 支持的命令,例如
apt-get
。点击高级选项。
点击网络,然后在网络标记字段中输入
allow-health-check
。点击管理,然后在启动脚本字段中输入以下脚本。
#! /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
运行 gcloud compute instance-templates create
命令以创建模板。
gcloud compute instance-templates create lb-backend-template \ --region=REGION \ --network=default \ --subnet=default \ --tags=allow-health-check \ --image-family=debian-12 \ --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'
创建代管式实例组
控制台
在 Google Cloud 控制台中,转到实例组页面。
点击创建实例组。
选择新的托管式实例组(无状态)。
对于名称,输入
lb-backend-example
。对于实例模板,请选择实例模板
lb-backend-template
。在位置下方,选择单个可用区。
对于区域,选择
REGION
。对于可用区,请选择
ZONE
。对于自动扩缩模式,选择“开启:在实例组中添加和移除实例”。
将实例数下限和实例数上限设置为
2
。在端口映射部分中,点击添加端口。
对于端口名称,请输入
http
。对于端口号,请输入80
。点击创建。
gcloud
运行 gcloud compute instance-groups managed create
命令,以基于模板创建代管式实例组。
gcloud compute instance-groups managed create lb-backend-example \ --template=lb-backend-template \ --size=2 --zone=ZONE
运行以下命令以向实例组添加已命名端口:
gcloud compute instance-groups set-named-ports lb-backend-example \ --named-ports http:80 \ --zone ZONE
配置防火墙规则
在本部分中,您将创建 fw-allow-health-check
防火墙规则,并使用目标标记 allow-health-check
来标识虚拟机。这是一种入站流量规则,允许来自 Google Cloud 健康检查系统(130.211.0.0/22
和 35.191.0.0/16
)的流量。
控制台
在 Google Cloud 控制台中,转到防火墙页面。
点击创建防火墙规则。
对于名称,输入
fw-allow-health-check
。对于网络,选择 default。
对于目标,选择 Specified target tags。
在目标标记字段中,输入
allow-health-check
。将来源过滤条件设置为 IPv4 范围。
将来源 IPv4 范围设置为
130.211.0.0/22
和35.191.0.0/16
。在协议和端口部分中,选择指定的协议和端口。
选中 TCP 复选框,然后输入端口号
80
。点击创建。
gcloud
运行 gcloud compute firewall-rules create
命令以创建防火墙规则。
gcloud compute firewall-rules create fw-allow-health-check \ --network=default \ --action=allow \ --direction=ingress \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=allow-health-check \ --rules=tcp:80
创建 Cloud Storage 存储桶
在本部分中,您将创建一个 Cloud Storage 存储桶以供负载平衡器访问。对于生产部署,我们建议您选择一个多区域存储桶,该存储桶会自动跨多个 Google Cloud 区域复制对象。这可以提高内容的可用性,并提高应用的故障容忍度。
控制台
在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
点击创建。
在为您的存储桶命名框中,输入
storage-backend-bucket
,然后点击继续。点击选择数据存储位置。
将位置类型设置为区域,然后指定
REGION
。点击创建。
可选:如果您看到“系统将禁止公开访问”对话框,请清除禁止公开访问此存储桶复选框,然后点击确认。
gcloud
运行 gcloud storage buckets create
命令以创建存储桶:
gcloud storage buckets create gs://storage-backend-bucket \ --default-storage-class=standard \ --location=REGION --uniform-bucket-level-access
将内容转移到 Cloud Storage 存储桶
如需在创建负载均衡器后测试存储桶,请将以下图片文件从公共 Cloud Storage 存储桶复制到您自己的 Cloud Storage 存储桶。
gcloud
点击
激活 Cloud Shell。在 Cloud Shell 中运行以下命令:
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://storage-backend-bucket/never-fetch/
在 Google Cloud 控制台中,点击存储桶详情页面上的刷新,以验证文件是否已成功复制。
将 Cloud Storage 存储桶设为可公开读取
当您将 Cloud Storage 存储桶设为可公开读取时,互联网上的任何人都可以列出和查看其对象,并查看其元数据(不包括 ACL)。请勿在您的公共存储桶中包含敏感信息。
为了降低意外泄露敏感信息的可能性,不要将公开对象和敏感数据存储在同一个存储桶中。
控制台
如需向所有用户授予查看存储桶中对象的权限,请按照以下步骤操作:
在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
点击
storage-backend-bucket
名称,然后点击权限标签页。点击授予访问权限。
在新的主账号框中,输入
allUsers
。在选择角色框中,依次选择 Cloud Storage > Storage Object Viewer。
点击保存。
点击允许公开访问。
gcloud
运行 gcloud storage buckets add-iam-policy-binding
命令,向所有用户授予查看存储分区中对象的权限:
gcloud storage buckets add-iam-policy-binding gs://storage-backend-bucket \ --member=allUsers \ --role=roles/storage.objectViewer
保留外部 IP 地址
现在您的实例已启动并正在运行,接下来请设置一个全局静态外部 IP 地址,以供客户用来访问您的负载均衡器。
控制台
在 Google Cloud 控制台中,转到外部 IP 地址页面。
如需预留 IPv4 地址,请点击预留外部静态 IP 地址。
对于名称,输入
lb-ipv4-1
。将网络服务层级设置为优质。
将 IP 版本设置为 IPv4。
将类型设置为全局。
点击预留。
gcloud
如需预留外部 IP 地址,请运行以下命令:
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
设置传统应用负载平衡器
在本部分中,您将在客户端和负载平衡器之间使用 HTTP(前端)。
控制台
开始配置
在 Google Cloud 控制台中,转到负载均衡页面。
- 点击创建负载均衡器。
- 在负载均衡器的类型字段中,选择应用负载均衡器 (HTTP/HTTPS),然后点击下一步。
- 在公共或内部字段中,选择公共(外部),然后点击下一步。
- 在全球或单个区域部署字段中,选择最适合全球性工作负载,然后点击下一步。
- 对于负载均衡器世代,选择传统应用负载均衡器,然后点击下一步。
- 点击配置。
基本配置
- 在负载平衡器名称字段中,输入
web-map-http
。 - 点击前端配置,配置以下字段,然后点击完成。
- 协议:HTTP。
- IP 版本:IPv4。
- IP 地址:
lb-ipv4-1
- 端口:
443
- 点击后端配置。
- 在后端服务和后端存储分区中,点击创建后端服务,然后执行以下操作:
- 配置以下字段:
- 名称:
web-backend-service
- 协议:HTTP
- 已命名的端口:http
- 名称:
- 在 Backends > New backend 部分,配置以下字段,然后点击 Done。
- 实例组:lb-backend-example
- 端口号:
80
- 对于健康检查,请点击创建健康检查,指定以下字段,然后点击保存。
- 名称:
http-basic-check
- 协议:HTTP
- 名称:
- 在日志记录部分,选中启用日志记录复选框。
- 点击创建。
- 配置以下字段:
- 点击确定。
- 在后端服务和后端存储桶中,点击创建后端存储桶,配置以下字段,然后点击创建。
- 后端存储桶名称:
cats
- Cloud Storage 存储桶:
storage-backend-bucket
- 后端存储桶名称:
- 点击确定。
- 点击主机和路径规则。
- 对于
cats
,在主机 2 字段中输入*
,在路径 2 字段中输入/never-fetch/*
。 - 点击检查并最终确定。
- 查看负载均衡器配置设置。
- 点击创建。
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 \ --enable-logging \ --logging-sample-rate=1.0 \ --enable-cdn \ --global
将您的实例组作为后端添加到后端服务。
gcloud compute backend-services add-backend web-backend-service \ --instance-group=lb-backend-example \ --instance-group-zone=ZONE \ --global
添加后端存储桶。
gcloud compute backend-buckets create cats \ --gcs-bucket-name=storage-backend-bucket
创建网址映射以将传入请求路由到后端服务和后端存储桶。
gcloud compute url-maps create web-map-http \ --default-service web-backend-service
gcloud compute url-maps add-path-matcher web-map-http \ --path-matcher-name=cats-path-matcher \ --default-backend-bucket=cats \ --new-hosts="*" \ --backend-bucket-path-rules="/never-fetch/*=cats"
创建目标 HTTP 代理以将请求路由到网址映射。
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=web-map-http
创建全局转发规则以将传入请求路由到代理。
gcloud compute forwarding-rules create web-map-http-forwarding-rule \ --load-balancing-scheme=EXTERNAL \ --address=lb-ipv4-1 \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
测试发送到实例的流量
现在负载均衡服务已运行,您可以将流量发送到转发规则并会发现流量被分散到不同的实例。
控制台
在 Google Cloud 控制台中,转到负载均衡页面。
点击
web-map-http
。在前端部分,记下负载均衡器的 IP:Port。
如需测试后端实例,请在网络浏览器的地址栏中输入
http://IP_ADDRESS
。您的浏览器会呈现一个页面,其中的内容显示提供该页面的实例的名称及其可用区(例如
Page served from: lb-backend-example-xxxx
)。如需测试后端存储桶,请在网络浏览器的地址栏中输入
http://IP_ADDRESS/never-fetch/three-cats.jpg
。您的浏览器会呈现图片。
迁移传统应用负载平衡器资源
在本部分中,您将后端服务、后端存储桶和转发规则迁移到全球外部应用负载平衡器基础架构。
迁移后端服务
为后端服务做好迁移准备。
gcloud beta compute backend-services update web-backend-service \ --external-managed-migration-state=PREPARE \ --global
等待一段时间(大约 6 分钟)。
将部分流量(例如 10%)发送到后端服务。
gcloud beta compute backend-services update web-backend-service \ --external-managed-migration-state=TEST_BY_PERCENTAGE \ --external-managed-migration-testing-percentage=10 \ --global
等待一段时间(大约 6 分钟)。
资源准备就绪后,会将 10% 的请求发送到全球外部应用负载平衡器基础架构,将 90% 的请求发送到传统应用负载平衡器基础架构。
访问后端服务。
在网络浏览器的地址栏中输入
http://IP_ADDRESS
。如果您看到Page served from: lb-backend-example-xxxx
消息,请运行以下命令来提高百分比。gcloud beta compute backend-services update web-backend-service \ --external-managed-migration-state=TEST_BY_PERCENTAGE \ --external-managed-migration-testing-percentage=50 \ --global
重复此过程,直到达到 100%。
可选:检查后端服务的日志。
完成测试,并将所有流量发送到后端服务。
gcloud beta compute backend-services update web-backend-service \ --external-managed-migration-state=TEST_ALL_TRAFFIC \ --global
可选:检查后端服务的日志。
将后端服务的架构更改为
EXTERNAL_MANAGED
。gcloud beta compute backend-services update web-backend-service \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global
等待一段时间(大约 6 分钟),以便后端服务完全迁移到全球外部应用负载平衡器基础架构。
可选:检查后端服务的日志。您会看到负载均衡方案为
EXTERNAL_MANAGED
。
迁移后端存储桶
为后端存储桶做好迁移准备。
gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \ --external-managed-backend-bucket-migration-state=PREPARE \ --global
等待一段时间(大约 6 分钟)。
将部分流量(例如 10%)发送到后端存储桶。
gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \ --external-managed-backend-bucket-migration-state=TEST_BY_PERCENTAGE \ --external-managed-backend-bucket-migration-testing-percentage=10 \ --global
等待一段时间(大约 6 分钟)。
资源准备就绪后,会将 10% 的请求发送到全球外部应用负载平衡器基础架构,将 90% 的请求发送到传统版应用负载平衡器基础架构。
访问后端存储桶。
在网络浏览器的地址栏中输入
http://IP_ADDRESS/never-fetch/three-cats.jpg
。如果您看到猫的图片,请运行以下命令来提高百分比。重复此过程,直到达到 100%。gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \ --external-managed-backend-bucket-migration-state=TEST_BY_PERCENTAGE \ --external-managed-backend-bucket-migration-testing-percentage=50 \ --global
可选:检查后端存储桶的日志。
完成测试,并将所有流量发送到后端存储桶。
gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \ --external-managed-backend-bucket-migration-state=TEST_ALL_TRAFFIC \ --global
可选:检查后端存储桶的日志。
迁移转发规则
将转发规则的方案更改为
EXTERNAL_MANAGED
。gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global
请等待一段时间(大约 6 分钟),以便转发规则完全迁移到全球外部应用负载平衡器基础架构。
可选:检查转发规则的日志。您会看到负载均衡方案为
EXTERNAL_MANAGED
。