本指南介绍如何部署具有可用区级网络端点组 (NEG) 后端的内部直通网络负载均衡器。可用区级 NEG 是可用区级资源,表示单个子网内 Google Cloud 资源 IP 地址的集合或 IP 地址/端口组合的集合。 借助 NEG,您可以创建表示软件服务的 IP 地址或 IP 地址/端口组合的逻辑分组,而不是创建整个虚拟机。
在按照本指南进行操作之前,请先熟悉以下内容:
内部直通网络负载均衡器仅支持具有 GCE_VM_IP
端点的可用区级 NEG。
权限
为按照本指南进行操作,您需要创建实例并修改项目中的网络。您应该具有项目的 Owner 或 Editor 角色,或者应该具有以下 Compute Engine IAM 角色:
任务 | 所需角色 |
---|---|
创建网络、子网和负载均衡器组件 | Network Admin |
添加和移除防火墙规则 | Security Admin |
创建实例 | Compute Instance Admin |
如需了解详情,请参阅以下指南:
设置概览
本指南介绍如何配置和测试具有 GCE_VM_IP
可用区级 NEG 后端的内部直通网络负载均衡器。此部分中的步骤介绍了如何配置以下内容:
- 名为
lb-network
的示例 VPC 网络,其中包含自定义子网 - 允许后端虚拟机的传入连接的防火墙规则
- 四个虚拟机:
us-west1-a
地区中的虚拟机vm-a1
和vm-a2
us-west1-c
地区中的虚拟机vm-c1
和vm-c2
- 两个后端区域 NEG,区域
us-west1-a
中的neg-a
,区域us-west1-c
中的neg-c
。每个 NEG 都将具有以下端点:neg-a
包含以下两个端点:- 虚拟机
vm-a1
的内部 IP 地址 - 虚拟机
vm-a2
的内部 IP 地址
- 虚拟机
neg-c
包含以下两个端点:- 虚拟机
vm-c1
的内部 IP 地址 - 虚拟机
vm-c2
的内部 IP 地址
- 虚拟机
us-west1-a
中用于测试连接的客户端虚拟机 (vm-client
)。- 以下内部直通网络负载均衡器组件:
us-west1
区域中的内部后端服务,用于管理两个地区 NEG 的连接分布- 负载均衡器前端的内部转发规则和内部 IP 地址
此示例的架构如下所示:
配置网络、区域和子网
本页面介绍的内部直通式网络负载均衡器示例是在一个名为 lb-network
的自定义模式 VPC 网络中创建的。
在此示例中,后端虚拟机和负载均衡器的组件位于以下地区和子网中:
- 地区:
us-west1
- 子网:
lb-subnet
(其主要 IP 地址范围为10.1.2.0/24
)
如需创建示例网络和子网,请按照以下步骤操作。
控制台
- 转到 Google Cloud 控制台中的“VPC 网络”页面。
转到“VPC 网络”页面 - 点击创建 VPC 网络。
- 输入
lb-network
作为名称。 - 在子网部分中执行以下操作:
- 将子网创建模式设置为自定义。
- 在新子网部分中,输入以下信息:
- 名称:
lb-subnet
- 区域:
us-west1
- IP 地址范围:
10.1.2.0/24
- 点击完成。
- 名称:
- 点击创建。
gcloud
创建自定义 VPC 网络:
gcloud compute networks create lb-network --subnet-mode=custom
- 在
lb-network
网络中,为us-west1
区域中的后端虚拟机创建子网:
gcloud compute networks subnets create lb-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1
- 在
配置防火墙规则
此示例使用以下防火墙规则:
fw-allow-lb-access
:适用于 VPC 网络中所有目标的入站规则,允许来自10.1.2.0/24
范围内来源的流量。此规则允许来自lb-subnet
中任何客户端的传入流量。fw-allow-ssh
:入站流量规则,它适用于负载均衡实例,允许从任何地址到 TCP 端口 22 的传入 SSH 连接。您可以为此规则选择限制性更高的源 IP 地址范围;例如,您可以仅指定要从中启动 SSH 会话的系统的 IP 地址范围。此示例使用目标标记allow-ssh
来标识它应该应用到的虚拟机。
如果不使用上述防火墙规则,则默认拒绝入站规则会阻止传入后端实例的流量。
控制台
- 在 Google Cloud 控制台中,转到防火墙页面。
前往“防火墙政策” - 点击创建防火墙规则并输入以下信息,以创建允许子网流量的规则:
- 名称:
fw-allow-lb-access
- 网络:
lb-network
- 优先级:
1000
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:网络中的所有实例
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
10.1.2.0/24
- 协议和端口:允许全部
- 名称:
- 点击创建。
- 再次点击创建防火墙规则,以创建允许传入 SSH 连接的规则:
- 名称:
fw-allow-ssh
- 网络:
lb-network
- 优先级:
1000
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
allow-ssh
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
0.0.0.0/0
- 协议和端口:选择指定的协议和端口,然后输入
tcp:22
- 名称:
- 点击创建。
- 第三次点击创建防火墙规则,以创建允许 Google Cloud 健康检查的规则:
- 名称:
fw-allow-health-check
- 网络:
lb-network
- 优先级:
1000
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
allow-health-check
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
130.211.0.0/22
和35.191.0.0/16
- 协议和端口:允许全部
- 名称:
- 点击创建。
gcloud
创建
fw-allow-lb-access
防火墙规则以允许与子网通信:gcloud compute firewall-rules create fw-allow-lb-access \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=10.1.2.0/24 \ --rules=tcp,udp,icmp
创建
fw-allow-ssh
防火墙规则,允许通过 SSH 连接到网络标记为allow-ssh
的虚拟机。如果省略source-ranges
,Google Cloud 会将规则解释为表示所有来源。gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
创建
fw-allow-health-check
规则以允许 Google Cloud 健康检查。gcloud compute firewall-rules create fw-allow-health-check \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp,udp,icmp
创建 NEG 后端
为了展示内部直通网络负载均衡器的区域级性质,此示例会分别在可用区 us-west1-a
和 us-
west1-c
中使用两个可用区级 NEG 后端,即 neg-a
和 neg-c
。流量在两个 NEG 以及每个 NEG 中的端点之间进行负载均衡。
创建虚拟机
为了支持此示例,每个虚拟机均运行一个 Apache 网络服务器,该服务器监听以下 TCP 端口:80、8008、8080、8088、443 和 8443。
每个虚拟机均分配有 lb-subnet
的内部 IP 地址和临时外部(公共)IP 地址。您稍后可以移除外部 IP 地址。
后端虚拟机不需要外部 IP 地址;但它们在本示例中非常有用,因为它们允许虚拟机从互联网下载 Apache,并且允许您使用 SSH 进行连接。默认情况下,Apache 配置为绑定到任何 IP 地址。内部直通网络负载均衡器通过保留目标 IP 地址来传送数据包。
确保在后端虚拟机上运行的服务器软件监听的是负载均衡器内部转发规则的 IP 地址。
为便于说明,这些后端虚拟机均运行 Debian GNU Linux 10。
控制台
创建虚拟机
- 转到 Google Cloud 控制台中的“虚拟机实例”页面。
转到“虚拟机实例”页面 - 使用以下名称和区域组合重复执行以下步骤,以创建四个虚拟机。
- 名称:
vm-a1
,可用区:us-west1-a
- 名称:
vm-a2
,可用区:us-west1-a
- 名称:
vm-c1
,可用区:us-west1-c
- 名称:
vm-c2
,可用区:us-west1-c
- 名称:
- 点击创建实例。
- 按照第 2 步中的说明设置名称。
- 对于区域,选择
us-west1
,然后按照第 2 步中的说明选择一个可用区。 - 在启动磁盘部分中,确保为启动磁盘选项选择了 Debian GNU/Linux 12 (bookworm)。如有必要,请点击选择以更改映像。
点击高级选项并进行以下更改:
- 点击网络并添加以下网络标记:
allow-ssh
和allow-health-check
- 点击网络接口下的修改
- 网络:
lb-network
- 子网:
lb-subnet
- 主要内部 IP:临时(自动)
- 外部 IP:临时
按钮并进行以下更改,然后点击完成: - 网络:
点击管理。在启动脚本字段中,复制并粘贴以下脚本内容。所有四个虚拟机的脚本内容均相同:
#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" 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 echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed
- 点击网络并添加以下网络标记:
点击创建。
gcloud
使用 [VM-NAME]
和 [ZONE]
的下列四种组合运行以下命令四次,以创建四个虚拟机。所有四个虚拟机的脚本内容均相同。
[VM-NAME]
为vm-a1
,[ZONE]
为us-west1-a
[VM-NAME]
为vm-a2
,[ZONE]
为us-west1-a
[VM-NAME]
为vm-c1
,[ZONE]
为us-west1-c
[VM-NAME]
为vm-c2
,[ZONE]
为us-west1-c
gcloud compute instances create VM-NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check \ --subnet=lb-subnet \ --metadata=startup-script='#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" 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 prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed'
创建 GCE_VM_IP
可用区级 NEG
NEG(neg-a
和 neg-c
)必须在上一步中创建的虚拟机所在的可用区中创建。
控制台
如需创建可用区级网络端点组,请执行以下操作:
- 转到 Google Cloud 控制台中的“网络端点组”页面。
转到“网络端点组”页面 - 点击创建网络端点组。
- 输入可用区级 NEG 的名称:
neg-a
。 - 选择网络端点组类型:网络端点组(可用区级)。
- 选择网络:lb-network
- 选择子网:lb-subnet
- 选择可用区:us-west1-a
- 点击创建。
- 重复上述步骤,在 us-west1-c 可用区中创建名为
neg-c
的第二个可用区级 NEG。
将端点添加到可用区级 NEG:
- 转到 Google Cloud 控制台中的“网络端点组”页面。
进入“网络端点组” - 点击上一步中创建的第一个网络端点组的名称 (neg-a)。您会看到网络端点组详情页面。
在此组中的网络端点部分,点击添加网络端点。您会看到添加网络端点页面。
- 点击虚拟机实例,然后选择 vm-a1 以将其内部 IP 地址添加为网络端点。
- 点击创建。
- 再次点击添加网络端点,然后在虚拟机实例下选择 vm-a2。
- 点击创建。
点击上一步中创建的第二个网络端点组的名称 (neg-c)。您会看到网络端点组详情页面。
在此组中的网络端点部分,点击添加网络端点。您会看到添加网络端点页面。
- 点击虚拟机实例,然后选择 vm-c1 以将其内部 IP 地址添加为网络端点。
- 点击创建。
- 再次点击添加网络端点,然后在虚拟机实例下选择 vm-c2。
- 点击创建。
gcloud
使用
gcloud compute network-endpoint-groups create
命令在us-west1-a
中创建名为neg-a
的GCE_VM_IP
区域 NEG:gcloud compute network-endpoint-groups create neg-a \ --network-endpoint-type=gce-vm-ip \ --zone=us-west1-a \ --network=lb-network \ --subnet=lb-subnet
将端点添加到
neg-a
:gcloud compute network-endpoint-groups update neg-a \ --zone=us-west1-a \ --add-endpoint='instance=vm-a1' \ --add-endpoint='instance=vm-a2'
使用
gcloud compute network-endpoint-groups create
命令在us-west1-c
中创建名为neg-c
的GCE_VM_IP
区域 NEG:gcloud compute network-endpoint-groups create neg-c \ --network-endpoint-type=gce-vm-ip \ --zone=us-west1-c \ --network=lb-network \ --subnet=lb-subnet
将端点添加到
neg-c
:gcloud compute network-endpoint-groups update neg-c \ --zone=us-west1-c \ --add-endpoint='instance=vm-c1' \ --add-endpoint='instance=vm-c2'
配置负载均衡器组件
以下步骤会配置所有内部直通网络负载均衡器组件:
后端服务:在此示例中,您需要通过负载均衡器传递 HTTP 流量。因此,您需要使用 TCP,而不是 UDP。
转发规则:本示例创建了一条内部转发规则。
内部 IP 地址:在此示例中,您在创建转发规则时指定了内部 IP 地址
10.1.2.99
。
控制台
gcloud
创建新的区域 HTTP 健康检查。
gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
创建后端服务:
gcloud compute backend-services create bs-ilb \ --load-balancing-scheme=internal \ --protocol=tcp \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1
将两个地区 NEG(
neg-a
和neg-c
)添加到后端服务:gcloud compute backend-services add-backend bs-ilb \ --region=us-west1 \ --network-endpoint-group=neg-a \ --network-endpoint-group-zone=us-west1-a
gcloud compute backend-services add-backend bs-ilb \ --region=us-west1 \ --network-endpoint-group=neg-c \ --network-endpoint-group-zone=us-west1-c
为后端服务创建转发规则。创建转发规则时,请指定
10.1.2.99
作为子网中的内部 IP 地址。gcloud compute forwarding-rules create fr-ilb \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=bs-ilb \ --backend-service-region=us-west1
测试负载均衡器
此测试通过单独的客户端虚拟机连接负载均衡器;也就是说,并非使用负载均衡器的后端虚拟机。预期的行为是流量分布在四个后端虚拟机中,因为没有配置会话亲和性。
创建测试客户端虚拟机
此示例在后端(服务器)虚拟机所在的同一区域创建一个客户端虚拟机 (vm-client
)。该客户端用于验证负载均衡器的配置,并演示测试部分中所述的预期行为。
控制台
- 转到 Google Cloud 控制台中的“虚拟机实例”页面。
转到“虚拟机实例”页面 - 点击创建实例。
- 将名称设置为
vm-client
。 - 将可用区设置为
us-west1-a
。 - 点击高级选项并进行以下更改:
- 点击网络并将
allow-ssh
添加到网络标记。 - 点击网络接口下的修改按钮并进行以下更改,然后点击完成:
- 网络:
lb-network
- 子网:
lb-subnet
- 主要内部 IP:临时(自动)
- 外部 IP:临时
- 网络:
- 点击网络并将
- 点击创建。
gcloud
客户端虚拟机可以位于负载均衡器所在的同一区域的任何可用区中,并且可以使用该区域中的任何子网。在此示例中,客户端位于 us-west1-a
区域,并使用与后端虚拟机相同的子网。
gcloud compute instances create vm-client \ --zone=us-west1-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh \ --subnet=lb-subnet
将流量发送到负载均衡器
执行以下步骤以连接到负载均衡器。
连接到客户端虚拟机实例。
gcloud compute ssh vm-client --zone=us-west1-a
使用
curl
连接负载均衡器的 IP 地址,通过这种方式向负载均衡器发送 Web 请求。重复该请求,您可以看到响应来自不同的后端虚拟机。根据每个后端虚拟机上/var/www/html/index.html
的内容,生成响应的虚拟机的名称会显示在 HTML 响应的文本中。预期响应如Page served from: vm-a1
和Page served from: vm-a2
所示。curl http://10.1.2.99
转发规则配置为提供端口
80
、8008
、8080
和8088
。如需向这些端口发送流量,请在 IP 地址后附加英文冒号 (:
) 和端口号,如下所示:curl http://10.1.2.99:8008
后续步骤
- 如需设置其他配置选项(例如启用全球访问权限、接受所有端口上的流量以及使用两个转发规则接受多个端口上的流量),请参阅内部直通网络负载均衡器的其他配置选项。
- 如需了解重要的基础知识,请参阅内部直通网络负载均衡器概览。
- 如需了解有关故障切换的重要信息,请参阅内部直通网络负载均衡器的故障切换概念。
- 如需了解如何为内部直通网络负载均衡器配置日志记录和监控功能,请参阅内部直通网络负载均衡器日志记录和监控。
- 如需了解如何从与您的 VPC 网络连接的对等互连网络访问内部直通网络负载均衡器,请参阅内部直通网络负载均衡器和连接的网络。
- 如需了解如何排查内部直通网络负载均衡器的问题,请参阅内部直通网络负载均衡器问题排查。