本文档介绍了如何为 Compute Engine 虚拟机上运行的服务配置区域级内部应用负载均衡器。
如需为 Google Kubernetes Engine (GKE) Pod 中运行的服务配置负载均衡,请参阅通过独立 NEG 实现容器原生负载均衡和将内部应用负载均衡器连接到独立 NEG 部分。
如需配置负载均衡以使用 Private Service Connect 访问 Google API 和服务,请参阅通过后端访问区域级 Google API。
内部应用负载均衡器的设置包含两个部分:
- 执行前提任务,例如确保所需账号拥有正确权限以及准备 Virtual Private Cloud (VPC) 网络。
- 设置负载均衡器资源。
在按照本指南进行操作之前,请先熟悉以下内容:
- 内部应用负载均衡器概览,包括限制部分
- VPC 防火墙规则概览
权限
若要按照本指南中的说明进行操作,您必须能够创建实例以及修改项目中的网络。因此,您必须是项目 Owner 或 Editor,或者必须具有以下所有 Compute Engine IAM 角色。
任务 | 所需角色 |
---|---|
创建网络、子网和负载均衡器组件 | Compute Network Admin (roles/compute.networkAdmin )
|
添加和移除防火墙规则 | Compute Security Admin (roles/compute.securityAdmin )
|
创建实例 | Compute Instance Admin (roles/compute.instanceAdmin.v1 )
|
如需了解详情,请参阅以下指南:
设置概览
您可以按照以下总体配置流程所述配置内部应用负载均衡器。以下带编号的步骤对应于该图中的标号。
如上图所示,该示例在 us-west1
区域的 VPC 网络中创建了一个内部应用负载均衡器,该均衡器包含一项后端服务和两个后端组。
图中显示了以下内容:
包含两个子网的 VPC 网络:
一个子网用于后端(实例组)和转发规则。该子网的主要 IP 地址范围为
10.1.2.0/24
。一个子网是
us-west1
区域中的代理专用子网。您必须在 VPC 网络内所有使用内部应用负载均衡器的区域中创建一个代理专用子网。该区域的代理专用子网会在该区域的所有内部应用负载均衡器之间共享。对于从内部应用负载均衡器发送到服务后端的数据包,系统会从该代理专用子网分配其来源地址。在本示例中,该区域中代理专用子网的主要 IP 地址范围为10.129.0.0/23
,这是建议的子网大小。如需了解详情,请参阅基于 Envoy 的负载均衡器的代理专用子网。
两条防火墙规则:
- 允许在您的网络中使用代理专用子网流量的防火墙规则。这意味着添加一条规则以允许来自
10.129.0.0/23
(在此示例中为代理专用子网的范围)的 TCP 端口80
、443
和8080
流量。 - 用于健康检查探测的另一个防火墙规则。
- 允许在您的网络中使用代理专用子网流量的防火墙规则。这意味着添加一条规则以允许来自
后端 Compute Engine 虚拟机实例。
Compute Engine 虚拟机部署所用的托管式实例组或非托管式实例组。
在每个可用区中,您可以根据自己的部署要求组合使用各种后端组。
用于报告后端就绪情况的区域健康检查。
用于监控后端使用情况和运行状况的区域性后端服务。
区域网址映射,用于解析请求的网址,并根据请求网址的主机和路径将请求转发到特定后端服务。
区域目标 HTTP 或 HTTPS 代理,用于接收用户请求并将其转发到网址映射。对于 HTTPS,请配置区域 SSL 证书资源。如果您配置 HTTPS 负载均衡,则目标代理会使用 SSL 证书来解密 SSL 流量。目标代理可以通过 HTTP 或 HTTPS 将流量转发到您的实例。
包含负载均衡器内部 IP 地址的转发规则,用于将每个传入请求转发到目标代理。
与转发规则关联的内部 IP 地址可以来自同一网络和区域中的任何子网。请注意以下条件:
- 该 IP 地址可以(但并非必须)与后端实例组来自同一子网。
- 该 IP 地址不得来自
--purpose
标志设置为REGIONAL_MANAGED_PROXY
的预留代理专用子网。 - 如果要与多个转发规则共享内部 IP 地址,请将 IP 地址的
--purpose
标志设置为SHARED_LOADBALANCER_VIP
。
本页面上的示例会使用为区域级内部应用负载均衡器的转发规则预留的内部 IP 地址,而不是允许分配临时内部 IP 地址。我们建议的最佳实践是,为转发规则预留 IP 地址。
配置网络和子网
您需要一个包含两个子网的 VPC 网络:一个用于负载均衡器的后端,另一个用于负载均衡器的代理。内部应用负载均衡器是区域性的。对于 VPC 网络中的流量,如果其来源所在的子网与负载均衡器位于同一区域,那么该流量会被路由到负载均衡器。
本示例使用以下 VPC 网络、区域和子网:
网络:网络是名为
lb-network
的自定义模式 VPC 网络。后端子网:
us-west1
区域中名为backend-subnet
的子网使用10.1.2.0/24
作为其主要 IP 地址范围。代理子网:
us-west1
区域中名为proxy-only-subnet
的子网使用10.129.0.0/23
作为其主要 IP 地址范围。
为了演示全球访问权限,此示例还会在其他区域和子网中再创建一个测试客户端虚拟机:
- 地区:
europe-west1
- 子网:
europe-subnet
(其主要 IP 地址范围为10.3.4.0/24
)
配置网络和子网
控制台
在 Google Cloud 控制台中,前往 VPC 网络页面。
点击创建 VPC 网络。
对于名称,输入
lb-network
。在子网部分中,将子网创建模式设置为自定义。
为负载均衡器的后端创建子网。在新子网部分中,输入以下信息:
- 名称:
backend-subnet
- 区域:
us-west1
- IP 地址范围:
10.1.2.0/24
- 名称:
点击完成。
点击添加子网。
创建一个子网来展示全球访问权限。在新子网部分中,输入以下信息:
- 名称:
europe-subnet
- 区域:
europe-west1
- IP 地址范围:
10.3.4.0/24
- 名称:
点击完成。
点击创建。
gcloud
使用
gcloud compute networks create
命令创建自定义 VPC 网络:gcloud compute networks create lb-network --subnet-mode=custom
使用
gcloud compute networks subnets create
命令在us-west1
区域的lb-network
网络中创建子网:gcloud compute networks subnets create backend-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1
使用
gcloud compute networks subnets create
命令在europe-west1
区域的lb-network
网络中创建子网:gcloud compute networks subnets create europe-subnet \ --network=lb-network \ --range=10.3.4.0/24 \ --region=europe-west1
API
向 networks.insert
方法发出 POST
请求。请将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "routingConfig": { "routingMode": "REGIONAL" }, "name": "lb-network", "autoCreateSubnetworks": false }
向 subnetworks.insert
方法发出 POST
请求。请将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks { "name": "backend-subnet", "network": "projects/PROJECT_ID/global/networks/lb-network", "ipCidrRange": "10.1.2.0/24", "region": "projects/PROJECT_ID/regions/us-west1", }
向 subnetworks.insert
方法发出 POST
请求。请将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/europe-west1/subnetworks { "name": "europe-subnet", "network": "projects/PROJECT_ID/global/networks/lb-network", "ipCidrRange": "10.3.4.0/24", "region": "projects/PROJECT_ID/regions/europe-west1", }
配置代理专用子网
此代理专用子网用于 lb-network
的 us-west1
区域内所有基于 Envoy 的区域负载均衡器。
控制台
如果您使用的是 Google Cloud 控制台,可以稍后在负载均衡页面上创建代理专用子网。
如需立即创建代理专用子网,请按以下步骤操作:
在 Google Cloud 控制台中,前往 VPC 网络页面。
点击 VPC 网络的名称:
lb-network
。点击添加子网。
对于名称,输入
proxy-only-subnet
。对于区域,请选择
us-west1
。将用途设置为区域级代管式代理。
对于 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=us-west1 \ --network=lb-network \ --range=10.129.0.0/23
API
使用 subnetworks.insert
方法创建代理专用子网,并将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/projects/PROJECT_ID/regions/us-west1/subnetworks { "name": "proxy-only-subnet", "ipCidrRange": "10.129.0.0/23", "network": "projects/PROJECT_ID/global/networks/lb-network", "region": "projects/PROJECT_ID/regions/us-west1", "purpose": "REGIONAL_MANAGED_PROXY", "role": "ACTIVE" }
配置防火墙规则
此示例使用以下防火墙规则:
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 流量。此示例使用目标标记load-balanced-backend
来标识防火墙规则应用到的虚拟机。fw-allow-proxies
。适用于负载均衡实例的入站流量规则,该规则允许从内部应用负载均衡器的代管式代理发送到端口80
、443
和8080
的 TCP 流量。此示例使用目标标记load-balanced-backend
来标识防火墙规则应用到的虚拟机。
如果不使用上述防火墙规则,则默认拒绝入站规则会阻止传入后端实例的流量。
目标标记定义了后端实例。没有目标标记,防火墙规则将应用于 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
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
load-balanced-backend
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
130.211.0.0/22
和35.191.0.0/16
- 协议和端口:
- 选择指定的协议和端口。
- 选中 TCP 复选框,然后输入
80
作为端口号。
最佳实践是将此规则限制为仅使用与健康检查所使用的协议和端口匹配的协议和端口。如果您使用tcp:80
协议和端口,则 Google Cloud 可以使用 HTTP 通过端口80
联系您的虚拟机,但无法使用 HTTPS 通过端口443
联系这些虚拟机。
- 名称:
点击创建。
第三次点击创建防火墙规则,以创建允许负载均衡器的代理服务器连接后端的规则:
- 名称:
fw-allow-proxies
- 网络:
lb-network
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
load-balanced-backend
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
10.129.0.0/23
- 协议和端口:
- 选择指定的协议和端口。
- 选中 TCP 复选框,然后输入
80, 443, 8080
作为端口号。
- 名称:
点击创建。
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=load-balanced-backend \ --rules=tcp
创建
fw-allow-proxies
规则以允许内部应用负载均衡器的代理连接到您的后端。将source-ranges
设置为代理专用子网的分配范围,例如10.129.0.0/23
。gcloud compute firewall-rules create fw-allow-proxies \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=source-range \ --target-tags=load-balanced-backend \ --rules=tcp:80,tcp:443,tcp:8080
API
通过向 firewalls.insert
方法发出 POST
请求来创建 fw-allow-ssh
防火墙规则,并将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-ssh", "network": "projects/PROJECT_ID/global/networks/lb-network", "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "allow-ssh" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS" }
通过向 firewalls.insert
方法发出 POST
请求来创建 fw-allow-health-check
防火墙规则,并将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-health-check", "network": "projects/PROJECT_ID/global/networks/lb-network", "sourceRanges": [ "130.211.0.0/22", "35.191.0.0/16" ], "targetTags": [ "load-balanced-backend" ], "allowed": [ { "IPProtocol": "tcp" } ], "direction": "INGRESS" }
通过 firewalls.insert
方法创建 fw-allow-proxies
防火墙规则以允许代理子网内的 TCP 流量,并将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-proxies", "network": "projects/PROJECT_ID/global/networks/lb-network", "sourceRanges": [ "10.129.0.0/23" ], "targetTags": [ "load-balanced-backend" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "80" ] }, { "IPProtocol": "tcp", "ports": [ "443" ] }, { "IPProtocol": "tcp", "ports": [ "8080" ] } ], "direction": "INGRESS" }
预留负载均衡器的 IP 地址
默认情况下,每个转发规则使用一个 IP 地址。您可以预留一个共享 IP 地址,这样就可以将同一 IP 地址用于多个转发规则。但是,如果您要使用 Private Service Connect 发布负载均衡器,请勿将共享 IP 地址用于转发规则。
对于转发规则的 IP 地址,请使用 backend-subnet
。如果您尝试使用代理专用子网,则无法创建转发规则。
控制台
您可以使用Google Cloud 控制台预留独立内部 IP 地址。
- 转到 VPC 网络页面。
- 点击用于配置环境之间的混合连接的网络。
- 点击静态内部 IP 地址,然后点击预留静态地址。
- 对于名称,输入
l7-ilb-ip-address
。 - 对于子网,请选择
backend-subnet
。 - 如果要指定要预留的 IP 地址,请在静态 IP 地址下选择让我自行选择,然后填写自定义 IP 地址。否则,系统会自动为您分配子网中的 IP 地址。
- 如果要将此 IP 地址与多个转发规则一起使用,请在用途下选择共享。
- 点击保留以完成此流程。
gcloud
使用 gcloud CLI 运行
gcloud compute addresses create
命令:gcloud compute addresses create l7-ilb-ip-address \ --region=us-west1 \ --subnet=backend-subnet
如果要将同一 IP 地址用于多个转发规则,请指定
--purpose=SHARED_LOADBALANCER_VIP
。使用
gcloud compute addresses describe
命令查看分配的 IP 地址:gcloud compute addresses describe l7-ilb-ip-address \ --region=us-west1
创建代管式虚拟机实例组后端
本部分介绍如何创建实例组模板和托管实例组。托管式实例组提供运行示例区域级内部应用负载均衡器的后端服务器的虚拟机实例。对于您的实例组,您可以定义一个 HTTP 服务并将端口名称映射到相关端口上。负载均衡器的后端服务会将流量转发到已命名的端口。 来自客户端的流量在经过负载均衡处理后传送到后端服务器。出于演示目的,后端都会传送其各自的主机名。
控制台
创建实例模板。在 Google Cloud 控制台中,前往实例模板页面。
- 点击创建实例模板。
- 对于名称,输入
l7-ilb-backend-template
。 - 确保启动磁盘已设置为 Debian 映像,例如 Debian GNU/Linux 12 (bookworm)。本文中的说明使用仅 Debian 支持的命令,例如
apt-get
。 - 点击高级选项。
- 点击网络并配置以下字段:
- 在网络标记部分,输入
allow-ssh
和load-balanced-backend
。 - 对于网络接口,请选择以下内容:
- 网络:
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 控制台中,前往实例组页面。
- 点击创建实例组。
- 选择 New managed instance group (stateless)(新的托管式实例组 [无状态])。如需了解详情,请参阅有状态托管式实例组。
- 对于名称,输入
l7-ilb-backend-example
。 - 对于位置,选择单个可用区。
- 对于区域,请选择
us-west1
。 - 对于可用区,请选择
us-west1-a
。 - 对于实例模板,请选择
l7-ilb-backend-template
。 指定要在组中创建的实例数。
对于此示例,请在自动扩缩下指定以下选项:
- 对于自动扩缩模式,请选择
Off:do not autoscale
。 - 对于实例数上限,请输入
2
。
(可选)在界面的自动扩缩部分中,您可以将实例组配置为根据实例 CPU 使用情况自动添加或移除实例。
- 对于自动扩缩模式,请选择
点击创建。
gcloud
本指南中的 gcloud
说明假定您使用的是 Cloud Shell 或安装了 bash 的其他环境。
使用
gcloud compute instance-templates create
命令创建一个具有 HTTP 服务器的虚拟机实例模板。gcloud compute instance-templates create l7-ilb-backend-template \ --region=us-west1 \ --network=lb-network \ --subnet=backend-subnet \ --tags=allow-ssh,load-balanced-backend \ --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'
使用
gcloud compute instance-groups managed create
命令在相应可用区中创建一个托管式实例组。gcloud compute instance-groups managed create l7-ilb-backend-example \ --zone=us-west1-a \ --size=2 \ --template=l7-ilb-backend-template
API
使用 instanceTemplates.insert
方法创建实例模板,并将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates { "name":"l7-ilb-backend-template", "properties":{ "machineType":"e2-standard-2", "tags":{ "items":[ "allow-ssh", "load-balanced-backend" ] }, "metadata":{ "kind":"compute#metadata", "items":[ { "key":"startup-script", "value":"#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\n vm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)\"\n echo \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nsystemctl restart apache2" } ] }, "networkInterfaces":[ { "network":"projects/PROJECT_ID/global/networks/lb-network", "subnetwork":"regions/us-west1/subnetworks/backend-subnet", "accessConfigs":[ { "type":"ONE_TO_ONE_NAT" } ] } ], "disks":[ { "index":0, "boot":true, "initializeParams":{ "sourceImage":"projects/debian-cloud/global/images/family/debian-12" }, "autoDelete":true } ] } }
使用 instanceGroupManagers.insert
方法在每个可用区中创建一个托管式实例组,并将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/{zone}/instanceGroupManagers { "name": "l7-ilb-backend-example", "zone": "projects/PROJECT_ID/zones/us-west1-a", "instanceTemplate": "projects/PROJECT_ID/global/instanceTemplates/l7-ilb-backend-template", "baseInstanceName": "l7-ilb-backend-example", "targetSize": 2 }
配置负载均衡器
下面的示例介绍了如何创建以下区域级内部应用负载均衡器资源:
- HTTP 健康检查
- 将托管式实例组用作后端的后端服务
- 网址映射
- 如果为目标 HTTP(S) 代理定义了区域,请务必参阅区域网址映射。区域网址映射根据您为传入网址的主机和路径定义的规则将请求路由到区域后端服务。区域网址映射只能由同一区域中的区域目标代理规则引用。
- SSL 证书(适用于 HTTPS)
- 目标代理
- 转发规则
代理可用性
有时, Google Cloud 区域没有足够的代理容量来容纳新的负载均衡器。如果发生这种情况, Google Cloud 控制台会在您创建负载均衡器时提供一条代理可用性警告消息。如需解决此问题,您可以执行以下任一操作:
- 为您的负载均衡器选择其他区域。如果您的后端位于其他区域,这是一种切实可行的做法。
- 选择一个已分配有代理专用子网的 VPC 网络。
等待容量问题的解决。
控制台
选择负载均衡器类型
在 Google Cloud 控制台中,前往负载均衡页面。
- 点击创建负载均衡器。
- 在负载均衡器的类型字段中,选择应用负载均衡器 (HTTP/HTTPS),然后点击下一步。
- 在公共或内部字段中,选择内部,然后点击下一步。
- 在跨区域或单区域部署字段中,选择最适合区域级工作负载,然后点击下一步。
- 点击配置。
基本配置
- 对于负载均衡器的名称,请输入
l7-ilb-map
。 - 对于区域,请选择
us-west1
。 - 对于网络,请选择
lb-network
。
预留代理专用子网
预留代理专用子网:
- 点击 Reserve a Subnet(预留子网)。
- 对于名称,输入
proxy-only-subnet
。 - 对于 IP 地址范围,输入
10.129.0.0/23
。 - 点击添加。
配置后端服务
- 点击后端配置。
- 在创建或选择后端服务菜单中,选择创建后端服务。
- 将后端服务的名称设置为
l7-ilb-backend-service
。 - 将后端类型设置为实例组。
- 在新后端部分:
- 将实例组设置为
l7-ilb-backend-example
。 - 将端口号设置为
80
。 - 将平衡模式设置为利用率。
- 点击完成。
- 将实例组设置为
- 在健康检查列表中,点击参数创建健康检查,并使用以下参数:
- 名称:
l7-ilb-basic-check
- 协议:
HTTP
- 端口:
80
- 点击保存。
- 名称:
-
可选:配置默认的后端安全政策。默认安全政策会限制超出用户配置阈值的流量。如需详细了解默认安全政策,请参阅速率限制概览。
- 如需停用 Cloud Armor 默认安全政策,请在 Cloud Armor 后端安全政策列表中选择
None
。 - 如需配置 Cloud Armor 默认安全政策,请在 Cloud Armor 后端安全政策列表中选择默认安全政策。
- 在政策名称字段中,接受自动生成的名称或输入安全政策的名称。
- 在请求数字段中,接受默认请求数,或输入介于
1
和10,000
之间的整数。 - 在间隔字段中,选择间隔。
- 在对密钥实施字段中,选择以下值之一:全部、IP 地址或 X-Forwarded-For IP 地址。如需详细了解这些选项,请参阅确定客户端以进行速率限制。
- 如需停用 Cloud Armor 默认安全政策,请在 Cloud Armor 后端安全政策列表中选择
- 点击创建。
配置网址映射
点击主机和路径规则。
对于模式,选择简单主机和路径规则。
确保
l7-ilb-backend-service
是任何不匹配的主机和任何不匹配的路径的唯一后端服务。
如需了解流量管理,请参阅为内部应用负载均衡器设置流量管理。
配置前端
对于 HTTP:
- 点击前端配置。
- 将转发规则的名称设置为
l7-ilb-forwarding-rule
。 - 将协议设置为
HTTP
。 - 将子网设置为
backend-subnet
。 - 将端口设置为
80
。 - 从 IP 地址列表中,选择
l7-ilb-ip-address
。 - 点击完成。
对于 HTTPS:
- 点击前端配置。
- 将转发规则的名称设置为
l7-ilb-forwarding-rule
。 - 将协议设置为
HTTPS (includes HTTP/2)
。 - 将子网设置为
backend-subnet
。 - 确保将端口设置为
443
,以允许 HTTPS 流量。 - 从 IP 地址列表中,选择
l7-ilb-ip-address
。 - 点击证书列表。
- 如果您已经拥有要用作主要 SSL 证书的自行管理的 SSL 证书资源,请从列表中选择该证书。
- 否则,请选择创建新证书。
- 将证书的名称设置为
l7-ilb-cert
。 - 在相应字段中上传您的 PEM 格式的文件:
- 公钥证书
- 证书链
- 私钥
- 点击创建。
- 将证书的名称设置为
- 如需添加除了主要 SSL 证书资源之外的其他证书资源,请执行以下操作:
- 点击添加证书。
- 从证书列表中选择一个证书,或点击创建新证书并按照说明操作。
从 SSL 政策列表中选择一项 SSL 政策。(可选)如需创建 SSL 政策,请执行以下操作:
- 在 SSL 政策列表中,选择创建政策。
- 输入 SSL 政策的名称。
- 选择最低的 TLS 版本。默认值为 TLS 1.0。
- 选择预配置的 Google 管理的配置文件之一,或者选择一个使您可以单独选择 SSL 功能的自定义配置文件。系统会显示已启用的功能和已停用的功能。
- 点击保存。
如果您尚未创建任何 SSL 政策,则应用默认 Google Cloud SSL 政策。
点击完成。
检查配置
- 点击检查并最终确定。
- 查看负载均衡器配置设置。
- 可选:点击等效代码以查看将用于创建负载均衡器的 REST API 请求。
- 点击创建。
gcloud
使用
gcloud compute health-checks create http
命令定义 HTTP 健康检查。gcloud compute health-checks create http l7-ilb-basic-check \ --region=us-west1 \ --use-serving-port
使用
gcloud compute backend-services create
命令定义后端服务。gcloud compute backend-services create l7-ilb-backend-service \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTP \ --health-checks=l7-ilb-basic-check \ --health-checks-region=us-west1 \ --region=us-west1
使用
gcloud compute backend-services add-backend
命令将后端添加到后端服务。gcloud compute backend-services add-backend l7-ilb-backend-service \ --balancing-mode=UTILIZATION \ --instance-group=l7-ilb-backend-example \ --instance-group-zone=us-west1-a \ --region=us-west1
使用
gcloud compute url-maps create
命令创建网址映射。gcloud compute url-maps create l7-ilb-map \ --default-service=l7-ilb-backend-service \ --region=us-west1
创建目标代理。
对于 HTTP:
对于内部 HTTP 负载均衡器,使用
gcloud compute target-http-proxies create
命令创建目标代理。gcloud compute target-http-proxies create l7-ilb-proxy \ --url-map=l7-ilb-map \ --url-map-region=us-west1 \ --region=us-west1
对于 HTTPS:
您可以创建 Compute Engine 证书或 Certificate Manager 证书。使用以下任一方法通过 Certificate Manager 创建证书:
- 自行管理的区域级证书。如需了解如何创建和使用自行管理的区域级证书,请参阅部署自行管理的区域级证书。不支持证书映射。
Google 管理的区域级证书。不支持证书映射。
Certificate Manager 支持以下类型的 Google 管理的区域级证书:
- 具有每个项目的 DNS 授权的 Google 管理的区域级证书。如需了解详情,请参阅部署具有 DNS 授权的 Google 管理的区域级证书。
- 使用 Certificate Authority Service 的 Google 管理的(专用)区域级证书。如需了解详情,请参阅使用 Certificate Authority Service 部署 Google 管理的区域级证书。
创建证书后,将证书直接附加到目标代理。
将文件路径分配给变量名称。
export LB_CERT=path to PEM-formatted file
export LB_PRIVATE_KEY=path to PEM-formatted file
使用
gcloud compute ssl-certificates create
命令创建区域级 SSL 证书。gcloud compute ssl-certificates create l7-ilb-cert \ --certificate=$LB_CERT \ --private-key=$LB_PRIVATE_KEY \ --region=us-west1
使用区域 SSL 证书通过
gcloud compute target-https-proxies create
命令创建目标代理。gcloud compute target-https-proxies create l7-ilb-proxy \ --url-map=l7-ilb-map \ --region=us-west1 \ --ssl-certificates=l7-ilb-cert
创建转发规则。
对于自定义网络,必须在转发规则中引用子网。请注意,这是虚拟机子网,而非代理子网。
对于 HTTP:
将
gcloud compute forwarding-rules create
命令与正确的标志结合使用。gcloud compute forwarding-rules create l7-ilb-forwarding-rule \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=backend-subnet \ --address=l7-ilb-ip-address \ --ports=80 \ --region=us-west1 \ --target-http-proxy=l7-ilb-proxy \ --target-http-proxy-region=us-west1
对于 HTTPS:
将
gcloud compute forwarding-rules create
命令与正确的标志结合使用来创建转发规则。gcloud compute forwarding-rules create l7-ilb-forwarding-rule \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=backend-subnet \ --address=l7-ilb-ip-address \ --ports=443 \ --region=us-west1 \ --target-https-proxy=l7-ilb-proxy \ --target-https-proxy-region=us-west1
API
向 regionHealthChecks.insert
方法发出 POST
请求以创建健康检查,注意要将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/{region}/healthChecks { "name": "l7-ilb-basic-check", "type": "HTTP", "httpHealthCheck": { "portSpecification": "USE_SERVING_PORT" } }
向 regionBackendServices.insert
方法发出 POST
请求以创建区域后端服务,注意要将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices { "name": "l7-ilb-backend-service", "backends": [ { "group": "projects/PROJECT_ID/zones/us-west1-a/instanceGroups/l7-ilb-backend-example", "balancingMode": "UTILIZATION" } ], "healthChecks": [ "projects/PROJECT_ID/regions/us-west1/healthChecks/l7-ilb-basic-check" ], "loadBalancingScheme": "INTERNAL_MANAGED" }
向 regionUrlMaps.insert
方法发出 POST
请求来创建网址映射,并将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/urlMaps { "name": "l7-ilb-map", "defaultService": "projects/PROJECT_ID/regions/us-west1/backendServices/l7-ilb-backend-service" }
对于 HTTP:
向 regionTargetHttpProxies.insert
方法发出 POST
请求来创建目标 HTTP 代理,并将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/targetHttpProxy { "name": "l7-ilb-proxy", "urlMap": "projects/PROJECT_ID/global/urlMaps/l7-ilb-map", "region": "us-west1" }
向 forwardingRules.insert
方法发出 POST
请求来创建转发规则,并将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "l7-ilb-forwarding-rule", "IPAddress": "IP_ADDRESS", "IPProtocol": "TCP", "portRange": "80-80", "target": "projects/PROJECT_ID/regions/us-west1/targetHttpProxies/l7-ilb-proxy", "loadBalancingScheme": "INTERNAL_MANAGED", "subnetwork": "projects/PROJECT_ID/regions/us-west1/subnetworks/backend-subnet", "network": "projects/PROJECT_ID/global/networks/lb-network", "networkTier": "PREMIUM" }
对于 HTTPS:
您可以创建 Compute Engine 证书或 Certificate Manager 证书。使用以下任一方法通过 Certificate Manager 创建证书:
- 自行管理的区域级证书。如需了解如何创建和使用自行管理的区域级证书,请参阅部署自行管理的区域级证书。不支持证书映射。
Google 管理的区域级证书。不支持证书映射。
Certificate Manager 支持以下类型的 Google 管理的区域级证书:
- 具有每个项目的 DNS 授权的 Google 管理的区域级证书。如需了解详情,请参阅部署具有 DNS 授权的 Google 管理的区域级证书。
- 使用 Certificate Authority Service 的 Google 管理的(专用)区域级证书。如需了解详情,请参阅使用 Certificate Authority Service 部署 Google 管理的区域级证书。
创建证书后,将证书直接附加到目标代理。
读取证书和私钥文件,然后创建 SSL 证书。以下示例展示了如何使用 Python 执行此操作。
向 regionTargetHttpsProxies.insert
方法发出 POST
请求以创建目标 HTTPS 代理,注意要将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionTargetHttpsProxy { "name": "l7-ilb-proxy", "urlMap": "projects/PROJECT_ID/regions/us-west1/urlMaps/l7-ilb-map", "sslCertificates": /projects/PROJECT_ID/regions/us-west1/sslCertificates/SSL_CERT_NAME }
向 forwardingRules.insert
方法发出 POST
请求来创建转发规则,并将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "l7-ilb-forwarding-rule", "IPAddress": "IP_ADDRESS", "IPProtocol": "TCP", "portRange": "80-80", "target": "projects/PROJECT_ID/regions/us-west1/targetHttpsProxies/l7-ilb-proxy", "loadBalancingScheme": "INTERNAL_MANAGED", "subnetwork": "projects/PROJECT_ID/regions/us-west1/subnetworks/backend-subnet", "network": "projects/PROJECT_ID/global/networks/lb-network", "networkTier": "PREMIUM", }
测试负载均衡器
如需测试负载均衡器,请创建一个客户端虚拟机。然后与虚拟机建立 SSH 会话,并将来自此虚拟机的流量发送到负载均衡器。
创建虚拟机实例以测试连接性
控制台
在 Google Cloud 控制台中,前往虚拟机实例页面。
点击创建实例。
将名称设置为
l7-ilb-client-us-west1-a
。将地区设置为
us-west1-a
。点击高级选项。
点击网络并配置以下字段:
- 对于网络标记,请输入
allow-ssh
。 - 对于网络接口,请选择以下内容:
- 网络:
lb-network
- 子网:
backend-subnet
- 网络:
- 对于网络标记,请输入
点击创建。
gcloud
gcloud compute instances create l7-ilb-client-us-west1-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --network=lb-network \ --subnet=backend-subnet \ --zone=us-west1-a \ --tags=allow-ssh
将流量发送到负载均衡器
登录您刚刚创建的实例,测试是否可以使用区域级内部应用负载均衡器的转发规则 IP 地址访问后端上的 HTTP(S) 服务,以及流量是否正在后端实例之间进行负载均衡。
使用 SSH 连接到每个客户端实例
gcloud compute ssh l7-ilb-client-us-west1-a \ --zone=us-west1-a
获取负载均衡器的 IP 地址
使用 gcloud compute addresses describe
命令查看分配的 IP 地址:
gcloud compute addresses describe l7-ilb-ip-address \ --region=us-west1
验证 IP 地址是否传送其主机名
将 IP_ADDRESS
替换为负载均衡器的 IP 地址。
对于 HTTP 测试:
curl IP_ADDRESS
对于 HTTPS 测试:
curl -k -s 'https://DOMAIN_NAME:443' --connect-to DOMAIN_NAME:443:IP_ADDRESS:443
将 DOMAIN_NAME
替换为您的应用域名,例如 test.example.com
。
-k
标志会导致 curl 跳过证书验证。
运行 100 个请求并确认它们已进行负载均衡
将 IP_ADDRESS
替换为负载均衡器的 IP 地址。
对于 HTTP:
{ RESULTS= for i in {1..100} do RESULTS="$RESULTS:$(curl --silent IP_ADDRESS)" done echo "***" echo "*** Results of load-balancing: " echo "***" echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c echo }
对于 HTTPS:
将 DOMAIN_NAME
替换为您的应用域名,例如 test.example.com
。
{ RESULTS= for i in {1..100} do RESULTS="$RESULTS:$(curl -k -s 'https://DOMAIN_NAME:443' --connect-to DOMAIN_NAME:443:IP_ADDRESS:443)" done echo "***" echo "*** Results of load-balancing: " echo "***" echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c echo }
其他配置选项
本部分对配置示例进行了扩展,以提供一些额外的替代配置选项。所有任务均为可选任务。您可以按任意顺序执行这些任务。
启用全球访问权限
您可以为区域级内部应用负载均衡器和区域级内部代理网络负载均衡器启用全球访问权限,以使其可供所有区域的客户端访问。示例负载均衡器的后端仍必须位于一个区域 (us-west1
) 中。
您不能修改现有区域转发规则来启用全球访问权限。您必须为此创建一个新的转发规则,并删除以前的转发规则。此外,在创建转发规则并启用全球访问权限后,无法对其进行修改。如需停用全球访问权限,您必须创建新的区域访问权限转发规则,并删除以前的全球访问权限转发规则。
如需配置全球访问权限,请更改以下配置。
控制台
为负载均衡器创建新的转发规则:
在 Google Cloud 控制台中,前往负载均衡页面。
在名称列中,点击您的负载均衡器。
点击前端配置。
点击添加前端 IP 和端口。
输入新转发规则的名称和子网详细信息。
对于子网,选择 backend-subnet。
在 IP 地址部分,您可以选择与现有转发规则相同的 IP 地址、预留新的 IP 地址,或使用临时 IP 地址。只有在创建 IP 地址时将 IP 地址
--purpose
标志设置为SHARED_LOADBALANCER_VIP
后,才能在多个转发规则之间共享相同的 IP 地址。在端口号部分,输入
110
。在全球访问权限部分,选择启用。
点击完成。
点击更新。
gcloud
使用
--allow-global-access
标志为负载均衡器创建新的转发规则。对于 HTTP:
gcloud compute forwarding-rules create l7-ilb-forwarding-rule-global-access \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=backend-subnet \ --address=10.1.2.99 \ --ports=80 \ --region=us-west1 \ --target-http-proxy=l7-ilb-proxy \ --target-http-proxy-region=us-west1 \ --allow-global-access
对于 HTTPS:
gcloud compute forwarding-rules create l7-ilb-forwarding-rule-global-access \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=backend-subnet \ --address=10.1.2.99 \ --ports=443 \ --region=us-west1 \ --target-https-proxy=l7-ilb-proxy \ --target-https-proxy-region=us-west1 \ --allow-global-access
您可以使用
gcloud compute forwarding-rules describe
命令来确定转发规则是否启用了全球访问权限。例如:gcloud compute forwarding-rules describe l7-ilb-forwarding-rule-global-access \ --region=us-west1 \ --format="get(name,region,allowGlobalAccess)"
启用全球访问权限后,在输出中转发规则的名称和区域之后会出现
True
一词。
创建客户端虚拟机以测试全球访问权限
控制台
在 Google Cloud 控制台中,前往虚拟机实例页面。
点击创建实例。
将名称设置为
europe-client-vm
。将地区设置为
europe-west1-b
。点击高级选项。
点击网络并配置以下字段:
- 对于网络标记,请输入
allow-ssh
。 - 对于网络接口,请选择以下内容:
- 网络:
lb-network
- 子网:
europe-subnet
- 网络:
- 对于网络标记,请输入
点击创建。
gcloud
在 europe-west1-b
可用区中创建客户端虚拟机。
gcloud compute instances create europe-client-vm \ --zone=europe-west1-b \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh \ --subnet=europe-subnet
连接到虚拟机客户端并测试连接
使用
ssh
连接到客户端实例。gcloud compute ssh europe-client-vm \ --zone=europe-west1-b
按照与从
us-west1
区域中的vm-client
相同的方式测试与负载均衡器的连接。curl http://10.1.2.99
启用会话亲和性
以下过程介绍了如何为示例区域级内部应用负载均衡器或跨区域内部应用负载均衡器更新后端服务,以便后端服务使用生成的 Cookie 亲和性、标头字段亲和性或 HTTP Cookie 亲和性。
启用生成的 Cookie 亲和性后,负载均衡器会针对第一个请求发出一个 Cookie。对于具有相同 Cookie 的每个后续请求,负载均衡器会将请求定向到同一个后端虚拟机 (VM) 实例或端点。在此示例中,该 Cookie 名为 GCILB
。
启用标头字段亲和性后,负载均衡器会根据 --custom-request-header
标志中指定的 HTTP 标头的值将请求路由到网络端点组 (NEG) 中的后端虚拟机或端点。仅当负载均衡位置政策为 RING_HASH
或 MAGLEV
且后端服务的一致性哈希指定 HTTP 标头的名称时,标头字段亲和性才有效。
启用 HTTP Cookie 亲和性后,负载均衡器会根据带有可选 --affinity-cookie-ttl
标志的 HTTP_COOKIE
标志中指定的 HTTP Cookie,将请求路由到 NEG 中的后端虚拟机或端点。如果客户端未在其 HTTP 请求中提供 Cookie,则代理会生成 Cookie 并通过 Set-Cookie
标头将其返回给客户端。仅当负载均衡位置政策为 RING_HASH
或 MAGLEV
且后端服务的一致性哈希指定 HTTP Cookie 时,HTTP Cookie 亲和性才有效。
控制台
如需针对后端服务启用或更改会话亲和性,请执行以下操作:
在 Google Cloud 控制台中,前往负载均衡页面。
- 点击后端。
- 点击 l7-ilb-backend-service(您为此示例创建的后端服务的名称),然后点击修改。
- 在后端服务详情页面上,点击高级配置。
- 在会话亲和性下,选择所需的会话亲和性类型。
- 点击更新。
gcloud
使用以下 Google Cloud CLI 命令可以将后端服务更新为不同类型的会话亲和性:
gcloud compute backend-services update l7-ilb-backend-service \ --session-affinity=[GENERATED_COOKIE | HEADER_FIELD | HTTP_COOKIE | CLIENT_IP] \ --region=us-west1
API
如需设置会话亲和性,请向 backendServices/patch
方法发出“PATCH”请求。
PATCH https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-west1/regionBackendServices/l7-ilb-backend-service { "sessionAffinity": ["GENERATED_COOKIE" | "HEADER_FIELD" | "HTTP_COOKIE" | "CLIENT_IP" ] }
限制哪些客户端可以向负载均衡器发送流量
您可以通过在客户端上配置出站流量防火墙规则,限制客户端连接到内部应用负载均衡器转发规则 VIP。您可以根据服务账号或标记在特定客户端虚拟机上设置这些防火墙规则。
您无法使用防火墙规则将入站流量限制到特定的内部应用负载均衡器转发规则 VIP 地址。与转发规则 VIP 位于同一 VPC 网络和同一区域的任何客户端通常都可以将流量发送到该转发规则 VIP。
此外,发送到后端的所有请求都来自使用代理专用子网范围内的 IP 地址的代理。您无法创建防火墙规则来根据客户端使用的转发规则 VIP 允许或拒绝这些后端上的入站流量。
以下示例说明了如何使用出站流量防火墙规则来限制到负载均衡器的转发规则 VIP 的流量。
控制台
如需标识客户端虚拟机,请标记要限制的特定虚拟机。这些标记用于将防火墙规则与标记的客户端虚拟机相关联。然后,在以下步骤中,将标记添加到 TARGET_TAG
字段中。
请使用一个或多个防火墙规则进行设置。
单个出站防火墙规则
您可以配置一个防火墙出站规则,以拒绝从标记客户端虚拟机到负载均衡器的 VIP 的所有出站流量。
在 Google Cloud 控制台中,前往防火墙规则页面。
点击创建防火墙规则以创建一个规则,拒绝从标记的客户端虚拟机到负载均衡器的 VIP 的出站流量。
- 名称:
fr-deny-access
- 网络:
lb-network
- 优先级:
100
- 流量方向:出站
- 对匹配项执行的操作:拒绝
- 目标:指定的目标标记
- 目标标记:
TARGET_TAG
- 目标过滤条件:IP 范围
- 目标 IP 地址范围:
10.1.2.99
- 协议和端口:
- 选择指定的协议和端口。
- 选中 tcp 复选框,然后输入
80
作为端口号。
- 名称:
点击创建。
多个出站防火墙规则
扩缩性更高的方法涉及设置两个规则。默认的低优先级规则禁止所有客户端访问负载均衡器的 VIP。第二个优先级较高的规则允许一部分标记客户端访问负载均衡器的 VIP。只有标记的虚拟机才能访问 VIP。
在 Google Cloud 控制台中,前往防火墙规则页面。
点击创建防火墙规则,创建优先级较低的规则以默认拒绝访问:
- 名称:
fr-deny-all-access-low-priority
- 网络:
lb-network
- 优先级:
200
- 流量方向:出站
- 对匹配项执行的操作:拒绝
- 目标:指定的目标标记
- 目标标记:
TARGET_TAG
- 目标过滤条件:IP 范围
- 目标 IP 地址范围:
10.1.2.99
- 协议和端口:
- 选择指定的协议和端口。
- 选中 TCP 复选框,然后输入
80
作为端口号。
- 名称:
点击创建。
点击创建防火墙规则,创建优先级较高的规则,以允许来自某些标记实例的流量。
- 名称:
fr-allow-some-access-high-priority
- 网络:
lb-network
- 优先级:
100
- 流量方向:出站
- 对匹配项执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
TARGET_TAG
- 目标过滤条件:IP 范围
- 目标 IP 地址范围:
10.1.2.99
- 协议和端口:
- 选择指定的协议和端口。
- 选中 TCP 复选框,然后输入
80
作为端口号。
- 名称:
点击创建。
gcloud
如需标识客户端虚拟机,请标记要限制的特定虚拟机。然后,在这些步骤中,在 TARGET_TAG
字段中添加标记。
请使用一个或多个防火墙规则进行设置。
单个出站防火墙规则
您可以配置一个防火墙出站规则,以拒绝从标记客户端虚拟机到负载均衡器的 VIP 的所有出站流量。
gcloud compute firewall-rules create fr-deny-access \ --network=lb-network \ --action=deny \ --direction=egress \ --rules=tcp \ --priority=100 \ --destination-ranges=10.1.2.99 \ --target-tags=TARGET_TAG
多个出站防火墙规则
扩缩性更高的方法涉及设置两个规则:默认的低优先级规则,限制所有客户端访问负载均衡器的 VIP;第二个优先级较高的规则,允许一部分标记的客户端访问负载均衡器的 VIP。只有标记的虚拟机才能访问 VIP。
创建优先级较低的规则:
gcloud compute firewall-rules create fr-deny-all-access-low-priority \ --network=lb-network \ --action=deny \ --direction=egress \ --rules=tcp \ --priority=200 \ --destination-ranges=10.1.2.99
创建优先级较高的规则:
gcloud compute firewall-rules create fr-allow-some-access-high-priority \ --network=lb-network \ --action=allow \ --direction=egress \ --rules=tcp \ --priority=100 \ --destination-ranges=10.1.2.99 \ --target-tags=TARGET_TAG
如需使用服务账号(而不是标记)来控制访问,请在创建防火墙规则时使用 --target-service-accounts
选项 而不是 --target-tags
标志。
根据子网扩缩对内部应用负载均衡器后端的受限访问
随着转发规则数量的增加,维护单独的防火墙规则或向现有规则添加新的负载均衡 IP 地址(如以上部分所述)变得非常不方便。防止这种情况的一个方法是从预留子网中分配转发规则 IP 地址。然后,通过将预留子网用作防火墙规则的目标范围,可以允许或阻止来自标记的实例或服务账号的流量。这样,您就可以有效地控制对一组转发规则 VIP 的访问,而无需维护每个 VIP 的防火墙出站规则。
下面简要说明了设置步骤(假设您要分别创建所有其他必需的负载均衡器资源)。
gcloud
创建一个区域级子网,用于为转发规则分配负载均衡的 IP 地址:
gcloud compute networks subnets create l7-ilb-restricted-subnet \ --network=lb-network \ --region=us-west1 \ --range=10.127.0.0/24
创建一个转发规则以从子网中获取地址。以下示例使用上一步中创建的子网中的地址
10.127.0.1
。gcloud compute forwarding-rules create l7-ilb-forwarding-rule-restricted \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=l7-ilb-restricted-subnet \ --address=10.127.0.1 \ --ports=80 \ --region=us-west1 \ --target-http-proxy=l7-ilb-proxy \ --target-http-proxy-region=us-west1
创建一个防火墙规则以限制流向转发规则子网 (
l7-ilb-restricted-subnet
) 中 IP 地址范围的流量:gcloud compute firewall-rules create restrict-traffic-to-subnet \ --network=lb-network \ --action=deny \ --direction=egress \ --rules=tcp:80 \ --priority=100 \ --destination-ranges=10.127.0.0/24 \ --target-tags=TARGET_TAG
配置后端子集化
后端子集化通过为每个代理实例分配后端子集来提高性能和可扩缩性。为后端服务启用后端子集化后,后端子集化会调整每个代理实例使用的后端数量,如下所示:
随着参与负载均衡器的代理实例数量的增加,子集的大小会减小。
当网络中的后端总数超过单个代理实例的容量时,系统会自动为启用了后端子集化的每项服务减小子集的大小。
以下示例介绍了如何创建区域级内部应用负载均衡器资源并启用后端子集化:
- 使用示例配置创建区域后端服务
l7-ilb-backend-service
。 通过将
--subsetting-policy
标志指定为CONSISTENT_HASH_SUBSETTING
来启用后端子集化。将负载均衡方案设置为INTERNAL_MANAGED
。gcloud
使用以下
gcloud
命令用后端子集化更新l7-ilb-backend-service
:gcloud beta compute backend-services update l7-ilb-backend-service \ --region=us-west1 \ --subsetting-policy=CONSISTENT_HASH_SUBSETTING
API
向
regionBackendServices/patch
方法发出PATCH
请求。PATCH https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/us-west1/backendServices/l7-ilb-backend-service { "subsetting": { "policy": CONSISTENT_HASH_SUBSETTING } }
您还可以通过设置 localityLbPolicy
政策来优化后端负载均衡。如需了解详情,请参阅流量政策。
在多个内部转发规则中使用同一 IP 地址
如果多个内部转发规则共用同一内部 IP 地址,您必须预留该 IP 地址,并将其 --purpose
标志设置为 SHARED_LOADBALANCER_VIP
。
gcloud
gcloud compute addresses create SHARED_IP_ADDRESS_NAME \ --region=REGION \ --subnet=SUBNET_NAME \ --purpose=SHARED_LOADBALANCER_VIP
更新客户端 HTTP keepalive 超时
前面步骤中创建的负载均衡器已配置客户端 HTTP keepalive 超时的默认值。如需更新客户端 HTTP keepalive 超时,请按照以下说明操作。
控制台
在 Google Cloud 控制台中,前往负载均衡页面。
- 点击要修改的负载均衡器的名称。
- 点击 修改。
- 点击前端配置。
- 展开高级功能。对于 HTTP keepalive 超时,请输入超时值。
- 点击更新。
- 如需查看更改,请点击查看并最终确定,然后点击更新。
gcloud
对于 HTTP 负载均衡器,请使用 gcloud compute target-http-proxies update
命令更新目标 HTTP 代理。
gcloud compute target-http-proxies update TARGET_HTTP_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --region=REGION
对于 HTTPS 负载均衡器,请使用 gcloud compute target-https-proxies update
命令更新目标 HTTPS 代理。
gcloud compute target-https-proxies update TARGET_HTTP_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --region REGION
替换以下内容:
TARGET_HTTP_PROXY_NAME
:目标 HTTP 代理的名称。TARGET_HTTPS_PROXY_NAME
:目标 HTTPS 代理的名称。HTTP_KEEP_ALIVE_TIMEOUT_SEC
:HTTP keepalive 超时值(5 到 600 秒)。