1. 简介
本指南说明如何将现有网络负载平衡器从目标池后端转换为区域后端服务。
学习内容
- 了解区域性后端服务的优势
- 创建带有目标池的网络负载平衡器
- 执行目标池验证
- 使用非托管实例组创建区域后端服务
- 执行从目标池到后端服务的迁移
- 执行后端服务验证
所需条件
- 负载平衡器使用经验
2. 网络负载均衡的区域后端服务概览
借助网络负载均衡,Google Cloud 客户可以利用强大的工具在 Google Cloud 区域中的虚拟机之间分配外部流量。为了让客户更轻松地管理入站流量并控制负载平衡器的行为,我们最近为网络负载平衡添加了对后端服务的支持。这可为客户的部署提供更高的规模、速度、性能和弹性,而且易于管理。
我们现在支持使用网络负载均衡的后端服务,这与之前的目标池方法相比有了显著改进。后端服务定义了负载平衡器如何将入站流量分配给所连接的后端,并可对负载平衡器的行为进行精细控制。
3. 区域性后端服务的优势
选择区域性后端服务作为负载平衡器可为您的环境带来多项优势。

区域性后端服务开箱即用,可提供以下功能:
- 通过统一的健康检查实现高保真健康检查 - 借助区域后端服务,您现在可以充分利用负载均衡健康检查功能,摆脱旧版 HTTP 健康检查的限制。出于合规性考虑,支持自定义请求和响应字符串或 HTTPS 的 TCP 健康检查是网络负载均衡客户的常见需求。
- 通过故障切换组提高弹性 - 借助故障切换组,您可以将一个实例组指定为主实例组,将另一个实例组指定为辅助实例组,并在活跃组中实例的健康率低于特定阈值时进行流量故障切换。为了更好地控制故障切换机制,您可以使用 keepalived 或 pacemaker 等代理,并根据后端实例的状态变化公开通过或失败的健康检查。
- 通过托管式实例组实现可扩缩性和高可用性 - 区域级后端服务支持将托管式实例组用作后端。您现在可以为后端虚拟机实例指定模板,并根据 CPU 利用率或其他监控指标来利用自动扩缩功能。
除了上述优势之外,您还可以利用面向连接的协议 (TCP) 的连接耗尽功能,并缩短大型部署的编程时间。
Codelab 网络拓扑
本指南说明如何将现有网络负载平衡器从目标池后端转换为区域后端服务。
迁移到区域后端服务后,您可以使用诸多功能,例如非旧版健康检查(TCP、SSL、HTTP、HTTPS、HTTP/2)、代管式实例组、连接排空和故障切换政策。
本指南将引导您将以下示例基于目标池的网络负载平衡器转换为使用区域后端服务

之前:使用目标池的网络负载均衡
生成的基于后端服务的网络负载平衡器部署将如下所示。

之后:使用区域后端服务的网络负载均衡
此示例假设您有一个传统的基于目标池的网络负载平衡器,并且在可用区 us-central-1a 和 us-central-1c 各有两个实例。
这一转换所需的简要步骤如下:
- 将目标池实例按实例组进行分组。后端服务仅适用于代管式实例组或非代管式实例组。请注意,单个目标池中的实例数量没有限制,但实例组具有大小上限。如果目标池中的实例数超过此上限,您需要将其后端拆分到多个实例组中。如果您的现有部署包含备用目标池,请为这些实例创建单独的实例组。此实例组将配置为故障切换组。
- 创建区域后端服务。如果您的部署包含备用目标池,则需要在创建后端服务时指定故障切换比率。此值应与先前为目标池部署配置的故障切换比率相匹配。
- 将之前创建的实例组添加到后端服务。如果您的部署包含备用目标池,请在将相应的故障切换实例组添加到后端服务时用 --failover 标志来标记它。
- 配置指向新后端服务的转发规则。您可在此处选择以下 2 种方式:
- (推荐)更新现有转发规则以指向后端服务。或
- 创建指向后端服务的新转发。这要求您为负载平衡器的前端创建新的 IP 地址。然后修改 DNS 设置,以从旧的基于目标池的负载平衡器的 IP 地址无缝转换到新的 IP 地址。
自定进度的环境设置



