区域级内部代理网络负载均衡器是一种基于代理的第 4 层区域级负载均衡器,可让您在只能由同一 VPC 网络中的客户端或连接到您的 VPC 网络的客户端访问的内部 IP 地址后面运行和扩缩 TCP 服务流量。
本指南介绍如何设置具有可用区级网络端点组 (NEG) 后端的区域级内部代理网络负载均衡器。前期准备:
概览
在此示例中,我们将使用负载均衡器在 REGION_A
区域的两个可用区级 NEG 中的后端虚拟机之间分配 TCP 流量。在本示例中,服务是一组配置为在端口 80
做出响应的 Apache 服务器。
在此示例中,您可以配置以下部署:
区域级内部代理网络负载均衡器是区域级负载均衡器。所有负载均衡器组件(后端实例组、后端服务、目标代理和转发规则)必须位于同一区域。
权限
若要按照本指南中的说明进行操作,您必须能够创建实例以及修改项目中的网络。因此,您必须具有项目的 Owner 或 Editor 角色,或者必须拥有以下所有 Compute Engine IAM 角色:
任务 | 所需角色 |
---|---|
创建网络、子网和负载均衡器组件 | Network Admin |
添加和移除防火墙规则 | Security Admin |
创建实例 | Compute Instance Admin |
如需了解详情,请参阅以下指南:
配置网络和子网
您需要一个包含两个子网的 VPC 网络:一个用于负载均衡器的后端,另一个用于负载均衡器的代理。 区域级内部代理网络负载均衡器是区域级负载均衡器。对于 VPC 网络中的流量,如果其来源所在的子网与负载均衡器位于同一区域,那么该流量会被路由到负载均衡器。
本示例使用以下 VPC 网络、区域和子网:
网络:网络是名为
lb-network
的自定义模式 VPC 网络。后端子网:
REGION_A
区域中名为backend-subnet
的子网使用10.1.2.0/24
作为其主要 IP 地址范围。代理子网。
REGION_A
区域中名为proxy-only-subnet
的子网使用10.129.0.0/23
作为其主要 IP 地址范围。
为后端创建网络和子网
控制台
在 Google Cloud 控制台中,进入 VPC 网络页面。
点击创建 VPC 网络。
对于名称,请输入
lb-network
。在子网部分中执行以下操作:
- 将子网创建模式设置为自定义。
- 在新子网部分中,输入以下信息:
- 名称:
backend-subnet
- 区域:
REGION_A
- IP 地址范围:
10.1.2.0/24
- 名称:
- 点击完成。
点击创建。
gcloud
使用
gcloud compute networks create
命令创建自定义 VPC 网络:gcloud compute networks create lb-network --subnet-mode=custom
使用
gcloud compute networks subnets create
命令在REGION_A
区域的lb-network
网络中创建子网:gcloud compute networks subnets create backend-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=REGION_A
创建代理专用子网
代理专用子网提供了一组 IP 地址,供 Google 用于代表您运行 Envoy 代理。代理会终结来自客户端的连接并创建与后端的新连接。
此代理专用子网用于 lb-network
VPC 网络的 REGION_A
区域中所有基于 Envoy 的负载均衡器。
控制台
如果您使用的是 Google Cloud 控制台,则可以稍后在负载均衡页面上创建代理专用子网。
如需立即创建代理专用子网,请按以下步骤操作:
在 Google Cloud 控制台中,进入 VPC 网络页面。
点击共享 VPC 网络的名称:
lb-network
。点击添加子网。
对于名称,请输入
proxy-only-subnet
。对于区域,请选择
REGION_A
。将用途设置为区域级代管式代理。
对于 IP 地址范围,请输入
10.129.0.0/23
。点击添加。
gcloud
使用 gcloud compute networks subnets
create
命令创建代理专用子网。
gcloud compute networks subnets create proxy-only-subnet \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=REGION_A \ --network=lb-network \ --range=10.129.0.0/23
创建防火墙规则
在此示例中,您将创建以下防火墙规则:
fw-allow-health-check
:入站流量规则,它适用于要进行负载均衡的 Google Cloud 实例,允许来自负载均衡器和 Google Cloud 健康检查系统(130.211.0.0/22
和35.191.0.0/16
)的流量。此示例使用目标标记allow-health-check
来标识应该应用此规则的后端虚拟机。fw-allow-ssh
:一个入站流量规则,用于允许从任何地址到 TCP 端口 22 的传入 SSH 连接。您可以为此规则选择限制性更高的源 IP 地址范围;例如,您可以仅指定要从中启动 SSH 会话的系统的 IP 地址范围。此示例使用目标标记allow-ssh
来标识应该应用该规则的虚拟机。fw-allow-proxy-only-subnet
:为代理专用子网创建入站流量允许防火墙规则,以允许负载均衡器与 TCP 端口80
上的后端实例进行通信。此示例使用目标标记allow-proxy-only-subnet
来标识应该应用该规则的后端虚拟机。
控制台
在 Google Cloud 控制台中,转到防火墙页面。
点击创建防火墙规则:
- 输入
fw-allow-health-check
作为名称。 - 在网络下,选择
lb-network
。 - 在目标下,选择指定的目标标记。
- 使用
allow-health-check
填充目标标记字段。 - 将来源过滤条件设置为 IPv4 范围。
- 将来源 IPv4 范围设置为
130.211.0.0/22
和35.191.0.0/16
。 - 在协议和端口下,选择指定的协议和端口。
- 选中 TCP 复选框,然后输入
80
作为端口号。 - 点击创建。
- 输入
再次点击创建防火墙规则,以创建允许传入 SSH 连接的规则:
- 名称:
fw-allow-ssh
- 网络:
lb-network
- 优先级:
1000
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
allow-ssh
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
0.0.0.0/0
- 协议和端口:选择指定的协议和端口,然后输入
tcp:22
- 名称:
点击创建。
再次点击创建防火墙规则,以创建允许从代理专用子网到 Google Cloud 后端的传入连接的规则:
- 名称:
fw-allow-proxy-only-subnet
- 网络:
lb-network
- 优先级:
1000
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
allow-proxy-only-subnet
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
10.129.0.0/23
- 协议和端口:选择指定的协议和端口,然后输入
tcp:80
- 名称:
点击创建。
gcloud
创建
fw-allow-health-check
规则,以允许 Google Cloud 健康检查通过 TCP 端口80
访问后端实例: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:80
创建
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
为代理专用子网创建入站流量允许防火墙规则,以允许负载均衡器与 TCP 端口
80
上的后端实例进行通信:gcloud compute firewall-rules create fw-allow-proxy-only-subnet \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-proxy-only-subnet \ --source-ranges=10.129.0.0/23 \ --rules=tcp:80
预留负载均衡器的 IP 地址
如需为负载均衡器预留静态内部 IP 地址,请参阅预留新的静态内部 IPv4 或 IPv6 地址。
设置可用区级 NEG
在 REGION_A
区域中设置可用区级 NEG(具有 GCE_VM_IP_PORT
类型的端点)。首先,创建虚拟机。然后创建可用区级 NEG 并将虚拟机的网络端点添加到 NEG。
创建虚拟机
控制台
在 Google Cloud 控制台中,转到虚拟机实例页面。
点击创建实例。
将名称设置为
vm-a1
。对于区域,请选择
REGION_A
。对于可用区,请选择
ZONE_A1
。在启动磁盘部分中,确保为启动磁盘选项选择了 Debian 操作系统和 10 (Buster) 版本。如有必要,请点击选择以更改映像。
点击高级选项。
点击网络并配置以下字段:
- 在网络标记字段中,输入
allow-ssh
、allow-health-check
和allow-proxy-only-subnet
。 - 对于网络接口,请选择以下内容:
- 网络:
lb-network
- 子网:
backend-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
点击创建。
使用以下名称和可用区组合重复以下步骤,再创建 3 个虚拟机:
- 名称:
vm-a2
,可用区:ZONE_A1
- 名称:
vm-c1
,可用区:ZONE_A2
- 名称:
vm-c2
,可用区:ZONE_A2
- 名称:
gcloud
使用 VM_NAME 和 ZONE 的这些组合运行以下命令两次来创建虚拟机。两个虚拟机的脚本内容相同。
- VM_NAME:
vm-a1
和 ZONE:ZONE_A1
- VM_NAME:
vm-a2
和 ZONE:ZONE_A1
- VM_NAME:
vm-c1
和 ZONE:ZONE_A2
VM_NAME:
vm-c2
和 ZONE:ZONE_A2
gcloud compute instances create VM_NAME \ --zone=ZONE \ --image-family=debian-10 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check,allow-proxy-only-subnet \ --subnet=backend-subnet \ --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'
创建可用区级 NEG
控制台
如需创建可用区级网络端点组,请执行以下操作:
在 Google Cloud 控制台中,进入网络端点组页面。
点击创建网络端点组。
对于名称,输入
zonal-neg-a
。对于网络端点组类型,选择网络端点组(可用区级)。
对于网络,请选择
lb-network
。对于子网,请选择
backend-subnet
。对于可用区,请选择
ZONE_A1
。输入默认端口:
80
。点击创建。
重复执行此部分中的所有步骤,以创建第二个可用区级 NEG 并对设置进行以下更改:
- 名称:
zonal-neg-c
- 可用区:
ZONE_A2
- 名称:
向可用区级 NEG 添加端点:
在 Google Cloud 控制台中,进入网络端点组页面。
点击上一步中创建的网络端点组的名称(例如
zonal-neg-a
)。随即会出现网络端点组详情页面。在此组中的网络端点部分,点击添加网络端点。您会看到添加网络端点页面。
选择虚拟机实例(例如
vm-a1
)。网络接口部分随即会显示虚拟机名称、可用区和子网。- 输入新网络端点的 IP 地址。 您可以点击检查 nic0 中的主要 IP 地址和别名 IP 范围以获取 IP 地址。
- 对于端口类型,选择默认,这样网络端点组中的所有端点都会使用默认端口
80
。这足以满足我们的示例需求,因为 Apache 服务器是在端口80
处理请求。 - 点击创建。
再次点击添加网络端点。选择第二个虚拟机实例
vm-a2
,然后重复上述步骤,以将其端点添加到zonal-neg-a
。重复本部分中的所有步骤,以将
vm-c1
和vm-c2
中的端点添加到zonal-neg-c
。
gcloud
在
ZONE_A1
可用区中创建具有GCE_VM_IP_PORT
端点的可用区级 NEG。gcloud compute network-endpoint-groups create zonal-neg-a \ --network-endpoint-type=GCE_VM_IP_PORT \ --zone=ZONE_A1 \ --network=lb-network \ --subnet=backend-subnet
您可以在创建 NEG 时指定
--default-port
,也可以为每个端点指定端口号,如下一步所示。将端点添加到可用区级 NEG。
gcloud compute network-endpoint-groups update zonal-neg-a \ --zone=ZONE_A1 \ --add-endpoint='instance=vm-a1,port=80' \ --add-endpoint='instance=vm-a2,port=80'
在
ZONE_A2
可用区中创建具有GCE_VM_IP_PORT
端点的可用区级 NEG。gcloud compute network-endpoint-groups create zonal-neg-c \ --network-endpoint-type=GCE_VM_IP_PORT \ --zone=ZONE_A2 \ --network=lb-network \ --subnet=backend-subnet
您可以在创建 NEG 时指定
--default-port
,也可以为每个端点指定端口号,如下一步所示。将端点添加到可用区级 NEG。
gcloud compute network-endpoint-groups update zonal-neg-c \ --zone=ZONE_A2 \ --add-endpoint='instance=vm-c1,port=80' \ --add-endpoint='instance=vm-c2,port=80'
配置负载均衡器
控制台
开始配置
在 Google Cloud 控制台中,转到负载均衡页面。
- 点击创建负载均衡器。
- 对于负载均衡器的类型,选择网络负载均衡器 (TCP/UDP/SSL),然后点击下一步。
- 对于代理或直通,选择代理负载均衡器,然后点击下一步。
- 在公共或内部字段中,选择内部,然后点击下一步。
- 在跨区域或单区域部署字段中,选择最适合区域级工作负载,然后点击下一步。
- 点击配置。
基本配置
- 对于名称,输入
my-int-tcp-lb
。 - 对于区域,请选择
REGION_A
。 - 对于网络,请选择
lb-network
。
预留代理专用子网
如需预留代理专用子网,请执行以下操作:
- 点击预留子网。
- 对于名称,输入
proxy-only-subnet
。 - 对于 IP 地址范围,输入
10.129.0.0/23
。 - 点击添加。
后端配置
- 点击后端配置。
- 对于后端类型,选择可用区级网络端点组。
- 对于 Protocol(协议),选择 TCP。
- 配置第一个后端:
- 在新后端下,选择可用区级 NEG
zonal-neg-a
。 - 保留其余的默认值,然后点击完成。
- 在新后端下,选择可用区级 NEG
- 配置第二个后端:
- 点击添加后端。
- 在新后端下,选择实例组
zonal-neg-c
。 - 保留其余的默认值,然后点击完成。
- 配置健康检查:
- 在健康检查中,选择创建健康检查。
- 将健康检查的名称设置为
tcp-health-check
。 - 对于 Protocol(协议),选择 TCP。
- 对于端口,请输入
80
。
- 保留其余的默认值,然后点击保存。
- 在 Google Cloud 控制台中,验证后端配置旁边显示了对勾标记。如果没有显示对勾标记,请仔细检查您是否已完成所有步骤。
前端配置
- 点击前端配置。
- 对于名称,输入
int-tcp-forwarding-rule
。 - 对于子网,选择 backend-subnet。
- 对于 IP 地址,选择 int-tcp-ip-address。
- 对于端口号,输入
9090
。转发规则仅转发具有匹配目标端口的数据包。 - 在此示例中,请勿启用代理协议,因为它不适用于 Apache HTTP Server 软件。如需了解详情,请参阅代理协议。
- 点击完成。
- 在 Google Cloud 控制台中,验证前端配置旁边显示了对勾标记。如果没有显示对勾标记,请仔细检查您是否已完成上述所有步骤。
检查并最终确定
- 点击检查并最终确认。
- 仔细检查您的设置。
- 点击创建。
gcloud
为后端创建区域健康检查。
gcloud compute health-checks create tcp tcp-health-check \ --region=REGION_A \ --use-serving-port
创建后端服务。
gcloud compute backend-services create internal-tcp-proxy-bs \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=TCP \ --region=REGION_A \ --health-checks=tcp-health-check \ --health-checks-region=REGION_A
将
ZONE_A1
可用区中的可用区级 NEG 添加到后端服务。gcloud compute backend-services add-backend internal-tcp-proxy-bs \ --network-endpoint-group=zonal-neg-a \ --network-endpoint-group-zone=ZONE_A1 \ --balancing-mode=CONNECTION \ --max-connections-per-endpoint=50 \ --region=REGION_A
将
ZONE_A2
可用区中的可用区级 NEG 添加到后端服务。gcloud compute backend-services add-backend internal-tcp-proxy-bs \ --network-endpoint-group=zonal-neg-c \ --network-endpoint-group-zone=ZONE_A2 \ --balancing-mode=CONNECTION \ --max-connections-per-endpoint=50 \ --region=REGION_A
创建目标 TCP 代理。
gcloud compute target-tcp-proxies create int-tcp-target-proxy \ --backend-service=internal-tcp-proxy-bs \ --region=REGION_A
创建转发规则。对于
--ports
,请指定 1-65535 范围内的单个端口号。此示例使用端口9090
。转发规则仅转发具有匹配目标端口的数据包。gcloud compute forwarding-rules create int-tcp-forwarding-rule \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=backend-subnet \ --address=int-tcp-ip-address \ --ports=9090 \ --region=REGION_A \ --target-tcp-proxy=int-tcp-target-proxy \ --target-tcp-proxy-region=REGION_A
测试负载均衡器
如需测试负载均衡器,请在负载均衡器所在的区域中创建客户端虚拟机。然后,将流量从客户端发送到负载均衡器。
创建客户端虚拟机
在负载均衡器所在的区域中创建客户端虚拟机 (client-vm
)。
控制台
在 Google Cloud 控制台中,转到虚拟机实例页面。
点击创建实例。
将名称设置为
client-vm
。将地区设置为
ZONE_A1
。点击高级选项。
点击网络并配置以下字段:
- 对于网络标记,请输入
allow-ssh
。 - 对于网络接口,请选择以下内容:
- 网络:
lb-network
- 子网:
backend-subnet
- 网络:
- 对于网络标记,请输入
点击创建。
gcloud
客户端虚拟机必须与负载均衡器位于同一 VPC 网络和区域中。它无需位于同一子网或可用区中。客户端使用与后端虚拟机相同的子网。
gcloud compute instances create client-vm \ --zone=ZONE_A1 \ --image-family=debian-10 \ --image-project=debian-cloud \ --tags=allow-ssh \ --subnet=backend-subnet
将流量发送到负载均衡器
现在您已经配置了负载均衡器,接下来可以测试向负载均衡器的 IP 地址发送流量。
使用 SSH 连接到客户端实例。
gcloud compute ssh client-vm \ --zone=ZONE_A1
验证负载均衡器是否按预期处理后端主机名。
使用
compute addresses describe
命令查看负载均衡器的 IP 地址:gcloud compute addresses describe int-tcp-ip-address \ --region=REGION_A
记下 IP 地址。
将流量发送到负载均衡器。将 IP_ADDRESS 替换为负载均衡器的 IP 地址。
curl IP_ADDRESS:9090
后续步骤
- 如需了解区域级内部代理网络负载均衡器的工作原理,请参阅区域级内部代理网络负载均衡器概览。
- 如需为区域级内部代理网络负载均衡器设置监控功能,请参阅使用监控功能。
- 清理负载均衡器设置。