本指南介绍如何使用区域后端服务创建基本网络负载平衡部署。在此示例中,我们将使用负载平衡器在 us-central1
区域的两个可用区代管式实例组中的各个后端虚拟机之间分配流量。同样有效的方法是为 us-central1
区域使用单个区域代管式实例组。
此场景会在运行状况良好的实例之间分配 TCP 流量。为了支持此示例,TCP 运行状况检查配置为确保流量仅发送到运行状况良好的实例。请注意,TCP 运行状况检查仅支持基于后端服务的负载平衡器。基于目标池的负载平衡器只能使用旧版 HTTP 运行状况检查。
虽然此示例是对 TCP 流量进行负载平衡,但您可以使用网络负载平衡对 UDP、SSL 和 HTTP(S) 流量进行负载平衡。在开始之前,请先阅读网络负载平衡概览。
请注意,网络负载平衡器是区域级负载平衡器。所有负载平衡器组件(后端虚拟机、后端服务和转发规则)必须位于同一区域。
准备工作
安装 gcloud
命令行工具。如需全面了解此工具,请参阅 gcloud 工具指南。您可以在 API 和 gcloud 参考指南中找到与负载平衡相关的命令。
如果您之前未运行过 gcloud
命令行工具,请先运行 gcloud init
进行身份验证。
本指南假定您熟悉 bash。
创建可用区代管式实例组
对于此负载平衡场景,您将创建两个 Compute Engine 可用区代管式实例组并在每个实例上安装一个 echo 服务器。
作为网络负载平衡器的后端虚拟机参与的实例必须运行相应的 Linux 客机环境、Windows 客机环境或提供同等功能的其他进程。
设置实例
Cloud Console
- 在 Cloud Console 中,转到实例组页面。
- 点击创建实例组。
- 选择左侧的新建代管实例组。
- 对于名称,请输入
ig-us-1
。 - 在位置下方,选择单个区域。
- 对于区域,选择 us-central1。
- 对于可用区,选择 us-central1-a。
在实例模板下,选择创建新的实例模板。
- 对于名称,请输入
ig-us-template
。 - 确保启动磁盘已设置为 Debian 映像,例如 Debian GNU/Linux 9 (stretch)。本文中的说明使用仅 Debian 支持的命令,例如
apt-get
。 在管理、安全、磁盘、网络、单独租用下的管理标签页上,将以下脚本插入到启动脚本字段。
#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2
在网络下,使用
network-lb
标记填充标记字段。点击保存并继续。
- 对于名称,请输入
指定要在组中创建的实例数。
对于此示例,在自动扩缩模式下,选择:
- 不自动扩缩
- 在实例数下,输入
2
点击创建以创建新实例组。
重复上述步骤,在
us-central1-c
可用区中创建第二个代管式实例组,并遵循以下规范:- 名称:
ig-us-2
- 区域:
us-central1-c
- 实例模板:使用上一部分中创建的同一
ig-us-template
模板。
- 名称:
gcloud
本指南中的 gcloud
说明假定您使用的是 Cloud Shell 或安装了 bash 的其他环境。
使用
gcloud compute instance-templates create
命令创建含有 HTTP 服务器的虚拟机实例模板。gcloud compute instance-templates create ig-us-template \ --region=us-central1 \ --tags=network-lb \ --image-family=debian-9 \ --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://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'
使用
gcloud compute instance-groups managed create
命令在可用区中创建一个代管式实例组。gcloud compute instance-groups managed create ig-us-1 \ --zone us-central1-a \ --size 2 \ --template ig-us-template
在
us-central1-c
可用区中创建第二个代管式实例组:gcloud compute instance-groups managed create ig-us-2 \ --zone us-central1-c \ --size 2 \ --template ig-us-template
配置防火墙规则
创建一条防火墙规则,以允许外部流量到达后端实例。
控制台
- 转到 Google Cloud Console 中的“防火墙”页面。
转到“防火墙”页面 - 点击创建防火墙规则。
- 输入
allow-network-lb
作为名称。 - 选择要应用防火墙规则的网络(默认)。
- 在目标下,选择指定的目标标记。
- 在目标标记字段中,输入
network-lb
。 - 将来源 IP 地址范围设置为
0.0.0.0/0
(允许来自任何来源的流量)。这样,外部流量和运行状况检查探测都会到达后端实例。 - 在指定的协议和端口下,点击 tcp 旁边的复选框,然后输入
80
。 - 点击创建。新的防火墙规则可能需要一段时间才能在控制台中显示,或者您可能需要点击刷新才能看见规则。
gcloud
gcloud compute firewall-rules create allow-network-lb \ --target-tags network-lb \ --allow tcp:80
配置负载平衡器
接下来,设置负载平衡器。
配置负载平衡器时,虚拟机实例将接收发往您配置的静态外部 IP 地址的数据包。如果您使用的是 Compute Engine 提供的映像,则系统会自动配置您的实例处理此 IP 地址。如果您使用任何其他映像,则必须将此地址配置为 eth0
上的别名或每个实例上的环回地址。
控制台
- 转到 Google Cloud Console 中的创建负载平衡器页面。
转到“创建负载平衡器”页面 在 TCP 负载平衡下,点击开始配置按钮。
在面向互联网或仅限内部中,选择 From Internet to my VMs。
在多区域或单区域中,选择 Single region only。
对于后端类型,选择后端服务(Beta 版)。
点击继续。
后端配置
- 在新建 TCP 负载平衡器屏幕上的名称中,输入新负载平衡器的名称
tcp-network-lb
。 - 点击后端配置。 您将看到您之前输入的负载平衡器名称,但无法进行修改。
- 点击后端配置 并进行以下更改:
- 对于区域,选择 us-central1。
- 在后端下,使用实例组下拉菜单选择
ig-us-1
。点击完成。 点击添加后端,然后重复此步骤以添加ig-us-2
。 - 在运行状况检查下,选择创建运行状况检查或另创建一项运行状况检查,然后输入以下信息:
- 名称:
tcp-health-check
- 协议:
TCP
- 端口:
80
- 名称:
- 点击保存并继续。
- 请先确认后端配置旁边是否有蓝色对勾标记,然后再继续操作。
前端配置
- 点击前端配置。
- 输入
network-lb-forwarding-rule
作为名称。 - 在 IP 下,点击下拉菜单并选择创建 IP 地址。
- 在保留静态 IP 地址屏幕上,指定名称
network-lb-ip
。 - 点击预留。
- 在保留静态 IP 地址屏幕上,指定名称
- 选择单个,然后输入
80
作为端口号。 点击完成按钮。
前端配置左侧带对勾标记的蓝色圆圈表示设置成功。
检查配置
- 点击检查并最终确定按钮,检查负载平衡器的所有配置设置。
如果设置正确,请点击创建。创建负载平衡器需要几分钟的时间。
在负载平衡屏幕上,在新负载平衡器的“后端”列下,您会看到一个绿色对勾标记,表明新的负载平衡器运行正常。
gcloud
为负载平衡器创建静态外部 IP 地址。
gcloud compute addresses create network-lb-ip \ --region us-central1
创建 TCP 运行状况检查。
gcloud compute health-checks create tcp tcp-health-check \ --region us-central1 \ --port 80
创建后端服务。
gcloud compute backend-services create network-lb-backend-service \ --protocol TCP \ --health-checks tcp-health-check \ --health-checks-region us-central1 \ --region us-central1
将实例组添加到后端服务。
gcloud compute backend-services add-backend network-lb-backend-service \ --instance-group ig-us-1 \ --instance-group-zone us-central1-a \ --region us-central1
gcloud compute backend-services add-backend network-lb-backend-service \ --instance-group ig-us-2 \ --instance-group-zone us-central1-c \ --region us-central1
创建转发规则,用于将传入的 TCP 流量路由到后端服务。使用第 1 步中预留的 IP 地址作为负载平衡器的静态外部 IP 地址。
gcloud compute forwarding-rules create network-lb-forwarding-rule \ --load-balancing-scheme external \ --region us-central1 \ --ports 80 \ --address network-lb-ip \ --backend-service network-lb-backend-service
测试负载平衡器
至此您已经配置好了负载平衡服务,接下来可以开始将流量发送到负载平衡器的外部 IP 地址,并观察流量被分发到不同的后端实例。
查询负载平衡器的外部 IP 地址
控制台
- 在高级负载平衡页面中,转到转发规则标签页。
转到“转发规则”标签页 - 找到
network-lb-forwarding-rule
,即负载平衡器使用的转发规则。 - 在
network-lb-forwarding-rule
的 IP 地址列中,记下列出的外部 IP 地址。
gcloud
输入以下命令,查看负载平衡器使用的 network-lb-forwarding-rule
转发规则的外部 IP 地址。
gcloud compute forwarding-rules describe network-lb-forwarding-rule \ --region us-central1
将流量发送到负载平衡器
此过程会将外部流量发送到负载平衡器。
使用
curl
连接负载平衡器的 IP 地址,通过这种方式向负载平衡器发送 Web 请求。$ while true; do curl -m1 IP_ADDRESS; done
请注意
curl
命令返回的结果。该结果文本中显示了生成响应的后端虚拟机的名称,例如:Page served from: VM_NAME
来自
curl
命令的响应会在后端实例之间随机交替。如果响应最初不成功,您可能需要等待大约 30 秒,以便完全加载配置并且实例被标记为运行状况良好,然后再次尝试。
后续步骤
- 如需了解网络负载平衡如何与后端服务搭配使用,请参阅使用后端服务的网络负载平衡概览。
- 如需了解如何将网络负载平衡器从目标池后端转换到区域后端服务,请参阅将网络负载平衡器从目标池转换到后端服务
- 如需使用目标池配置网络负载平衡器,请参阅设置网络负载平衡。
- 清理负载平衡器设置。