本文档介绍了如何为 Compute Engine 虚拟机上运行的服务配置区域级外部应用负载均衡器。
由于区域级外部应用负载均衡器允许您在特定区域中创建负载均衡器,因此它们通常用于具有管辖区合规性要求的工作负载。需要访问标准网络层级出站流量的工作负载是区域级外部应用负载均衡器的另一常见应用场景,因为区域级外部应用负载均衡器支持标准网络服务层级。
在按照本指南进行操作之前,请先熟悉以下内容:
权限
若要按照本指南中的说明进行操作,您必须能够创建实例以及修改项目中的网络。因此,您必须是项目 Owner 或 Editor,或者必须具有以下所有 Compute Engine IAM 角色。
任务 | 所需角色 |
---|---|
创建网络、子网和负载均衡器组件 | Network Admin |
添加和移除防火墙规则 | Security Admin |
创建实例 | Instance Admin |
如需了解详情,请参阅以下指南:
设置概览
您可以按照以下概要配置流程所述配置区域级外部应用负载均衡器。以下带编号的步骤对应于该图中的标号。
如上图所示,该示例在 us-west1
区域的 VPC 网络中创建了一个区域级外部应用负载均衡器,其中包含一项后端服务和两个后端实例组。
图中显示了以下内容:
包含两个子网的 VPC 网络:
一个子网用于后端(实例组)。该子网的主要 IP 地址范围为
10.1.2.0/24
。一个子网是
us-west1
区域中的代理专用子网。您必须在 VPC 网络内每一个使用区域级外部应用负载均衡器的区域中创建一个代理专用子网。该区域的代理专用子网会在该区域的所有区域级负载均衡器之间共享。对于从负载均衡器发送到服务后端的数据包,系统会从该代理专用子网分配其来源地址。在本示例中,该区域中代理专用子网的主要 IP 地址范围为10.129.0.0/23
,这是建议的子网大小。如需了解详情,请参阅代理专用子网。
允许在您的网络中使用代理专用子网流量的防火墙规则。这意味着添加一条规则以允许来自
10.129.0.0/23
(在此示例中为代理专用子网的范围)的 TCP 端口80
、443
和8080
流量。用于健康检查探测的另一个防火墙规则。后端实例。
实例组:
- Compute Engine 虚拟机部署所用的托管式实例组或非托管式实例组
- GKE 部署所用的 NEG
在每个可用区中,您可以根据自己的部署要求组合使用各种后端组。
用于报告后端就绪情况的区域健康检查。
用于监控后端使用情况和运行状况的区域性后端服务。
区域网址映射,用于解析请求的网址,并根据请求网址的主机和路径将请求转发到特定后端服务。
区域目标 HTTP 或 HTTPS 代理,用于接收用户请求并将其转发到网址映射。对于 HTTPS,请配置区域 SSL 证书资源。如果您配置 HTTPS 负载均衡,则目标代理可以使用 SSL 证书或 Certificate Manager 证书来解密 SSL 流量。目标代理可以通过 HTTP 或 HTTPS 将流量转发到您的实例。
包含负载均衡器外部 IP 地址的转发规则,用于将每个传入请求转发到目标代理。
与该转发规则关联的外部 IP 地址使用
gcloud compute addresses create
命令进行预留,如预留负载均衡器的 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 地址范围。
为后端配置网络和子网
控制台
在 Google Cloud 控制台中,进入 VPC 网络页面。
点击创建 VPC 网络。
对于名称,输入
lb-network
。在子网部分中执行以下操作:
- 将子网创建模式设置为自定义。
- 在新子网部分中,输入以下信息:
- 名称:
backend-subnet
- 区域:
us-west1
- 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
命令在us-west1
区域的lb-network
网络中创建子网:gcloud compute networks subnets create backend-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1
Terraform
如需创建 VPC 网络,请使用 google_compute_network
资源。
如需在 lb-network
网络中创建 VPC 子网,请使用 google_compute_subnetwork
资源。
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", }
配置代理专用子网
代理专用子网提供了一组 IP 地址,供 Google 用于代表您运行 Envoy 代理。代理会终结来自客户端的连接并创建与后端的新连接。
此代理专用子网用于 lb-network
VPC 网络的同一区域内所有基于 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
Terraform
如需在 lb-network
网络中创建 VPC 代理专用子网,请使用 google_compute_subnetwork
资源。
API
使用 subnetworks.insert
方法创建代理专用子网,并将 PROJECT_ID 替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/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-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 控制台中,转到防火墙政策页面。
点击创建防火墙规则 以创建允许 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-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
Terraform
如需创建防火墙规则,请使用 google_compute_firewall
资源。
API
通过向 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" }
使用基于虚拟机的服务配置区域级外部应用负载均衡器
本部分介绍了在 Compute Engine 虚拟机上运行的服务需要的配置。客户端虚拟机中的应用会访问您在转发规则中配置的虚拟 IP 地址 (VIP)。当您的客户端应用向此 IP 地址和端口发送流量时,它们的请求会根据您的区域级外部应用负载均衡器的网址映射转发到您的后端虚拟机 (VM)。
此页面上的示例明确为区域级外部应用负载均衡器转发规则创建预留外部 IP 地址,而不是允许分配临时外部 IP 地址。我们建议的最佳实践是,为转发规则预留 IP 地址。
创建托管式实例组后端
本部分介绍如何创建模板和托管式实例组。托管式实例组提供运行示例区域级外部应用负载均衡器的后端服务器的虚拟机实例。来自客户端的流量在经过负载均衡处理后传送到这些后端服务器。出于演示目的,后端会传送其自己的主机名。
控制台
创建实例模板。在 Google Cloud 控制台中,进入实例模板页面。
- 点击创建实例模板。
- 对于名称,输入
l7-xlb-backend-template
。 - 确保启动磁盘已设置为 Debian 映像,例如 Debian GNU/Linux 12 (bookworm)。本文中的说明使用仅 Debian 支持的命令,例如
apt-get
。 - 点击高级选项。
- 点击网络并配置以下字段:
- 对于网络标记,请输入
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)(新的托管式实例组 [无状态])。如需了解详情,请参阅无状态或有状态 MIG。
- 对于名称,输入
l7-xlb-backend-example
。 - 对于位置,选择单个可用区。
- 对于区域,请选择
us-west1
。 - 对于可用区,请选择
us-west1-a
。 - 对于实例模板,请选择
l7-xlb-backend-template
。 对于自动扩缩模式,选择“开启:在实例组中添加和移除实例”。
将实例数下限设置为
2
,并将实例数上限设置为2
或更大。点击创建。
gcloud
本指南中的 gcloud
说明假定您使用的是 Cloud Shell 或安装了 bash 的其他环境。
使用
gcloud compute instance-templates create
命令创建含有 HTTP 服务器的虚拟机实例模板。gcloud compute instance-templates create l7-xlb-backend-template \ --region=us-west1 \ --network=lb-network \ --subnet=backend-subnet \ --tags=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-xlb-backend-example \ --zone=us-west1-a \ --size=2 \ --template=l7-xlb-backend-template
Terraform
如需创建实例模板,请使用 google_compute_instance_template
资源。
如需创建代管式实例组,请使用 google_compute_instance_group_manager
资源。
API
使用
instanceTemplates.insert
方法创建实例模板,注意要将PROJECT_ID
替换为您的项目 ID。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates { "name":"l7-xlb-backend-template", "properties": { "machineType":"e2-standard-2", "tags": { "items":[ "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\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)\"\necho \"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-xlb-backend-example", "zone": "projects/PROJECT_ID/zones/us-west1-a", "instanceTemplate": "projects/PROJECT_ID/global/instanceTemplates/l7-xlb-backend-template", "baseInstanceName": "l7-xlb-backend-example", "targetSize": 2 }
向实例组添加已命名端口
对于您的实例组,定义一个 HTTP 服务并将端口名称映射到相关端口上。负载均衡器的后端服务会将流量转发到已命名的端口。
控制台
在 Google Cloud 控制台中,转到实例组页面。
点击实例组的名称(在此示例中为
l7-xlb-backend-example
)。在实例组的概览页面上,点击修改
。点击指定端口名称映射。
点击添加项目。
对于端口名称,请输入
http
。对于端口号,请输入80
。点击保存。
gcloud
使用 gcloud compute instance-groups
set-named-ports
命令。
gcloud compute instance-groups set-named-ports l7-xlb-backend-example \ --named-ports http:80 \ --zone us-west1-a
Terraform
named_port
特性包含在代管式实例组示例中。
预留负载均衡器的 IP 地址
为负载均衡器预留静态 IP 地址。
控制台
在 Google Cloud 控制台中,进入预留静态地址页面。
为新地址选择一个名称。
对于网络服务层级,请选择标准。
在 IP 版本部分,选择 IPv4。IPv6 地址仅限为全球地址,只适用于全球负载均衡器。
对于类型,请选择区域。
对于区域,选择 us-west1。
将附加目标选项设置为无。创建负载均衡器后,此 IP 地址将关联到负载均衡器的转发规则。
点击预留以预留该 IP 地址。
gcloud
如需使用
gcloud compute
预留静态外部 IP 地址,请使用compute addresses create
命令。gcloud compute addresses create ADDRESS_NAME \ --region=us-west1 \ --network-tier=STANDARD
替换以下内容:
ADDRESS_NAME
:您要为此地址指定的名称。REGION
:您要预留此地址的区域。此区域应与负载均衡器所在的区域相同。所有区域级 IP 地址均为IPv4
。
使用
compute addresses describe
命令可以查看结果:gcloud compute addresses describe ADDRESS_NAME
Terraform
如需预留 IP 地址,请使用 google_compute_address
资源。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
API
如需创建区域 IPv4 地址,请调用区域 addresses.insert
方法:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses
请求正文应包含以下内容:
{ "name": "ADDRESS_NAME" "networkTier": "STANDARD" "region": "us-west1" }
替换以下内容:
ADDRESS_NAME
:地址的名称REGION
:此请求的区域名称PROJECT_ID
:此请求的项目 ID
配置负载均衡器
下面的示例介绍了如何创建以下区域级外部应用负载均衡器资源:
- HTTP 健康检查
- 将托管式实例组用作后端的后端服务
- 网址映射
- 如果为目标 HTTP(S) 代理定义了区域,请务必参阅区域网址映射。区域网址映射根据您为传入网址的主机和路径定义的规则将请求路由到区域后端服务。区域网址映射只能由同一区域中的区域目标代理规则引用。
- SSL 证书(适用于 HTTPS)
- 目标代理
- 转发规则
代理可用性
有时,Google Cloud 区域没有足够的代理容量来容纳新的负载均衡器。如果发生这种情况,Google Cloud 控制台会在您创建负载均衡器时提供一条代理可用性警告消息。如需解决此问题,您可以执行以下任一操作:
- 为您的负载均衡器选择其他区域。如果您的后端位于其他区域,这是一种切实可行的做法。
- 选择一个已分配有代理专用子网的 VPC 网络。
等待容量问题的解决。
控制台
开始配置
在 Google Cloud 控制台中,转到负载均衡页面。
- 点击创建负载均衡器。
- 在负载均衡器的类型字段中,选择应用负载均衡器 (HTTP/HTTPS),然后点击下一步。
- 在公共或内部字段中,选择公共(外部),然后点击下一步。
- 对于全球或单区域部署,选择最适合区域级工作负载,然后点击下一步。
- 点击配置。
基本配置
- 对于负载均衡器的名称,请输入
regional-l7-xlb
。 - 对于区域,请选择
us-west1
。 - 对于网络,请选择
lb-network
。
预留代理专用子网
对于区域级外部应用负载均衡器,请预留代理专用子网:
- 点击预留子网。
- 对于名称,输入
proxy-only-subnet
。 - 对于 IP 地址范围,输入
10.129.0.0/23
。 - 点击添加。
配置前端
对于 HTTP:
- 点击前端配置。
- 将名称设置为
l7-xlb-forwarding-rule
。 - 将协议设置为
HTTP
。 - 将端口设置为
80
。 - 选择您在预留负载均衡器的 IP 地址中创建的 IP 地址。
- 点击完成。
对于 HTTPS:
- 点击前端配置。
- 在名称字段中,输入
l7-xlb-forwarding-rule
。 - 在协议字段中,选择
HTTPS (includes HTTP/2)
。 - 确保将端口设置为
443
。 - 选择您在预留负载均衡器的 IP 地址中创建的 IP 地址。
- 在证书列表中,执行以下操作:
- 如果您已拥有 Compute Engine 自行管理的 SSL 证书资源,请选择主要 SSL 证书。
- 点击创建新证书。
- 在名称字段中,输入
l7-xlb-cert
。 - 在相应字段中上传您的 PEM 格式的文件:
- 证书
- 私钥
- 点击创建。
- 在名称字段中,输入
- 可选:如需添加除了主要 SSL 证书之外的其他证书,请执行以下操作:
- 点击添加证书。
- 如果您已有证书,请从证书列表中选择。
- 可选:点击创建新证书,然后按照上一步中指定的说明操作。
从 SSL 政策列表中选择一项 SSL 政策。(可选)如需创建 SSL 政策,请执行以下操作:
- 在 SSL 政策列表中,选择创建政策。
- 输入 SSL 政策的名称。
- 选择最低的 TLS 版本。默认值为 TLS 1.0。
- 选择预配置的 Google 管理的配置文件之一,或者选择一个使您可以单独选择 SSL 功能的自定义配置文件。系统会显示已启用的功能和已停用的功能。
- 点击保存。
如果您尚未创建任何 SSL 政策,则系统会应用默认 Google Cloud SSL 政策。
点击完成。
配置后端服务
- 点击后端配置。
- 在创建或选择后端服务菜单中,选择创建后端服务。
- 将后端服务的名称设置为
l7-xlb-backend-service
。 - 对于协议,选择 HTTP。
- 对于已命名端口,输入
http
。 - 将后端类型设置为实例组。
- 在新后端部分:
- 将实例组设置为
l7-xlb-backend-example
。 - 将端口号设置为
80
。 - 将平衡模式设置为利用率。
- 点击完成。
- 将实例组设置为
- 在健康检查列表中,点击创建健康检查。
- 将名称设置为
l7-xlb-basic-check
。 - 将协议设置为
HTTP
。 - 将端口设置为
80
。 - 点击保存。
- 将名称设置为
- 点击创建。
配置路由规则
- 点击路由规则。
- 对于模式,选择简单主机和路径规则。
- 确保
l7-xlb-backend-service
是任何不匹配的主机和任何不匹配的路径的唯一后端服务。
检查配置
- 点击检查并最终确定。
- 查看负载均衡器配置设置。
- 可选:点击等效代码以查看将用于创建负载均衡器的 REST API 请求。
- 点击创建。
gcloud
使用
gcloud compute health-checks create http
命令定义 HTTP 健康检查。gcloud compute health-checks create http l7-xlb-basic-check \ --region=us-west1 \ --request-path='/' \ --use-serving-port
使用
gcloud compute backend-services create
命令定义后端服务。gcloud compute backend-services create l7-xlb-backend-service \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTP \ --port-name=http \ --health-checks=l7-xlb-basic-check \ --health-checks-region=us-west1 \ --region=us-west1
使用
gcloud compute backend-services add-backend
命令将后端添加到后端服务。gcloud compute backend-services add-backend l7-xlb-backend-service \ --balancing-mode=UTILIZATION \ --instance-group=l7-xlb-backend-example \ --instance-group-zone=us-west1-a \ --region=us-west1
使用
gcloud compute url-maps create
命令创建网址映射。gcloud compute url-maps create regional-l7-xlb-map \ --default-service=l7-xlb-backend-service \ --region=us-west1
创建目标代理。
对于 HTTP:
对于 HTTP 负载均衡器,使用
gcloud compute target-http-proxies create
命令创建目标代理。gcloud compute target-http-proxies create l7-xlb-proxy \ --url-map=regional-l7-xlb-map \ --url-map-region=us-west1 \ --region=us-west1
对于 HTTPS:
您可以创建 Compute Engine 证书或 Certificate Manager 证书。使用以下任一方法通过 Certificate Manager 创建证书:
- 自行管理的区域级证书。如需了解如何创建和使用自行管理的区域级证书,请参阅部署自行管理的区域级证书。不支持证书映射。
Google 管理的区域级证书。不支持证书映射。
Certificate Manager 支持以下类型的 Google 管理的区域级证书:
- 具有每个项目的 DNS 授权的 Google 管理的区域级证书。如需了解详情,请参阅部署 Google 管理的区域级证书。
- 使用 Certificate Authority Service 的 Google 管理的(专用)区域级证书。如需了解详情,请参阅使用 CA 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-xlb-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-xlb-proxy \ --url-map=regional-l7-xlb-map \ --region=us-west1 \ --ssl-certificates=l7-xlb-cert
创建转发规则。
对于 HTTP:
使用带有正确标志的
gcloud compute forwarding-rules create
命令。gcloud compute forwarding-rules create l7-xlb-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=STANDARD \ --network=lb-network \ --address=ADDRESS_NAME \ --ports=80 \ --region=us-west1 \ --target-http-proxy=l7-xlb-proxy \ --target-http-proxy-region=us-west1
对于 HTTPS:
使用带有正确标志的
gcloud compute forwarding-rules create
命令创建转发规则。gcloud compute forwarding-rules create l7-xlb-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=STANDARD \ --network=lb-network \ --address=ADDRESS_NAME \ --ports=443 \ --region=us-west1 \ --target-https-proxy=l7-xlb-proxy \ --target-https-proxy-region=us-west1
创建证书后,将证书直接附加到目标代理。
Terraform
如需创建健康检查,请使用 google_compute_region_health_check
资源。
如需创建后端服务,请使用 google_compute_region_backend_service
资源。
如需创建网址映射,请使用 google_compute_region_url_map
资源。
如需创建目标 HTTP 代理,请使用 google_compute_region_target_http_proxy
资源。
如需创建转发规则,请使用 google_compute_forwarding_rule
资源。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
API
向 regionHealthChecks.insert
方法发出 POST
请求以创建健康检查,注意要将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/regions/{region}/healthChecks
{
"name": "l7-xlb-basic-check",
"type": "HTTP",
"httpHealthCheck": {
"portSpecification": "USE_SERVING_PORT"
}
}
向 regionBackendServices.insert
方法发出 POST
请求以创建区域后端服务,注意要将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/regions/us-west1/backendServices
{
"name": "l7-xlb-backend-service",
"backends": [
{
"group": "projects/<var>PROJECT_ID</var>/zones/us-west1-a/instanceGroups/l7-xlb-backend-example",
"balancingMode": "UTILIZATION"
}
],
"healthChecks": [
"projects/<var>PROJECT_ID</var>/regions/us-west1/healthChecks/l7-xlb-basic-check"
],
"loadBalancingScheme": "EXTERNAL_MANAGED"
}
向 regionUrlMaps.insert
方法发出 POST
请求以创建网址映射,注意要将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/regions/us-west1/urlMaps
{
"name": "regional-l7-xlb-map",
"defaultService": "projects/<var>PROJECT_ID</var>/regions/us-west1/backendServices/l7-xlb-backend-service"
}
向 regionTargetHttpProxies.insert
方法发出 POST
请求以创建目标 HTTP 代理,注意要将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/targetHttpProxy { "name": "l7-xlb-proxy", "urlMap": "projects/PROJECT_ID/global/urlMaps/regional-l7-xlb-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-xlb-forwarding-rule", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "portRange": "80-80", "target": "projects/PROJECT_ID/regions/us-west1/targetHttpProxies/l7-xlb-proxy", "loadBalancingScheme": "EXTERNAL_MANAGED", "network": "projects/PROJECT_ID/global/networks/lb-network", "networkTier": "STANDARD", }
将您的网域连接到负载均衡器
创建负载均衡器后,请记好与负载均衡器关联的 IP 地址,例如 30.90.80.100
。如需将您的网域指向负载均衡器,请使用您的网域注册服务创建 A
记录。如果您向 SSL 证书添加了多个网域,则必须为每个网域添加一条 A
记录,所有网域均指向负载均衡器的 IP 地址。例如,如需为 www.example.com
和 example.com
创建 A
记录,请使用以下命令:
NAME TYPE DATA www A 30.90.80.100 @ A 30.90.80.100
如果您使用 Cloud DNS 作为 DNS 提供商,请参阅添加、修改和删除记录。
测试负载均衡器
现在负载均衡服务已运行,您可以将流量发送到转发规则并会发现流量被分散到不同的实例。
控制台
在 Google Cloud 控制台中,转到负载均衡页面。
- 点击您刚刚创建的负载均衡器。
- 在后端部分中,确认虚拟机运行状况良好。运行状况良好列应该会填充相应信息,指示两个虚拟机运行状况都良好 (
2/2
)。否则,请先尝试重新加载页面。Google Cloud 控制台可能需要一些时间才能指示虚拟机运行状况良好。如果几分钟后后端的健康状况仍然不佳,请检查防火墙配置以及分配给后端虚拟机的网络标记。 - 在 Google Cloud 控制台显示后端实例运行状况良好后,您可使用网络浏览器转到
https://IP_ADDRESS
(或http://IP_ADDRESS
),来测试您的负载均衡器。将IP_ADDRESS
替换为负载均衡器的 IP 地址。 - 如果您使用自签名证书测试 HTTPS,您的浏览器将显示警告。您必须明确指示浏览器接受自签名证书。
- 您的浏览器应该会呈现一个页面,其中的内容显示提供该页面的实例的名称以及其可用区(例如,
Page served from: lb-backend-example-xxxx
)。如果您的浏览器未呈现此页面,请查看本指南中的配置设置。
gcloud
请记下预留的 IPv4 地址:
gcloud beta compute addresses describe ADDRESS_NAME \ --format="get(address)" \ --region="us-west1"
您可以使用网络浏览器转到 https://IP_ADDRESS
(或 http://IP_ADDRESS
)来测试您的负载均衡器。将 IP_ADDRESS
替换为负载均衡器的 IP 地址。
如果您使用自签名证书来测试 HTTPS,您的浏览器将显示警告。您必须明确指示浏览器接受自签名证书。
您的浏览器应会打开一个页面,其中包含有关后端实例的极少量信息。如果您的浏览器没有打开此页面,请检查本指南中的配置设置。
其他配置选项
本部分对配置示例进行了扩展,以提供一些额外的替代配置选项。所有任务均为可选任务。您可以按任意顺序执行这些任务。
启用会话亲和性
这些过程介绍了如何为示例区域级外部应用负载均衡器更新后端服务,以便后端服务使用生成的 Cookie 亲和性、标头字段亲和性或 HTTP Cookie 亲和性。
启用生成的 Cookie 亲和性后,负载均衡器会针对第一个请求发出一个 Cookie。对于具有相同 Cookie 的每个后续请求,负载均衡器会将请求定向到同一个后端虚拟机或端点。对于区域级外部应用负载均衡器,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-xlb-backend-service(您为此示例创建的后端服务的名称),然后点击修改。
在后端服务详情页面上,点击高级配置。
对于会话亲和性,从菜单中选择所需的会话亲和性类型。
点击更新。
gcloud
使用以下 gcloud 命令将 l7-xlb-backend-service
后端服务更新为不同类型的会话亲和性:
gcloud compute backend-services update l7-xlb-backend-service \ --session-affinity=[GENERATED_COOKIE | HEADER_FIELD | HTTP_COOKIE | CLIENT_IP] --region=us-west1
API
如需设置会话亲和性,请向 regionBackendServices/patch
方法发出 PATCH
请求。
PATCH https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-west1/regionBackendServices/l7-xlb-backend-service
{
"sessionAffinity": ["GENERATED_COOKIE" | "HEADER_FIELD" | "HTTP_COOKIE" | "CLIENT_IP" ]
}