区域级外部代理网络负载均衡器是一种基于代理的区域第 4 层负载均衡器,可让您在外部区域 IP 地址后面的单个区域中运行和扩缩 TCP 服务流量。这些负载均衡器将来自互联网的外部 TCP 流量分配到同一区域中的后端。
本指南介绍了如何设置具有托管式实例组 (MIG) 后端的区域级外部代理网络负载均衡器。
在开始之前,请先阅读外部代理网络负载均衡器概览。
在此示例中,我们将使用负载均衡器在区域 A 的两个可用区托管式实例组中的后端虚拟机之间分配 TCP 流量。在本示例中,服务是一组配置为在端口 110
做出响应的 Apache 服务器。许多浏览器都不允许使用端口 110
,因此我们在测试部分使用 curl
。
在此示例中,您将配置下图中显示的部署。
区域级外部代理网络负载均衡器是区域级负载均衡器。所有负载均衡器组件(后端实例组、后端服务、目标代理和转发规则)必须位于同一区域。
权限
若要按照本指南中的说明进行操作,您必须能够创建实例以及修改项目中的网络。您必须是项目的 Owner 或 Editor,或者必须具有以下所有 Compute Engine IAM 角色。
任务 | 所需角色 |
---|---|
创建网络、子网和负载均衡器组件 | Compute Network Admin
(roles/compute.networkAdmin ) |
添加和移除防火墙规则 | Compute Security Admin
(roles/compute.securityAdmin ) |
创建实例 | Compute Instance Admin
(roles/compute.instanceAdmin ) |
如需了解详情,请参阅以下指南:
配置网络和子网
您需要一个包含两个子网的 VPC 网络:一个用于负载均衡器的后端,另一个用于负载均衡器的代理。此负载均衡器是区域性的。对于 VPC 网络中的流量,如果其来源所在的子网与负载均衡器位于同一区域,那么该流量会被路由到负载均衡器。
本示例使用以下 VPC 网络、区域和子网:
网络:名为
lb-network
的自定义模式 VPC 网络后端子网:A 区域中名为
backend-subnet
的子网,其主要 IP 地址范围使用10.1.2.0/24
代理子网:B 区域中名为
proxy-only-subnet
的子网,其主要 IP 地址范围使用10.129.0.0/23
创建网络和子网
控制台
在 Google Cloud 控制台中,进入 VPC 网络页面。
点击创建 VPC 网络。
对于名称,输入
lb-network
。在子网部分中,将子网创建模式设置为自定义。
为负载均衡器的后端创建子网。在新子网部分中,输入以下信息:
- 名称:
backend-subnet
- 区域:
REGION_A
- IP 地址范围:
10.1.2.0/24
- 名称:
点击完成。
点击创建。
gcloud
如需创建自定义 VPC 网络,请使用
gcloud compute networks create
命令:gcloud compute networks create lb-network --subnet-mode=custom
如需在
REGION_A
区域的lb-network
网络中创建子网,请使用gcloud compute networks subnets create
命令: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 网络的区域 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-ssh
。适用于负载均衡实例的入站流量规则,该规则允许从任何地址到 TCP 端口22
的传入 SSH 连接。您可以为此规则选择限制性更高的来源 IP 地址范围;例如,您可以仅指定要从中启动 SSH 会话的系统的 IP 地址范围。此示例使用目标标记allow-ssh
。fw-allow-health-check
。适用于负载均衡实例的入站流量规则,该规则允许来自 Google Cloud 健康检查系统(130.211.0.0/22
和35.191.0.0/16
)的所有 TCP 流量。此示例使用目标标记allow-health-check
。fw-allow-proxy-only-subnet
。一种入站流量规则,允许来自代理专用子网的连接到达后端。
如果不使用上述防火墙规则,则默认拒绝入站规则会阻止传入后端实例的流量。
目标标记定义了后端实例。没有目标标记,防火墙规则将应用于 VPC 网络中的所有后端实例。创建后端虚拟机时,请务必包括指定的目标标记,如创建代管实例组中所示。
控制台
在 Google Cloud 控制台中,转到防火墙页面。
点击创建防火墙规则,以创建允许传入 SSH 连接的规则。填写以下字段:
- 名称:
fw-allow-ssh
- 网络:
lb-network
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
allow-ssh
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
0.0.0.0/0
- 协议和端口:
- 选择指定的协议和端口。
- 选中 TCP 复选框,然后输入
22
作为端口号。
- 名称:
点击创建。
再次点击创建防火墙规则,创建允许 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
作为端口号。
最佳做法是将此规则限制为仅使用与健康检查所使用的协议和端口匹配的协议和端口。如果您使用
tcp:80
协议和端口,则 Google Cloud 可以使用 HTTP 通过端口80
联系您的虚拟机,但无法使用 HTTPS 通过端口443
联系这些虚拟机。
- 名称:
点击创建。
第三次点击创建防火墙规则,以创建允许负载均衡器的代理服务器连接到后端的规则:
- 名称:
fw-allow-proxy-only-subnet
- 网络:
lb-network
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
allow-proxy-only-subnet
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
10.129.0.0/23
- 协议和端口:
- 选择指定的协议和端口。
- 选中 TCP 复选框,然后输入
80
作为端口号。
- 名称:
点击创建。
gcloud
创建
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 健康检查。本示例允许来自健康检查探测工具的所有 TCP 流量;但是,您可以根据自己的需求配置较小范围的端口集。gcloud compute firewall-rules create fw-allow-health-check \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=allow-health-check \ --rules=tcp:80
创建
fw-allow-proxy-only-subnet
规则以允许该区域的 Envoy 代理连接到您的后端。将--source-ranges
设置为该代理专用子网的分配范围,在此示例中为10.129.0.0/23
。gcloud compute firewall-rules create fw-allow-proxy-only-subnet \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=10.129.0.0/23 \ --target-tags=allow-proxy-only-subnet \ --rules=tcp:80
预留负载均衡器的 IP 地址
为负载均衡器预留静态 IP 地址。
控制台
在 Google Cloud 控制台中,进入预留静态地址页面。
为新地址选择一个名称。
对于网络服务层级,请选择标准。
在 IP 版本部分,选择 IPv4。系统不支持 IPv6 地址。
对于类型,请选择区域。
对于区域,请选择
REGION_A
。将附加目标选项设置为无。创建负载均衡器后,此 IP 地址会关联到负载均衡器的转发规则。
点击预留以预留该 IP 地址。
gcloud
如需预留静态外部 IP 地址,请使用
gcloud compute addresses create
命令:gcloud compute addresses create ADDRESS_NAME \ --region=REGION_A \ --network-tier=STANDARD
将
ADDRESS_NAME
替换为您要为此地址指定的名称。如需查看结果,请使用
gcloud compute addresses describe
命令:gcloud compute addresses describe ADDRESS_NAME
创建代管式实例组
本部分介绍如何在区域 A 中为负载均衡器创建两个托管式实例组 (MIG) 后端。在此示例中,MIG 提供了运行后端 Apache 服务器的虚拟机实例。通常,区域级外部代理网络负载均衡器不用于 HTTP 流量,但 Apache 软件通常用于测试。
控制台
创建实例模板
在 Google Cloud Console 中,转到实例模板页面。
点击创建实例模板。
对于名称,输入
ext-reg-tcp-proxy-backend-template
。确保启动磁盘已设置为 Debian 映像,例如 Debian GNU/Linux 10 (stretch)。本文中的说明使用仅 Debian 支持的命令,例如
apt-get
。点击高级选项。
点击网络并配置以下字段:
- 在网络标记字段中,输入
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
点击创建。
创建代管式实例组
在 Google Cloud Console 中,转到实例组页面。
点击创建实例组。
选择 New managed instance group (stateless)(新的托管式实例组 [无状态])。如需了解详情,请参阅创建具备有状态磁盘的 MIG。
对于名称,输入
mig-a
。对于位置,选择单个可用区。
对于区域,请选择
REGION_A
。对于可用区,请选择
ZONE_A
。对于实例模板,请选择
ext-reg-tcp-proxy-backend-template
。指定要在组中创建的实例数。
对于此示例,在自动扩缩部分指定以下选项:
- 对于自动扩缩模式,请选择
Off:do not autoscale
。 - 对于实例数上限,请输入
2
。
- 对于自动扩缩模式,请选择
在端口映射部分,点击添加端口。
- 在端口名称部分,输入
tcp80
。 - 在端口号部分,输入
80
。
- 在端口名称部分,输入
点击创建。
如需创建第二个托管式实例组,请重复创建托管式实例组步骤并使用以下设置:
- 名称:
mig-b
- 可用区:
ZONE_B
所有其他设置均保持不变。
- 名称:
gcloud
本指南中的 Google Cloud CLI 说明假定您使用的是 Cloud Shell 或安装了 bash
的其他环境。
如需创建具有 HTTP 服务器的虚拟机实例模板,请使用
gcloud compute instance-templates create
命令:gcloud compute instance-templates create ext-reg-tcp-proxy-backend-template \ --region=REGION_A \ --network=lb-network \ --subnet=backend-subnet \ --tags=allow-ssh,allow-health-check,allow-proxy-only-subnet \ --image-family=debian-12 \ --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'
在
ZONE_A
可用区中创建一个托管式实例组:gcloud compute instance-groups managed create mig-a \ --zone=ZONE_A \ --size=2 \ --template=ext-reg-tcp-proxy-backend-template
在
ZONE_B
可用区中创建一个托管式实例组:gcloud compute instance-groups managed create mig-b \ --zone=ZONE_B \ --size=2 \ --template=ext-reg-tcp-proxy-backend-template
配置负载平衡器
控制台
开始配置
在 Google Cloud 控制台中,转到负载均衡页面。
- 点击创建负载均衡器。
- 对于负载均衡器的类型,选择网络负载均衡器 (TCP/UDP/SSL),然后点击下一步。
- 对于代理或直通,选择代理负载均衡器,然后点击下一步。
- 在公共或内部字段中,选择公共(外部),然后点击下一步。
- 对于全球或单区域部署,选择最适合区域级工作负载,然后点击下一步。
- 点击配置。
基本配置
- 对于名称,输入
my-ext-tcp-lb
。 - 对于区域,请选择
REGION_A
。 - 对于网络,请选择
lb-network
。
预留代理专用子网
- 点击预留子网。
- 对于名称,输入
proxy-only-subnet
。 - 对于 IP 地址范围,输入
10.129.0.0/23
。 - 点击添加。
配置后端
- 点击后端配置。
- 对于后端类型,选择实例组。
- 对于 Protocol(协议),选择 TCP。
- 对于已命名端口,输入
tcp80
。 - 配置第一个后端:
- 在新后端字段中,选择实例组
mig-a
。 - 在端口号部分,输入
80
。 - 保留其余的默认值,然后点击完成。
- 在新后端字段中,选择实例组
- 配置第二个后端:
- 点击添加后端。
- 在新后端字段中,选择实例组
mig-b
。 - 在端口号部分,输入
80
。 - 保留其余的默认值,然后点击完成。
- 配置健康检查:
- 在健康检查字段中,选择创建健康检查。
- 将健康检查名称设置为
tcp-health-check
。 - 对于 Protocol(协议),选择 TCP。
- 将端口设置为
80
。
- 保留其余的默认值,然后点击保存。
- 在 Google Cloud 控制台中,验证后端配置旁边显示了对勾标记。如果没有显示对勾标记,请仔细检查您是否已完成所有步骤。
配置前端
- 点击前端配置。
- 对于名称,输入
ext-reg-tcp-forwarding-rule
。 - 对于子网,选择
backend-subnet
。 - 对于 IP 地址,选择之前预留的 IP 地址:LB_IP_ADDRESS
- 对于端口号,输入
110
。转发规则仅转发具有匹配目标端口的数据包。 - 在代理协议字段中,选择关闭,因为 PROXY 协议不适用于 Apache HTTP Server 软件。如需了解详情,请参阅 PROXY 协议。
- 点击完成。
- 在 Google Cloud 控制台中,验证前端配置旁边显示了对勾标记。如果没有显示对勾标记,请仔细检查您是否已完成上述所有步骤。
检查并最终确定
- 点击检查并最终确定。
- 查看负载均衡器配置设置。
- 可选:点击等效代码以查看将用于创建负载均衡器的 REST API 请求。
- 点击创建。
gcloud
创建区域级健康检查:
gcloud compute health-checks create tcp tcp-health-check \ --region=REGION_A \ --use-serving-port
创建后端服务:
gcloud compute backend-services create ext-reg-tcp-proxy-bs \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=TCP \ --port-name=tcp80 \ --region=REGION_A \ --health-checks=tcp-health-check \ --health-checks-region=REGION_A
将实例组添加到后端服务:
gcloud compute backend-services add-backend ext-reg-tcp-proxy-bs \ --region=REGION_A \ --instance-group=mig-a \ --instance-group-zone=ZONE_A \ --balancing-mode=UTILIZATION \ --max-utilization=0.8
gcloud compute backend-services add-backend ext-reg-tcp-proxy-bs \ --region=REGION_A \ --instance-group=mig-b \ --instance-group-zone=ZONE_B \ --balancing-mode=UTILIZATION \ --max-utilization=0.8
创建目标 TCP 代理:
gcloud compute target-tcp-proxies create ext-reg-tcp-target-proxy \ --backend-service=ext-reg-tcp-proxy-bs \ --proxy-header=NONE \ --region=REGION_A
如果您要开启代理标头,请将其设置为
PROXY_V1
,而不是NONE
。 在此示例中,请勿启用 PROXY 协议,因为它不适用于 Apache HTTP Server 软件。如需了解详情,请参阅 PROXY 协议。创建转发规则。 对于
--ports
,请指定 1-65535 范围内的单个端口号。此示例使用端口110
。转发规则仅转发具有匹配目标端口的数据包。gcloud compute forwarding-rules create ext-reg-tcp-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=STANDARD \ --network=lb-network \ --region=REGION_A \ --target-tcp-proxy=ext-reg-tcp-target-proxy \ --target-tcp-proxy-region=REGION_A \ --address=LB_IP_ADDRESS \ --ports=110
测试负载均衡器
现在您已经配置了负载均衡器,接下来可以测试向负载均衡器的 IP 地址发送流量。
获取负载均衡器的 IP 地址。
要获取 IPv4 地址,请运行以下命令:
gcloud compute addresses describe ADDRESS_NAME
通过运行以下命令将流量发送到负载均衡器。将
LB_IP_ADDRESS
替换为负载均衡器的 IPv4 地址。curl -m1 LB_IP_ADDRESS:9090
其他配置选项
本部分对配置示例进行了扩展,以提供一些额外的替代配置选项。所有任务均为可选任务。您可以按任意顺序执行这些任务。
启用会话亲和性
示例配置创建的后端服务没有会话亲和性。
以下流程介绍了如何为示例负载均衡器更新后端服务,以便后端服务使用客户端 IP 地址亲和性或生成的 Cookie 亲和性。
启用客户端 IP 亲和性后,负载均衡器会根据使用客户端 IP 地址和负载均衡器 IP 地址(内部转发规则的内部 IP 地址)创建的哈希,将特定客户端的请求定向到同一后端虚拟机。
如需启用客户端 IP 地址会话亲和性,请完成以下步骤。
控制台
在 Google Cloud 控制台中,转到负载均衡页面。
点击后端。
点击
ext-reg-tcp-proxy-bs
(您为此示例创建的后端服务的名称),然后点击修改。在后端服务详情页面上,点击高级配置。
对于会话亲和性,选择客户端 IP。
点击更新。
gcloud
如需更新 ext-reg-tcp-proxy-bs
后端服务并指定客户端 IP 会话亲和性,请使用 gcloud compute backend-services update ext-reg-tcp-proxy-bs
命令:
gcloud compute backend-services update ext-reg-tcp-proxy-bs \ --region=REGION_A \ --session-affinity=CLIENT_IP