本指南介绍如何创建基于后端服务的外部直通网络负载均衡器,以对 TCP、UDP、ESP、GRE、ICMP 和 ICMPv6 流量进行负载均衡。如果要对使用 TCP 或 UDP 以外的 IP 协议的流量进行负载均衡,则可以使用这样的配置。基于目标池的外部直通式网络负载均衡器不支持此功能。
如需为 TCP 或 UDP 以外的 IP 协议配置外部直通式网络负载均衡器,您需要创建将协议设置为 L3_DEFAULT
的转发规则。此转发规则指向将协议设置为 UNSPECIFIED
的后端服务。
在此示例中,我们使用两个外部直通网络负载均衡器在 us-central1
区域的两个可用区级代管式实例组中的后端虚拟机之间分配流量。两个负载均衡器接收相同的外部 IP 地址的流量。
一个负载均衡器具有使用协议 TCP
和端口 80 的转发规则,另一个负载均衡器具有使用协议 L3_DEFAULT
的转发规则。到达端口 80 上的 IP 地址的 TCP 流量由 TCP
转发规则处理。与 TCP 专用转发规则不匹配的所有其他流量都由 L3_DEFAULT
转发规则处理。
此场景会在运行状况良好的实例之间分配流量。为此,您需要创建 TCP 健康检查,以确保仅将流量发送给运行状况良好的实例。
外部直通式网络负载均衡器是区域级负载均衡器。所有负载均衡器组件都必须位于同一区域。
准备工作
安装 Google Cloud CLI。如需全面了解此工具,请参阅 gcloud CLI 概览。您可以在 API 和 gcloud 参考文档中找到与负载均衡相关的命令。
如果您之前未运行过 gcloud 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 客机环境或提供同等功能的其他进程。
为端口 80 上的 TCP 流量创建实例组
控制台
创建实例模板。在 Google Cloud 控制台中,进入实例模板页面。
- 点击创建实例模板。
- 对于名称,输入
ig-us-template-tcp-80
。 - 确保启动磁盘已设置为 Debian 映像,例如 Debian GNU/Linux 10 (buster)。本文中的说明使用仅 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://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2
展开网络部分,然后指定以下内容:
- 对于网络标记,请添加
network-lb-tcp-80
。 - 对于网络接口,请点击默认接口并配置以下字段:
- 网络:
lb-network
- 子网:
lb-subnet
- 网络:
- 对于网络标记,请添加
点击创建。
创建代管式实例组。转到 Google Cloud 控制台中的实例组页面。
- 点击创建实例组。
- 选择新的代管式实例组(无状态)。如需了解详情,请参阅无状态或有状态 MIG。
- 为名称输入
ig-us-tcp-80
。 - 在位置下方,选择单个可用区。
- 对于区域,请选择
us-central1
。 - 对于可用区,请选择
us-central1-a
。 - 在实例模板下,选择
ig-us-template-tcp-80
。 指定要在组中创建的实例数。
对于此示例,请在自动扩缩下指定以下选项:
- 对于自动扩缩模式,请选择
Off:do not autoscale
。 - 对于实例数上限,请输入
2
。
- 对于自动扩缩模式,请选择
点击创建。
gcloud
本指南中的 gcloud
说明假定您使用的是 Cloud Shell 或安装了 bash 的其他环境。
使用
gcloud compute instance-templates create
命令创建含有 HTTP 服务器的虚拟机实例模板。如需同时处理 IPv4 和 IPv6 流量,请使用以下命令。
gcloud compute instance-templates create ig-us-template-tcp-80 \ --region=us-central1 \ --network=lb-network \ --subnet=lb-subnet \ --ipv6-network-tier=PREMIUM \ --stack-type=IPv4_IPv6 \ --tags=network-lb-tcp-80 \ --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-tcp-80 \ --region=us-central1 \ --network=lb-network \ --subnet=lb-subnet \ --tags=network-lb-tcp-80 \ --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-tcp-80 \ --zone us-central1-a \ --size 2 \ --template ig-us-template-tcp-80
为端口 8080 上的 TCP、UDP、ESP 和 ICMP 流量创建实例组
控制台
创建实例模板。在 Google Cloud 控制台中,进入实例模板页面。
- 点击创建实例模板。
- 为名称输入
ig-us-template-l3-default
。 - 确保启动磁盘已设置为 Debian 映像,例如 Debian GNU/Linux 10 (buster)。本文中的说明使用仅 Debian 支持的命令,例如
apt-get
。 - 展开高级选项部分。
展开管理部分,然后将以下脚本复制到启动脚本字段中。启动脚本还会将 Apache 服务器配置为监听端口
8080
,而不是端口80
。#! /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 sed -ire 's/^Listen 80$/Listen 8080/g' /etc/apache2/ports.conf systemctl restart apache2
展开网络部分,然后指定以下内容:
- 对于网络标记,请添加
network-lb-l3-default
。 - 对于网络接口,请点击默认接口并配置以下字段:
- 网络:
lb-network
- 子网:
lb-subnet
- 网络:
- 对于网络标记,请添加
点击创建。
创建代管式实例组。转到 Google Cloud 控制台中的实例组页面。
- 点击创建实例组。
- 选择新的代管式实例组(无状态)。如需了解详情,请参阅无状态或有状态 MIG。
- 为名称输入
ig-us-l3-default
。 - 在位置下方,选择单个可用区。
- 对于区域,请选择
us-central1
。 - 对于可用区,请选择
us-central1-c
。 - 在实例模板下,选择
ig-us-template-l3-default
。 指定要在组中创建的实例数。
对于此示例,请在自动扩缩下指定以下选项:
- 对于自动扩缩模式,请选择
Off:do not autoscale
。 - 对于实例数上限,请输入
2
。
- 对于自动扩缩模式,请选择
点击创建。
gcloud
本指南中的 gcloud
说明假定您使用的是 Cloud Shell 或安装了 bash 的其他环境。
使用
gcloud compute instance-templates create
命令创建含有 HTTP 服务器的虚拟机实例模板。启动脚本还会将 Apache 服务器配置为侦听端口
8080
,而不是端口80
。如需同时处理 IPv4 和 IPv6 流量,请使用以下命令。
gcloud compute instance-templates create ig-us-template-l3-default \ --region=us-central1 \ --network=lb-network \ --subnet=lb-subnet \ --ipv6-network-tier=PREMIUM \ --stack-type=IPv4_IPv6 \ --tags=network-lb-l3-default \ --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 sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'
或者,如果您只想处理 IPv4 流量,请使用以下命令。
gcloud compute instance-templates create ig-us-template-l3-default \ --region=us-central1 \ --network=lb-network \ --subnet=lb-subnet \ --tags=network-lb-l3-default \ --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 sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'
使用
gcloud compute instance-groups managed create
命令在可用区中创建一个代管式实例组。gcloud compute instance-groups managed create ig-us-l3-default \ --zone us-central1-c \ --size 2 \ --template ig-us-template-l3-default
配置防火墙规则
创建以下防火墙规则:
- 允许外部 TCP 流量通过端口 80(使用目标标记
network-lb-tcp-80
)到达ig-us-tcp-80
实例组中的后端实例的防火墙规则。创建单独的防火墙规则以允许 IPv4 和 IPv6 流量。 - 允许其他外部流量(端口 8080 上的 TCP、UDP、ESP 和 ICMP)到达
ig-us-l3-default
实例组中的后端实例的防火墙规则(使用目标标记network-lb-l3-default
)。创建单独的防火墙规则以允许 IPv4 和 IPv6 流量。
此示例会创建防火墙规则,以允许来自所有来源范围的流量到达已配置端口上的后端实例。如果要专门为健康检查探测创建单独的防火墙规则,请使用健康检查概览:探测 IP 范围和防火墙规则中记录的来源 IP 地址范围。
控制台
- 在 Google Cloud 控制台中,转到防火墙页面。
前往“防火墙政策” - 如需允许 IPv4 TCP 流量到达
ig-us-tcp-80
实例组中的后端,请创建以下防火墙规则。- 点击创建防火墙规则。
- 输入
allow-network-lb-tcp-80-ipv4
作为名称。 - 选择要应用防火墙规则的网络(默认)。
- 在目标下,选择指定的目标标记。
- 在目标标记字段中,输入
network-lb-tcp-80
。 - 将来源过滤条件设置为 IPv4 范围。
- 将来源 IPv4 地址范围设置为
0.0.0.0/0
(允许来自任何来源的流量)。这样,外部流量和健康检查探测都会到达后端实例。 - 在协议和端口下,选择指定的协议和端口。选中 TCP 复选框并输入
80
。 - 点击创建。新的防火墙规则可能需要一段时间才能在控制台中显示,或者您可能需要点击刷新才能看见规则。
- 如需允许 IPv4 UDP、ESP 和 ICMP 流量到达
ig-us-l3-default
实例组中的后端,请创建以下防火墙规则。- 点击创建防火墙规则。
- 输入
allow-network-lb-l3-default-ipv4
作为名称。 - 选择要应用防火墙规则的网络(默认)。
- 在目标下,选择指定的目标标记。
- 在目标标记字段中,输入
network-lb-l3-default
。 - 将来源过滤条件设置为 IPv4 范围。
- 将来源 IPv4 地址范围设置为
0.0.0.0/0
(允许来自任何来源的流量)。这样,外部流量和健康检查探测都会到达后端实例。 - 在协议和端口下,选择指定的协议和端口。
- 选中 TCP 复选框并输入
8080
。 - 选中 UDP 复选框。
- 选择其他复选框,然后输入
esp, icmp
。
- 选中 TCP 复选框并输入
- 点击创建。新的防火墙规则可能需要一段时间才能在控制台中显示,或者您可能需要点击刷新才能看见规则。
- 如需允许 IPv6 TCP 流量到达
ig-us-tcp-80
实例组中的后端,请创建以下防火墙规则。- 点击创建防火墙规则。
- 输入
allow-network-lb-tcp-80-ipv6
作为名称。 - 选择要应用防火墙规则的网络(默认)。
- 在目标下,选择指定的目标标记。
- 在目标标记字段中,输入
network-lb-tcp-80
。 - 将来源过滤条件设置为 IPv6 范围。
- 将来源 IPv6 范围设置为
::/0
(允许来自任何来源的流量)。这样,外部流量和健康检查探测都会到达后端实例。 - 在协议和端口下,选择指定的协议和端口。点击 TCP 旁边的复选框,然后输入
80
。 - 点击创建。新的防火墙规则可能需要一段时间才能在控制台中显示,或者您可能需要点击刷新才能看见规则。
- 如需允许 IPv6 UDP、ESP 和 ICMPv6 流量到达
ig-us-l3-default
实例组中的后端,请创建以下防火墙规则。此防火墙规则还允许 TCP 健康检查探测到达端口 8080 上的实例。- 点击创建防火墙规则。
- 输入
allow-network-lb-l3-default-ipv6
作为名称。 - 选择要应用防火墙规则的网络(默认)。
- 在目标下,选择指定的目标标记。
- 在目标标记字段中,输入
network-lb-l3-default
。 - 将来源过滤条件设置为 IPv6 范围。
- 将来源 IPv6 范围设置为
::/0
(允许来自任何来源的流量)。这样,外部流量和健康检查探测都会到达后端实例。 - 在协议和端口下,选择指定的协议和端口。
- 点击 TCP 旁边的复选框,然后输入
8080
。 - 点击 UDP 旁边的复选框。
- 点击其他旁边的复选框,然后输入
esp, 58
。
- 点击 TCP 旁边的复选框,然后输入
- 点击创建。新的防火墙规则可能需要一段时间才能在控制台中显示,或者您可能需要点击刷新才能看见规则。
gcloud
如需允许 IPv4 TCP 流量到达
ig-us-tcp-80
实例组中的后端,请创建以下防火墙规则。gcloud compute firewall-rules create allow-network-lb-tcp-80-ipv4 \ --network=lb-network \ --target-tags network-lb-tcp-80 \ --allow tcp:80 \ --source-ranges=0.0.0.0/0
如需允许 IPv4 UDP、ESP 和 ICMP 流量到达
ig-us-l3-default
实例组中的后端,请创建以下防火墙规则。此防火墙规则还允许 TCP 健康检查探测到达端口 8080 上的实例。gcloud compute firewall-rules create allow-network-lb-l3-default-ipv4 \ --network=lb-network \ --target-tags network-lb-l3-default \ --allow tcp:8080,udp,esp,icmp \ --source-ranges=0.0.0.0/0
如需允许 IPv6 TCP 流量到达
ig-us-tcp-80
实例组中的后端,请创建以下防火墙规则。gcloud compute firewall-rules create allow-network-lb-tcp-80-ipv6 \ --network=lb-network \ --target-tags network-lb-tcp-80 \ --allow tcp:80 \ --source-ranges=::/0
如需允许 IPv6 UDP、ESP 和 ICMPv6 流量到达
ig-us-l3-default
实例组中的后端,请创建以下防火墙规则。此防火墙规则还允许 TCP 健康检查探测到达端口 8080 上的实例。gcloud compute firewall-rules create allow-network-lb-l3-default-ipv6 \ --network=lb-network \ --target-tags network-lb-l3-default \ --allow tcp:8080,udp,esp,58 \ --source-ranges=::/0
配置负载均衡器
接下来,设置负载均衡器。配置一个负载均衡器用于处理端口 80 上的 TCP 流量,另一个负载均衡器用于处理端口 8080 上的 TCP、UDP、ESP 和 ICMP 流量。两个负载均衡器将使用与其转发规则相同的外部 IP 地址。
配置负载均衡器时,后端虚拟机实例将接收发往您配置的静态外部 IP 地址的数据包。如果您使用的是 Compute Engine 提供的映像,则系统会自动配置您的实例处理此 IP 地址。如果您使用任何其他映像,则必须将此地址配置为 eth0
上的别名或每个实例上的环回地址。
控制台
gcloud
预留静态外部 IP 地址。
对于 IPv4 流量:为负载均衡器创建静态外部 IP 地址。
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
为端口
80
创建 TCP 健康检查。此健康检查用于验证ig-us-tcp-80
实例组中的后端的健康状况。gcloud compute health-checks create tcp tcp-health-check-80 \ --region us-central1 \ --port 80
为端口
8080
创建 TCP 健康检查。此健康检查用于验证ig-us-l3-default
实例组中的后端的健康状况。gcloud compute health-checks create tcp tcp-health-check-8080 \ --region us-central1 \ --port 8080
为端口
80
上的 TCP 流量创建第一个负载均衡器。创建后端服务,并将协议设置为
TCP
。gcloud compute backend-services create backend-service-tcp-80 \ --protocol TCP \ --health-checks tcp-health-check-80 \ --health-checks-region us-central1 \ --region us-central1
将后端实例组添加到后端服务。
gcloud compute backend-services add-backend backend-service-tcp-80 \ --instance-group ig-us-tcp-80 \ --instance-group-zone us-central1-a \ --region us-central1
对于 IPv4 流量:创建转发规则以将端口
80
上的传入 TCP 流量路由到后端服务。TCP
是默认转发规则协议,无需明确设置。使用第 1 步中预留的 IP 地址作为负载均衡器的静态外部 IP 地址。
gcloud compute forwarding-rules create forwarding-rule-tcp-80-ipv4 \ --load-balancing-scheme external \ --region us-central1 \ --ports 80 \ --address network-lb-ipv4 \ --backend-service backend-service-tcp-80
对于 IPv6 流量:创建转发规则以将端口
80
上的传入 TCP 流量路由到后端服务。TCP
是默认转发规则协议,无需明确设置。使用第 1 步中预留的 IPv6 地址范围作为负载均衡器的静态外部 IP 地址。使用的子网必须是具有外部 IPv6 子网范围的双栈子网。
gcloud compute forwarding-rules create forwarding-rule-tcp-80-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 backend-service-tcp-80
为端口
8080
上的 TCP、UDP、ESP 和 ICMP 流量创建第二个负载均衡器。创建后端服务,并将协议设置为
UNSPECIFIED
。gcloud compute backend-services create backend-service-l3-default \ --protocol UNSPECIFIED \ --health-checks tcp-health-check-8080 \ --health-checks-region us-central1 \ --region us-central1
将后端实例组添加到后端服务。
gcloud compute backend-services add-backend backend-service-l3-default \ --instance-group ig-us-l3-default \ --instance-group-zone us-central1-c \ --region us-central1
对于 IPv4 流量:创建协议设置为
L3_DEFAULT
的转发规则,以处理其余所有受支持的 IP 协议流量(端口8080
上的 TCP、UDP、ESP 和 ICMP)。所有端口都必须配置有L3_DEFAULT
转发规则。使用您用于前一个负载均衡器的外部 IPv4 地址。
gcloud compute forwarding-rules create forwarding-rule-l3-default-ipv4 \ --load-balancing-scheme external \ --region us-central1 \ --ports all \ --ip-protocol L3_DEFAULT \ --address network-lb-ipv4 \ --backend-service backend-service-l3-default
对于 IPv6 流量:创建协议设置为
L3_DEFAULT
的转发规则,以处理其余所有受支持的 IP 协议流量(端口8080
上的 TCP、UDP、ESP 和 ICMP)。所有端口都必须配置有L3_DEFAULT
转发规则。使用第 1 步中预留的 IPv6 地址范围作为负载均衡器的静态外部 IP 地址。使用的子网必须是具有外部 IPv6 子网范围的双栈子网。
gcloud compute forwarding-rules create forwarding-rule-l3-default-ipv6 \ --load-balancing-scheme external \ --region us-central1 \ --network-tier PREMIUM \ --ip-version IPV6 \ --subnet lb-subnet \ --address network-lb-ipv6 \ --ports all \ --ip-protocol L3_DEFAULT \ --backend-service backend-service-l3-default
测试负载均衡器
至此您已经配置好了负载均衡服务,接下来可以开始将流量发送到负载均衡器的外部 IP 地址,并观察流量被分发到不同的后端实例。
查询负载均衡器的外部 IP 地址
控制台
- 在高级负载均衡页面中,转到转发规则标签页。
转到“转发规则”标签页 - 找到负载均衡器使用的转发规则。
- 在 IP 地址列中,记下为每个 IPv4 和 IPv6 转发规则列出的外部 IP 地址。
gcloud:IPv4
输入以下命令,查看负载均衡器使用的转发规则的外部 IP 地址。
gcloud compute forwarding-rules describe forwarding-rule-tcp-80-ipv4 \ --region us-central1
此示例对两个 IPv4 转发规则使用相同的 IP 地址,从而也可以使用 forwarding-rule-l3-default-ipv4
来正常工作。
gcloud:IPv6
输入以下命令,查看负载均衡器使用的 forwarding-rule-tcp-80-ipv6
转发规则的外部 IPv6 地址。
gcloud compute forwarding-rules describe forwarding-rule-tcp-80-ipv6 \ --region us-central1
此示例对两个 IPv6 转发规则使用相同的 IP 地址,因此使用 forwarding-rule-l3-default-ipv6
也有效。
将流量发送到负载均衡器
此过程会将外部流量发送到负载均衡器。运行以下测试以确保 ig-us-tcp-80
实例组对端口 80 上的 TCP 流量进行负载均衡,而所有其他流量(端口 8080 上的 TCP、UDP、ESP 和 ICMP)正在由 ig-us-l3-default
实例组处理该实例组。
在端口 80 上使用 TCP 请求验证行为
使用
curl
联系负载均衡器以发出 IP 地址(通过端口 80 上的 TCP)。从具有 IPv4 连接的客户端,运行以下命令:
$ while true; do curl -m1 IP_ADDRESS; done
从具有 IPv6 连接的客户端,运行以下命令:
$ while true; do curl -m1 http://IPV6_ADDRESS; done
比方说,如果分配的 IPv6 地址为
[2001:db8:1:1:1:1:1:1/96]
,则该命令应如下所示:$ while true; do curl -m1 http://[2001:db8:1:1:1:1:1:1]; done
请注意
curl
命令返回的结果。该结果文本中显示了生成响应的后端虚拟机的名称,例如:Page served from: VM_NAME
。响应应仅来自ig-us-tcp-80
实例组中的实例。如果响应最初不成功,您可能需要等待大约 30 秒,以便完全加载配置并且实例被标记为运行状况良好,然后再次尝试。
在端口 8080 上使用 TCP 请求验证行为
使用 curl
向负载均衡器发出 Web 请求(通过端口 8080
上的 TCP)以联系其 IP 地址。
从具有 IPv4 连接的客户端,运行以下命令:
$ while true; do curl -m1 IPV4_ADDRESS:8080; done
从具有 IPv6 连接的客户端,运行以下命令:
$ while true; do curl -m1 http://IPV6_ADDRESS; done
比方说,如果分配的 IPv6 地址为
[2001:db8:1:1:1:1:1:1/96]
,则该命令应如下所示:$ while true; do curl -m1 http://[2001:db8:1:1:1:1:1:1]:8080; done
请注意 curl
命令返回的结果。响应应仅来自 ig-us-l3-default
实例组中的实例。
这表明发送到端口 8080
的负载均衡器的 IP 地址的任何流量仅由 ig-us-l3-default
实例组中的后端处理。
使用 ICMP 请求验证行为
如需验证使用 ICMP 流量的行为,您需要从 tcpdump
命令捕获输出,以确认只有 ig-us-l3-default
实例组中的后端虚拟机正在处理发送到负载均衡器的 ICMP 请求。
通过 SSH 连接到后端虚拟机。
在 Google Cloud 控制台中,前往虚拟机实例页面。
转到“虚拟机实例”页面在虚拟机实例列表中,点击要连接的实例所在行中的 SSH。
运行以下命令以使用
tcpdump
开始监听 ICMP 流量。sudo tcpdump icmp -w ~/icmpcapture.pcap -s0 -c 10000 tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
使 SSH 窗口保持打开状态。
对所有四个后端虚拟机重复第 1 步和第 2 步。
向负载均衡器发出 ICMP 请求。
如需测试 IPv4 响应,请使用
ping
联系负载均衡器的 IPv4 地址。ping IPV4_ADDRESS
如需测试 IPv6 响应,请使用
ping6
联系负载均衡器的 IPv6 地址。ping6 IPV6_ADDRESS
比方说,如果分配的 IPv6 地址为
[2001:db8:1:1:1:1:1:1/96]
,则该命令应如下所示:ping6 2001:db8:1:1:1:1:1:1
返回至每个虚拟机的打开的 SSH 窗口,然后停止
tcpdump
捕获命令。您可以使用 Ctrl+C 来执行此操作。对于每个虚拟机,请检查
icmpcapture.pcap
文件中tcpdump
命令的输出。sudo tcpdump -r ~/icmpcapture.pcap -n
对于
ig-us-l3-default
实例组中的后端虚拟机,您应该会看到类似如下的条目:reading from file /home/[user-directory]/icmpcapture.pcap, link-type EN10MB (Ethernet) 22:13:07.814486 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 1, length 64 22:13:07.814513 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 1, length 64 22:13:08.816150 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 2, length 64 22:13:08.816175 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 2, length 64 22:13:09.817536 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 3, length 64 22:13:09.817560 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 3, length 64 ...
对于
ig-us-tcp-80
实例组中的后端虚拟机,您应该会看到未收到任何数据包,该文件应为空:reading from file /home/[user-directory]/icmpcapture.pcap, link-type EN10MB (Ethernet)
后续步骤
- 如需使用可用区级 NEG 后端配置外部直通式网络负载均衡器,以便您将数据包转发到虚拟机实例的非
nic0
网络接口,请参阅使用可用区级 NEG 设置外部直通式网络负载均衡器。 - 如需了解外部直通式网络负载均衡器如何与后端服务搭配使用,请参阅基于后端服务的外部直通式网络负载均衡器概览。
- 如需了解如何将外部直通式网络负载均衡器从目标池后端转换到区域级后端服务,请参阅将外部直通式网络负载均衡器从目标池迁移到后端服务
- 如需使用 Google Cloud Armor 为外部直通式网络负载均衡器配置高级网络 DDoS 防护,请参阅配置高级网络 DDoS 防护。
- 如需删除资源,请参阅清理负载均衡器设置。