本指南介绍如何使用区域后端服务创建外部直通网络负载均衡器部署。此示例会创建一个支持 TCP 或 UDP 流量的外部直通式网络负载均衡器。如果您要创建对 TCP、UDP、ESP、GRE、ICMP 和 ICMPv6 流量(不仅仅是 TCP 或 UDP)进行负载均衡的外部直通式网络负载均衡器,请参阅为多个 IP 协议设置外部直通式网络负载均衡器。
在此示例中,我们将使用负载均衡器在 us-central1
区域的两个可用区代管式实例组中的后端虚拟机之间分配 TCP 流量。同样有效的方法是为 us-central1
区域使用单个区域代管式实例组。
此场景会在运行状况良好的实例之间分配 TCP 流量。为了支持此示例,TCP 健康检查配置为确保流量仅发送到健康状况良好的实例。请注意,TCP 健康检查仅支持基于后端服务的负载均衡器。基于目标池的负载均衡器只能使用旧版 HTTP 健康检查。
虽然此示例是对 TCP 流量进行负载均衡,但您可以使用基于后端服务的外部直通式网络负载均衡器 TCP、UDP、ESP、GRE、ICMP 和 ICMPv6 流量进行负载均衡。
外部直通式网络负载均衡器是区域级负载均衡器。所有负载均衡器组件(后端虚拟机、后端服务和转发规则)必须位于同一区域。
准备工作
安装 Google Cloud CLI。如需全面了解此工具,请参阅 gcloud CLI 概览。您可以在 API 和 gcloud 参考文档中找到与负载均衡相关的命令。
如果您之前未运行过 Google Cloud CLI,请先运行 gcloud init
进行身份验证。
本指南假定您熟悉 bash。
设置网络和子网
本页面中的示例使用名为 lb-network
的自定义模式 VPC 网络。如果您只想处理 IPv4 流量,则可以使用自动模式 VPC 网络。但是,IPv6 流量需要自定义模式子网。
IPv6 流量还需要双栈子网(stack-type
设置为 IPv4_IPv6
)。在自定义模式 VPC 网络上创建双栈子网时,您可以为子网选择 IPv6 访问类型。在此示例中,我们将子网的 ipv6-access-type
参数设置为 EXTERNAL
。这意味着此子网上的新虚拟机可以分配外部 IPv4 地址和外部 IPv6 地址。
用于此示例的后端和负载均衡器组件位于以下区域和子网中:
- 区域:
us-central1
- 子网:
lb-subnet
,其主要 IPv4 地址范围为10.1.2.0/24
。虽然您可以选择在子网上配置哪个 IPv4 地址范围,但系统会自动分配 IPv6 地址范围。Google 提供固定大小 (/64) 的 IPv6 CIDR 地址块。
如需创建示例网络和子网,请按照以下步骤操作。
控制台
如需同时支持 IPv4 和 IPv6 流量,请按照以下步骤操作:
在 Google Cloud 控制台中,转到 VPC 网络页面。
点击创建 VPC 网络。
输入
lb-network
作为名称。在子网部分中执行以下操作:
- 将子网创建模式设置为自定义。
- 在新子网部分中,配置以下字段,然后点击完成:
- 名称:
lb-subnet
- 区域:
us-central1
- IP 栈类型:IPv4 和 IPv6(双栈)
- IPv4 范围:
10.1.2.0/24
虽然您可以为子网配置 IPv4 地址范围,但您不能为子网选择 IPv6 地址范围。Google 提供固定大小 (/64) 的 IPv6 CIDR 地址块。 - IPv6 访问类型:外部
- 名称:
点击创建。
如需支持仅限 IPv4 流量,请按以下步骤操作:
在 Google Cloud 控制台中,转到 VPC 网络页面。
点击创建 VPC 网络。
输入
lb-network
作为名称。在子网部分中执行以下操作:
- 将子网创建模式设置为自定义。
- 在新子网部分中,配置以下字段,然后点击完成:
- 名称:
lb-subnet
- 区域:
us-central1
- IP 栈类型:IPv4(单栈)
- IPv4 范围:
10.1.2.0/24
- 名称:
点击创建。
gcloud
创建自定义模式 VPC 网络:
gcloud compute networks create lb-network \ --subnet-mode=custom
在
lb-network
网络中,为us-central1
区域中的后端创建子网。对于 IPv4 和 IPv6 流量,请使用以下命令创建双栈子网:
gcloud compute networks subnets create lb-subnet \ --stack-type=IPV4_IPv6 \ --ipv6-access-type=EXTERNAL \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-central1
对于仅限 IPv4 流量,请使用以下命令:
gcloud compute networks subnets create lb-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-central1
创建可用区代管式实例组
对于此负载均衡场景,您将创建两个 Compute Engine 可用区代管式实例组并在每个实例上安装一个 Apache Web 服务器。
要同时处理 IPv4 和 IPv6 流量,请将后端虚拟机配置为双栈。将虚拟机的 stack-type
设置为 IPv4_IPv6
。虚拟机还会从子网继承 ipv6-access-type
设置(在此示例中为 EXTERNAL
)。 如需详细了解 IPv6 要求,请参阅外部直通式网络负载均衡器概览:转发规则。
如需将现有虚拟机用作后端,请使用 gcloud compute instances network-interfaces
update
命令将虚拟机更新为双栈。
作为外部直通式网络负载均衡器的后端虚拟机参与的实例必须运行相应的 Linux 客机环境、Windows 客机环境或提供同等功能的其他进程。
设置实例
控制台
创建实例模板。在 Google Cloud 控制台中,转到实例模板页面。
- 点击创建实例模板。
- 对于名称,输入
ig-us-template
。 - 在启动磁盘部分,确保将映像设置为 Debian 映像,例如 Debian GNU/Linux 10 (buster)。本文中的说明使用仅 Debian 支持的命令,例如
apt-get
。 - 点击高级选项。
- 点击网络。
- 对于网络标记,请输入
lb-tag
。 - 对于网络接口,请点击默认接口并配置以下字段:
- 网络:
lb-network
- 子网:
lb-subnet
- 网络:
- 点击完成。
- 对于网络标记,请输入
点击管理,并将以下脚本复制到启动脚本字段中。
#! /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 控制台中,转到实例组页面。
- 点击创建实例组。
- 选择新的代管式实例组(无状态)。如需了解详情,请参阅无状态或有状态 MIG。
- 对于名称,输入
ig-us-1
。 - 对于实例模板,请选择
ig-us-template
。 - 对于位置,选择单个可用区。
- 对于区域,请选择
us-central1
。 - 对于可用区,请选择
us-central1-a
。 指定要在组中创建的实例数。
对于此示例,请在自动扩缩部分中指定以下选项:
- 对于自动扩缩模式,请选择
Off:do not autoscale
。 - 对于实例数上限,请输入
2
。
- 对于自动扩缩模式,请选择
点击创建。
重复上述步骤,在
us-central1-c
可用区中创建第二个代管式实例组,并遵循以下规范:- 名称:
ig-us-2
- 可用区:
us-central1-c
- 实例模板:使用上一部分中创建的同一
ig-us-template
模板。
- 名称:
gcloud
本指南中的 gcloud
说明假定您使用的是 Cloud Shell 或安装了 bash 的其他环境。
使用
gcloud compute instance-templates create
命令创建含有 HTTP 服务器的虚拟机实例模板。如需同时处理 IPv4 和 IPv6 流量,请使用以下命令。
gcloud compute instance-templates create ig-us-template \ --region=us-central1 \ --network=lb-network \ --subnet=lb-subnet \ --ipv6-network-tier=PREMIUM \ --stack-type=IPv4_IPv6 \ --tags=lb-tag \ --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'
要处理仅限 IPv4 流量,请使用以下命令。
gcloud compute instance-templates create ig-us-template \ --region=us-central1 \ --network=lb-network \ --subnet=lb-subnet \ --tags=lb-tag \ --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'
使用
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
配置防火墙规则
创建允许外部流量(包括健康检查探测)到达后端实例的防火墙规则。
此示例会创建一条防火墙规则,以允许来自所有来源范围的 TCP 流量到达端口 80 上的后端实例。如果要专门为健康检查探测创建单独的防火墙规则,请使用健康检查概览:探测 IP 范围和防火墙规则中记录的来源 IP 地址范围。
控制台
在 Google Cloud 控制台中,转到防火墙页面。
如需允许 IPv4 流量,请执行以下步骤:
- 点击创建防火墙规则。
- 对于名称,输入
allow-network-lb-ipv4
。 - 在网络列表中,选择
lb-network
。 - 对于目标,选择 Specified target tags。
- 在目标标记字段中,输入
lb-tag
。 - 对于来源过滤条件,选择 IPv4 范围。
- 将来源 IPv4 范围设置为
0.0.0.0/0
。这允许来自任何来源的 IPv4 流量。这也允许 Google 的健康检查探测访问后端实例。 - 在指定的协议和端口部分,选中 TCP 复选框并输入
80
。 - 点击创建。新的防火墙规则可能需要一段时间才能在 Google Cloud 控制台中显示,或者您可能需要点击刷新才能看见规则。
如需允许 IPv6 流量,请执行以下步骤:
- 再次点击创建防火墙规则。
- 对于名称,输入
allow-network-lb-ipv6
。 - 在网络列表中,选择
lb-network
。 - 对于目标,选择 Specified target tags。
- 在目标标记字段中,输入
lb-tag
。 - 对于来源过滤条件,选择 IPv6 范围。
- 将来源 IPv6 范围设置为
::/0
。这允许来自任何来源的 IPv6 流量。这也允许 Google 的健康检查探测访问后端实例。 - 在指定的协议和端口部分,选中 TCP 复选框并输入
80
。 - 点击创建。新的防火墙规则可能需要一段时间才能在控制台中显示,或者您可能需要点击刷新才能看见规则。
gcloud
如需允许 IPv4 流量,请运行以下命令:
gcloud compute firewall-rules create allow-network-lb-ipv4 \ --network=lb-network \ --target-tags=lb-tag \ --allow=tcp:80 \ --source-ranges=0.0.0.0/0
如需允许 IPv6 流量,请运行以下命令:
gcloud compute firewall-rules create allow-network-lb-ipv6 \ --network=lb-network \ --target-tags=lb-tag \ --allow=tcp:80 \ --source-ranges=::/0
配置负载均衡器
接下来,设置负载均衡器。
配置负载均衡器时,虚拟机实例将接收发往您配置的静态外部 IP 地址的数据包。如果您使用的是 Compute Engine 提供的映像,则系统会自动配置您的实例处理此 IP 地址。如果您使用任何其他映像,则必须将此地址配置为 eth0
上的别名或每个实例上的环回地址。
控制台
开始配置
在 Google Cloud 控制台中,转到负载均衡页面。
- 点击创建负载均衡器。
- 对于负载均衡器的类型,选择网络负载均衡器 (TCP/UDP/SSL),然后点击下一步。
- 对于代理或直通,选择直通式负载均衡器,然后点击下一步。
- 在公共或内部字段中,选择公共(外部),然后点击下一步。
- 点击配置。
后端配置
- 在创建外部直通式网络负载均衡器页面上,输入新负载均衡器的名称
tcp-network-lb
。 - 对于区域,请选择
us-central1
。 - 点击后端配置。
- 在后端配置页面上,进行以下更改:
- 对于新建后端,选择 IP 栈类型。如果您创建了双栈后端来处理 IPv4 和 IPv6 流量,请选择 IPv4 和 IPv6(双栈)。如需仅处理 IPv4 流量,请选择 IPv4(单栈)。
- 在实例组列表中,选择
ig-us-1
,然后点击完成。 - 点击添加后端,然后重复此步骤来添加
ig-us-2
。 - 对于健康检查,请点击创建健康检查或另创建一项健康检查,然后输入以下信息:
- 名称:
tcp-health-check
- 协议:
TCP
- 端口:
80
- 名称:
- 点击保存。
- 请先确认后端配置旁边是否有蓝色对勾标记,然后再继续操作。
前端配置
- 点击前端配置。
- 对于名称,输入
network-lb-forwarding-rule
。 - 如需处理 IPv4 流量,请按以下步骤操作:
- 对于 IP 版本,请选择 IPv4。
- 在内部 IP 用途部分的 IP 地址列表中,选择创建 IP 地址。
- 在保留静态 IP 地址页面上,对于名称,输入
network-lb-ipv4
。 - 点击预留。
- 在保留静态 IP 地址页面上,对于名称,输入
- 对于端口,选择单个。对于端口号,输入
80
。 - 点击完成。
如需处理 IPv6 流量,请按以下步骤操作:
- 对于 IP 版本,请选择 IPv6。
- 对于子网,请选择 lb-subnet。
- 在 IPv6 范围列表中,选择创建 IP 地址。
- 在保留静态 IP 地址页面上,对于名称,输入
network-lb-ipv6
。 - 点击预留。
- 在保留静态 IP 地址页面上,对于名称,输入
- 对于端口,选择单个。对于端口号,输入
80
。 - 点击完成。
前端配置左侧带对勾标记的蓝色圆圈表示设置成功。
检查配置
- 点击检查并最终确定。
- 查看负载均衡器配置设置。
- 可选:点击等效代码以查看将用于创建负载均衡器的 REST API 请求。
点击创建。
在负载均衡页面上,在新负载均衡器的“后端”列下,您会看到一个绿色对勾标记,表明新的负载均衡器运行正常。
gcloud
预留静态外部 IP 地址。
对于 IPv4 流量:为负载均衡器创建静态外部 IPv4 地址。
gcloud compute addresses create network-lb-ipv4 \ --region us-central1
对于 IPv6 流量:为负载均衡器创建静态外部 IPv6 地址范围。使用的子网必须是具有外部 IPv6 范围的双栈子网。
gcloud compute addresses create network-lb-ipv6 \ --region us-central1 \ --subnet lb-subnet \ --ip-version IPV6 \ --endpoint-type NETLB
创建 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
根据您希望处理 IPv4 流量还是 IPv6 流量,创建转发规则。创建两个转发规则来处理这两种流量。
对于 IPv4 流量:创建转发规则以将传入的 TCP 流量路由到后端服务。使用第 1 步中预留的 IPv4 地址作为负载均衡器的静态外部 IP 地址。
gcloud compute forwarding-rules create network-lb-forwarding-rule-ipv4 \ --load-balancing-scheme EXTERNAL \ --region us-central1 \ --ports 80 \ --address network-lb-ipv4 \ --backend-service network-lb-backend-service
对于 IPv6 流量:创建转发规则以处理 IPv6 流量。使用第 1 步中预留的 IPv6 地址范围作为负载均衡器的静态外部 IP 地址。使用的子网必须是具有外部 IPv6 子网范围的双栈子网。
gcloud compute forwarding-rules create network-lb-forwarding-rule-ipv6 \ --load-balancing-scheme EXTERNAL \ --region us-central1 \ --network-tier PREMIUM \ --ip-version IPV6 \ --subnet lb-subnet \ --address network-lb-ipv6 \ --ports 80 \ --backend-service network-lb-backend-service
测试负载均衡器
至此您已经配置好了负载均衡服务,接下来可以开始将流量发送到负载均衡器的外部 IP 地址,并观察流量被分发到不同的后端实例。
查询负载均衡器的外部 IP 地址
控制台
在负载均衡组件页面上,转到转发规则标签页。
找到负载均衡器使用的转发规则。
在外部 IP 地址列中,记下列出的外部 IP 地址。
gcloud:IPv4
输入以下命令,查看负载均衡器使用的 network-lb-forwarding-rule
转发规则的外部 IPv4 地址。
gcloud compute forwarding-rules describe network-lb-forwarding-rule-ipv4 \ --region us-central1
gcloud:IPv6
输入以下命令,查看负载均衡器使用的 network-lb-forwarding-rule
转发规则的外部 IPv6 地址。
gcloud compute forwarding-rules describe network-lb-forwarding-rule-ipv6 \ --region us-central1
将流量发送到负载均衡器
使用 curl
连接负载均衡器的 IP 地址,通过这种方式向负载均衡器发送 Web 请求。
从具有 IPv4 连接的客户端,运行以下命令:
$ while true; do curl -m1 IPV4_ADDRESS; done
从具有 IPv6 连接的客户端,运行以下命令:
$ while true; do curl -m1 http://IPV6_ADDRESS; done
比方说,如果分配的 IPv6 地址为
[2001:db8:1:1:1:1:1:1/96]:80
,则该命令应如下所示:$ while true; do curl -m1 http://[2001:db8:1:1:1:1:1:1]:80; done
请注意 curl
命令返回的结果。该结果文本中显示了生成响应的后端虚拟机的名称,例如:Page served
from: VM_NAME
来自 curl
命令的响应会在后端实例之间随机交替。如果响应最初不成功,您可能需要等待大约 30 秒,以便完全加载配置并且实例被标记为运行状况良好,然后再次尝试。
其他配置选项
本部分对配置示例进行了扩展,以提供有关进一步自定义外部直通式网络负载均衡器的说明。这些任务是可选的。您可以按任意顺序执行这些任务。
配置会话亲和性
示例配置会创建一个停用了会话亲和性的后端服务(值设置为 NONE
)。本部分介绍如何更新后端服务以更改负载均衡器的会话亲和性设置。
如需了解支持的会话亲和性类型,请参阅会话亲和性选项。
控制台
在 Google Cloud 控制台中,转到负载均衡页面。
在负载均衡器标签页中,点击后端服务的名称,然后点击修改。
在修改外部直通式网络负载均衡器页面上,点击后端配置。
从会话亲和性列表中选择一个选项。
点击更新。
gcloud
使用以下 gcloud
命令更新后端服务的会话亲和性:
gcloud compute backend-services update BACKEND_SERVICE \ --region=REGION \ --session-affinity=SESSION_AFFINITY_OPTION
请将占位符替换为有效值:
BACKEND_SERVICE
:您要更新的后端服务SESSION_AFFINITY_OPTION
:您要设置的会话亲和性选项如需查看外部直通式网络负载均衡器支持的值列表,请参阅会话亲和性选项。
配置连接跟踪政策
示例配置会创建具有连接跟踪政策的默认设置的后端服务。本部分介绍如何更新后端服务以更改负载均衡器的默认连接跟踪政策。
连接跟踪政策包括以下设置:
- 跟踪模式
- 运行状况不佳的后端上的连接持久性
- 空闲超时(60 秒,无法配置)
gcloud
使用以下 gcloud compute
backend-services
命令更新后端服务的连接跟踪政策:
gcloud compute backend-services update BACKEND_SERVICE \ --region=REGION \ --tracking-mode=TRACKING_MODE \ --connection-persistence-on-unhealthy-backends=CONNECTION_PERSISTENCE_BEHAVIOR
请将占位符替换为有效值:
BACKEND_SERVICE
:您要更新的后端服务TRACKING_MODE
:要用于传入数据包的连接跟踪模式。如需查看受支持值的列表,请参阅跟踪模式。CONNECTION_PERSISTENCE_BEHAVIOR
:后端运行状况不佳时的连接持久性行为。如需查看受支持值的列表,请参阅运行状况不佳的后端上的连接持久性。
配置流量导向
本部分介绍如何更新负载均衡器的前端配置,以设置基于来源 IP 地址的流量导向。如需详细了解流量导向的工作原理,请参阅流量导向。
以下说明假定您已创建父级基本转发规则。此示例将创建另一个转发规则,即导向转发规则,该规则将具有与父级规则相同的 IP 地址、IP 协议和端口。此导向转发规则配置有来源 IP 地址范围,您可以自定义来自这些来源 IP 地址范围的数据包的转发方式。
gcloud
使用以下命令创建指向后端服务的导向转发规则:
gcloud compute forwarding-rules create STEERING_FORWARDING_RULE_BS \ --load-balancing-scheme=EXTERNAL \ --backend-service=BACKEND_SERVICE \ --address=LOAD_BALANCER_VIP \ --ip-protocol=IP_PROTOCOL \ --ports=PORTS \ --region=REGION \ --source-ip-ranges=SOURCE_IP_ADDRESS_RANGES
使用以下命令创建指向目标实例的导向转发规则:
gcloud compute forwarding-rules create STEERING_FORWARDING_RULE_TI \ --load-balancing-scheme=EXTERNAL \ --target-instance=TARGET_INSTANCE \ --address=LOAD_BALANCER_VIP \ --ip-protocol=IP_PROTOCOL \ --ports=PORTS \ --region=REGION \ --source-ip-ranges=SOURCE_IP_ADDRESS_RANGES
请将占位符替换为有效值:
FORWARDING_RULE
:您正在创建的导向转发规则的名称。BACKEND_SERVICE
或TARGET_INSTANCE
:此导向转发规则将向其发送流量的后端服务或目标实例的名称。即使父级转发规则指向后端服务,您也可以创建指向目标实例的导向转发规则。LOAD_BALANCER_VIP
、IP_PROTOCOL
、PORTS
:您要创建的导向转发规则的 IP 地址、IP 协议和端口。这些设置应与预先存在的基本转发规则匹配。REGION
:您正在创建的转发规则的区域。SOURCE_IP_ADDRESS_RANGES
:以英文逗号分隔的 IP 地址或 IP 地址范围的列表。只有在传入数据包的来源 IP 地址属于此处设置的其中一个 IP 地址范围时,此转发规则才会转发流量。
使用以下命令删除导向转发规则。您必须先删除负载均衡器正在使用的所有导向转发规则,然后才能删除负载均衡器本身。
gcloud compute forwarding-rules delete STEERING_FORWARDING_RULE \ --region=REGION
配置故障切换政策
如需配置故障切换政策,请参阅为外部直通式网络负载均衡器配置故障切换。
配置加权负载均衡
如需配置加权负载均衡,请参阅配置加权负载均衡。
后续步骤
- 如需了解如何将外部直通式网络负载均衡器从目标池后端迁移到区域级后端服务,请参阅将外部直通式网络负载均衡器从目标池迁移到后端服务。
- 如需为多个 IP 协议(支持 IPv4 和 IPv6 流量)配置外部直通式网络负载均衡器,请参阅为多个 IP 协议设置外部直通式网络负载均衡器。
- 如需使用可用区级网络端点组 (NEG) 后端配置外部直通式网络负载均衡器,以便您将数据包转发到虚拟机实例的非
nic0
网络接口,请参阅使用可用区级 NEG 后端设置外部直通式网络负载均衡器。 - 如需使用 Google Cloud Armor 为外部直通式网络负载均衡器配置高级网络 DDoS 防护,请参阅配置高级网络 DDoS 防护。
- 如需删除资源,请参阅清理负载均衡器设置。