请记住项目 ID,它在所有 Google Cloud 项目中都是唯一的名称(上述名称已被占用,您无法使用,抱歉!)。它稍后将在此 Codelab 中被称为 PROJECT_ID。
- 接下来,您需要在 Cloud 控制台中启用结算功能,才能使用 Google Cloud 资源。
运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。请务必按照“清理”部分中的所有说明操作,该部分介绍了如何关停资源,以免产生超出本教程范围的结算费用。Google Cloud 的新用户符合参与 $300 USD 免费试用计划的条件。
启动 Cloud Shell
虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。
在 GCP 控制台中,点击右上角工具栏上的 Cloud Shell 图标:

预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:

这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。只需一个浏览器,即可完成本实验中的所有工作。
登录 Cloud Shell 并设置项目 ID
gcloud config list project gcloud config set project [YOUR-PROJECT-ID] Perform setting your projectID: projectid=YOUR-PROJECT-ID echo $projectid
4. 创建 VPC 网络
VPC 网络
从 Cloud Shell
gcloud compute networks create network-lb --subnet-mode custom
创建子网
从 Cloud Shell
gcloud compute networks subnets create network-lb-subnet \
--network network-lb --range 10.0.0.0/24 --region us-central1
创建防火墙规则
从 Cloud Shell
gcloud compute --project=$projectid firewall-rules create www-firewall-network-lb --direction=INGRESS --priority=1000 --network=network-lb --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=network-lb-tag
创建非托管式实例
在每个地区(us-central1-a 和 us-central1-c)中创建 2 个实例
通过 Cloud Shell 创建实例 1
gcloud compute instances create www1 \ --subnet network-lb-subnet \ --image-family debian-9 \ --image-project debian-cloud \ --zone us-central1-a \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html"
从 Cloud Shell 创建实例 2
gcloud compute instances create www2 \ --subnet network-lb-subnet \ --image-family debian-9 \ --image-project debian-cloud \ --zone us-central1-a \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www2</h1></body></html>' | tee /var/www/html/index.html"
从 Cloud Shell 创建实例 3
gcloud compute instances create www3 \ --subnet network-lb-subnet \ --image-family debian-9 \ --image-project debian-cloud \ --zone us-central1-c \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www3</h1></body></html>' | tee /var/www/html/index.html"
从 Cloud Shell 创建实例 4
gcloud compute instances create www4 \ --subnet network-lb-subnet \ --image-family debian-9 \ --image-project debian-cloud \ --zone us-central1-c \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www4</h1></body></html>' | tee /var/www/html/index.html"
创建一条防火墙规则以允许外部流量进入这些虚拟机实例
从 Cloud Shell
gcloud compute --project=$projectid firewall-rules create www-firewall-network-lb --direction=INGRESS --priority=1000 --network=network-lb --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=network-lb-tag
为负载平衡器创建静态外部 IP 地址
从 Cloud Shell
gcloud compute addresses create network-lb-ip-1 \
--region us-central1
添加旧版 HTTP 健康检查资源
从 Cloud Shell
gcloud compute http-health-checks create basic-check
5. 创建转发规则和目标池
创建目标池
gcloud compute target-pools create www-pool \
--region us-central1 --http-health-check basic-check
将实例添加到目标池 us-central1-a
gcloud compute target-pools add-instances www-pool \ --instances www1,www2 \ --instances-zone us-central1-a
将实例添加到目标池 us-central1-c
gcloud compute target-pools add-instances www-pool \ --instances www3,www4 \ --instances-zone us-central1-c
添加转发规则
gcloud compute forwarding-rules create www-rule \ --region us-central1 \ --ports 80 \ --address network-lb-ip-1 \ --target-pool www-pool
验证目标池功能
选择“负载平衡器”→“前端 (www-rule)”,确定前端 IP 地址
在工作站终端中使用 curl 命令访问外部 IP 地址,并观察四个目标实例之间的负载均衡情况。验证完成后,关闭终端。
while true; do curl -m1 IP_ADDRESS; done
6. 将网络负载平衡器从目标池转换为后端服务
为后端服务创建统一的健康检查
gcloud compute health-checks create tcp my-tcp-health-check --port 80 --region us-central1
根据目标池中的现有实例创建实例组
gcloud compute --project=$projectid instance-groups unmanaged create www-instance-group-central1a --zone=us-central1-a gcloud compute --project=$projectid instance-groups unmanaged add-instances www-instance-group-central1a --zone=us-central1-a --instances=www1,www2
根据目标池中的现有实例创建实例组
gcloud compute --project=$projectid instance-groups unmanaged create www-instance-group-central1c --zone=us-central1-c gcloud compute --project=$projectid instance-groups unmanaged add-instances www-instance-group-central1c --zone=us-central1-c --instances=www3,www4
创建后端服务并将其与新创建的健康检查相关联
gcloud compute backend-services create my-backend-service --region us-central1 --health-checks my-tcp-health-check --health-checks-region us-central1 --load-balancing-scheme external
配置后端服务并添加实例组
gcloud compute backend-services add-backend my-backend-service --instance-group www-instance-group-central1a --instance-group-zone us-central1-a --region us-central1 gcloud compute backend-services add-backend my-backend-service --instance-group www-instance-group-central1c --instance-group-zone us-central1-c --region us-central1
更新现有转发规则以支持后端服务
执行以下操作,记下转发规则名称“www-rule”和关联的 IP 地址:
依次选择“负载平衡器”→“前端”
此外,还记录了四个目标池
选择负载平衡器 → 选择“www-pool”
通过更新现有转发规则将流量路由到后端服务
gcloud compute forwarding-rules set-target www-rule --region=us-central1 --backend-service my-backend-service --region us-central1
验证负载平衡器“www-pool”是否不再配置前端“www-rule”(请参见下方屏幕截图)
选择“负载平衡器”→“www-pool”

