将网络负载平衡器从目标池转换为区域级后端服务

1. 简介

本指南介绍了如何将现有网络负载平衡器从目标池后端转换为区域后端服务。

学习内容

  • 了解区域性后端服务的优势
  • 创建包含目标池的网络负载平衡器
  • 执行目标池验证
  • 使用非代管式实例组创建区域性后端服务
  • 执行目标池到后端服务迁移
  • 执行后端服务验证

所需条件

  • 有负载平衡器方面的经验

2. 适用于网络负载均衡的区域后端服务概览

借助网络负载平衡器,Google Cloud 客户可以使用这款强大的工具在 Google Cloud 区域中的虚拟机之间分配外部流量。为了让客户更轻松地管理传入流量并控制负载平衡器的行为方式,我们最近在网络负载平衡器中添加了对后端服务的支持。这样一来,客户在部署时就能轻松管理,并提升规模、速度、性能和弹性。

我们现在支持使用网络负载均衡的后端服务,这比之前的目标池方法有了显著改进。后端服务定义了负载平衡器如何将传入流量分配给关联的后端,并提供对负载平衡器行为的精细控制。

3. 区域性后端服务优势

选择区域性后端服务作为负载平衡器可为您的环境带来诸多优势。

267db35a58145be.png

区域性后端服务可提供以下功能:

  • 通过统一健康检查实现高准确度的健康检查 - 借助区域性后端服务,您现在可以充分利用负载均衡健康检查功能,从旧式 HTTP 健康检查中解放出来。出于合规性原因,支持自定义请求和响应字符串或 HTTPS 的 TCP 健康检查是网络负载均衡客户的常见请求。
  • 借助故障切换组实现更强的弹性 - 借助故障切换组,您可以将一个实例组指定为主实例组,另一个实例组指定为辅助实例组,并在活跃组中实例的运行状况低于特定阈值时将流量故障切换到辅助实例组。为了更好地控制故障切换机制,您可以使用 keepalivedpacemaker 等代理,并可根据后端实例状态的变化公开运行良好或失败的健康检查。
  • 代管式实例组实现可伸缩性和高可用性 - 区域后端服务支持将代管式实例组用作后端。您现在可以为后端虚拟机实例指定模板,并利用根据 CPU 利用率或其他监控指标自动扩缩的功能。

除上述功能外,您还可以利用连接耗尽功能来处理面向连接的协议 (TCP),并缩短大型部署的编程时间。

此 Codelab 的网络拓扑

本指南介绍了如何将现有网络负载平衡器从目标池后端转换为区域后端服务。

迁移到区域后端服务后,您可以使用诸多功能,例如非旧版健康检查(TCP、SSL、HTTP、HTTPS、HTTP/2)、代管式实例组、连接排空故障切换政策

本指南逐步介绍了如何将以下示例基于目标池的网络负载平衡器转换为使用区域级后端服务

b2ac8a09e53e27f8.png

之前:使用目标池的网络负载均衡

生成的基于后端服务的网络负载平衡器部署将如下所示。

f628fdad64c83af3.png

之后:使用区域级后端服务实现网络负载均衡

此示例假定您有一个传统的基于目标池的网络负载平衡器,并且在可用区 us-central-1a 和 us-central-1c 各有两个实例。

这一转换所需的简要步骤如下:

  1. 将目标池实例分组到实例组中。后端服务仅适用于代管式实例组或非代管式实例组。请注意,单个目标池中的实例数量没有限制,但实例组具有大小上限。如果目标池的实例数量超过此上限,则您需要将其后端拆分到多个实例组中。如果您的现有部署包含备用目标池,请为这些实例创建一个单独的实例组。此实例组将配置为故障切换组。
  2. 创建区域后端服务。如果您的部署包含备用目标池,则需要在创建后端服务时指定故障切换比率。此值应与先前为目标池部署配置的故障切换比率相匹配。
  3. 将实例组(之前创建)添加到后端服务。如果您的部署包含备用目标池,请在将相应的故障切换实例组添加到后端服务时用 –failover 标志来标记它。
  4. 配置指向新后端服务的转发规则。您可以选择以下 2 种方式:
  • (推荐)更新现有转发规则以指向后端服务。或
  • 创建指向后端服务的新转发。这要求您为负载平衡器的前端创建新的 IP 地址。然后修改 DNS 设置,以从旧的基于目标池的负载平衡器的 IP 地址无缝转换到新的 IP 地址。

自定进度的环境设置

  1. 登录 Cloud 控制台,然后创建一个新项目或重复使用现有项目。 如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

请记住项目 ID,它在所有 Google Cloud 项目中都是唯一的名称(上述名称已被占用,您无法使用,抱歉!)。它稍后将在此 Codelab 中被称为 PROJECT_ID

  1. 接下来,您需要在 Cloud 控制台中启用结算功能,才能使用 Google Cloud 资源。

运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。请务必按照“清理”部分中的所有说明操作,该部分介绍了如何关停资源,以免产生超出本教程范围的结算费用。Google Cloud 的新用户符合参与 300 美元免费试用计划的条件。

启动 Cloud Shell

虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。

在 GCP 控制台中,点击右上角工具栏上的 Cloud Shell 图标:

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 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

创建非托管实例

创建实例(每个可用区 2 个实例,分别为 us-central1-a 和 us-central1-c)

在 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”

9a393b3ca4e0942c

验证前端转发规则现在与负载平衡器“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。

所学内容

  • 了解区域性后端服务的优势
  • 创建包含目标池的网络负载平衡器
  • 执行目标池验证
  • 使用非代管式实例组创建区域性后端服务
  • 执行目标池到后端服务迁移
  • 执行后端服务验证