验证前端转发规则是否已与负载平衡器“my-backend-service”相关联
依次选择“负载平衡器”→“前端”
请注意,规则名称“www-rule”的 IP 地址已保留,并且现在正在使用负载平衡器“my-backend-service”
在工作站终端中使用 curl 命令访问外部 IP 地址,并观察新关联的后端服务之间的负载均衡情况。验证完成后,关闭终端。
while true; do curl -m1 IP_ADDRESS; done
7. 清理步骤
gcloud compute forwarding-rules delete www-rule --region=us-central1 --quiet gcloud compute backend-services delete my-backend-service --region us-central1 --quiet gcloud compute target-pools delete www-pool --region us-central1 --quiet gcloud compute addresses delete network-lb-ip-1 --region us-central1 --quiet gcloud compute firewall-rules delete www-firewall-network-lb --quiet gcloud compute instances delete www4 --zone us-central1-c --quiet gcloud compute instances delete www3 --zone us-central1-c --quiet gcloud compute instances delete www2 --zone us-central1-a --quiet gcloud compute instances delete www1 --zone us-central1-a --quiet gcloud compute networks subnets delete network-lb-subnet --region us-central1 --quiet gcloud compute networks delete network-lb --quiet gcloud compute instance-groups unmanaged delete www-instance-group-central1a --zone us-central1-a --quiet gcloud compute instance-groups unmanaged delete www-instance-group-central1c --zone us-central1-c --quiet
8. 恭喜!
恭喜您完成此 Codelab。
所学内容
- 了解区域性后端服务的优势
- 创建带有目标池的网络负载平衡器
- 执行目标池验证
- 使用非托管实例组创建区域后端服务
- 执行从目标池到后端服务的迁移
- 执行后端服务验证