以下后端类型支持使用 Identity-Aware Proxy (IAP) 的外部应用负载平衡器:
- 实例组
- 区域网络端点组 (NEG)
- 无服务器 NEG:一个或多个 Cloud Run 服务
- 互联网 NEG,适用于 Google Cloud 之外的端点(也称为自定义源站)
- 混合连接 NEG:适用于超出 Google Cloud的端点,例如本地数据中心和其他可使用混合连接访问的公有云。
- Private Service Connect NEG,可解析为以下任一端点:
- Google 管理的区域性 API 端点
- 使用 Private Service Connect 发布的托管式服务
如需了解一般概念,请参阅外部应用负载均衡器概览。
如果您是传统应用负载均衡器的现有用户,则在规划使用全球外部应用负载均衡器的新部署时,请确保查看迁移概览。
负载均衡器拓扑
对于 HTTPS 负载均衡器,您需要创建下图所示的配置。
对于 HTTP 负载均衡器,您需要创建下图所示的配置。
图中的事件顺序如下所示:
- 客户端将内容请求发送到转发规则中定义的外部 IPv4 地址。
对于 HTTPS 负载均衡器,转发规则会将请求定向到目标 HTTPS 代理。
对于 HTTP 负载均衡器,转发规则会将请求定向到目标 HTTP 代理。
目标代理使用网址映射中的规则确定单个后端服务接收所有请求。
负载均衡器确定后端服务只有一个实例组,并将请求定向到该组中的虚拟机实例。
该虚拟机提供用户请求的内容。
准备工作
在创建负载均衡器之前,请先完成以下步骤。
设置 SSL 证书资源
如需创建负载均衡器,您必须拥有可附加到目标代理的 SSL 证书资源。SSL 证书资源可以是证书映射,也可以是 Compute Engine SSL 证书(经典证书)。
证书映射
您可以按照以下任一文档中的说明创建证书映射:
- 部署具有负载均衡器授权的 Google 管理的全球证书
- 部署具有 DNS 授权的 Google 管理的全球证书
- 部署具有 Certificate Authority Service 的 Google 管理的全球证书
- 部署自行管理的全球证书
Compute Engine SSL 证书
对于 HTTPS 负载均衡器,请按照以下其中一个文档中的说明创建 Compute Engine SSL 证书资源:
我们建议您使用 Google 管理的证书。
设置权限
为完成本指南中的步骤,您必须拥有在项目中创建 Compute Engine 实例、防火墙规则和预留 IP 地址的权限。您必须具有 Project Owner 或 Project Editor 角色,或者必须具有以下 Compute Engine IAM 角色。
| 任务 | 所需角色 |
|---|---|
| 创建实例 | Instance Admin |
| 添加和移除防火墙规则 | Security Admin |
| 创建负载平衡器组件 | Network Admin |
| 创建项目(可选) | Project Creator |
如需了解详情,请参阅以下指南:
可选:使用 BYOIP 地址
借助自备 IP (BYOIP),您可以将自己的公共地址导入Google Cloud ,以便将这些地址用于 Google Cloud 资源。例如,如果您导入了自己的 IPv4 地址,则可以在配置负载均衡器时将其中一个地址分配给转发规则。按照本文档中的说明设置负载均衡器时,请提供 BYOIP 地址作为 IP 地址。
如需详细了解如何使用 BYOIP,请参阅自备 IP 地址。
配置网络和子网
如需创建示例网络和子网,请按照以下步骤操作。
控制台
在 Google Cloud 控制台中,前往 VPC 网络页面。
点击创建 VPC 网络。
输入网络的名称。
在子网创建模式字段中,选择自定义。
在新子网部分中,配置以下字段:
- 为子网提供名称。
- 选择区域。
- 在 IP 栈类型字段中,选择 IPv4(单栈)。
- 输入 IP 地址范围。这是子网的主要 IPv4 范围。
点击完成。
如需在其他区域中添加子网,请点击添加子网,然后重复上述步骤。
点击创建。
gcloud
创建自定义模式 VPC 网络:
gcloud compute networks create NETWORK \ --subnet-mode=custom在该网络中,为后端创建子网:
gcloud compute networks subnets create SUBNET \ --network=NETWORK \ --stack-type=IPV4_ONLY \ --range=10.1.2.0/24 \ --region=REGION替换以下内容:
NETWORK:VPC 网络的名称。SUBNET:子网的名称。REGION:区域的名称。
创建代管式实例组
如需使用 Compute Engine 后端设置负载均衡器,您的虚拟机必须属于某个实例组。本指南介绍了如何创建由一组运行有 Apache 的 Linux 虚拟机组成的托管式实例组,然后设置负载均衡。 托管式实例组根据您指定的实例模板创建每个托管式实例。
这个托管式实例组提供运行外部 HTTP(S) 负载均衡器的后端服务器的虚拟机。出于演示目的,后端会传送其各自的主机名。
在创建托管式实例组之前,请先创建实例模板。
控制台
如需支持 IPv4 流量,请按以下步骤操作:
在 Google Cloud 控制台中,转到实例模板页面。
点击创建实例模板。
对于名称,输入
lb-backend-template。确保启动磁盘已设置为 Debian 映像,例如 Debian GNU/Linux 10 (buster)。本文中的说明使用仅 Debian 支持的命令,例如
apt-get。展开高级选项。
展开网络并配置以下字段:
- 对于网络标记,请输入
allow-health-check。 - 在网络接口部分中,点击 修改并进行以下更改:
- 网络:
NETWORK - 子网:
SUBNET - IPv4 流量:IPv4(单栈)
- 网络:
- 点击完成。
- 对于网络标记,请输入
展开管理。 在启动脚本字段中,输入以下脚本:
#! /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
如需支持 IPv4 流量,请运行以下命令:
gcloud compute instance-templates create TEMPLATE_NAME \
--region=REGION \
--network=NETWORK \
--subnet=SUBNET \
--stack-type=IPV4_ONLY \
--tags=allow-health-check \
--image-family=debian-10 \
--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'
Terraform
如需创建实例模板,请使用 google_compute_instance_template 资源。
创建代管式实例组并选择实例模板。
控制台
在 Google Cloud 控制台中,前往实例群组页面。
点击创建实例组。
在左侧选择新建托管式实例组(无状态)。
对于名称,输入
lb-backend-example。在位置下方,选择单个可用区。
对于区域,选择您的首选区域。
对于可用区,选择一个可用区。
在实例模板下方,选择实例模板
lb-backend-template。对于自动扩缩模式,选择“开启:在实例组中添加和移除实例”。
将实例数下限设置为
2,并将实例数上限设置为2或更大。如需创建新的实例组,请点击创建。
gcloud
基于模板创建托管式实例组。
gcloud compute instance-groups managed create lb-backend-example \ --template=TEMPLATE_NAME --size=2 --zone=ZONE_A
Terraform
如需创建托管式实例组,请使用 google_compute_instance_group_manager 资源。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
向实例组添加已命名端口
对于您的实例组,定义一个 HTTP 服务并将端口名称映射到相关端口上。负载均衡服务会将流量转发到已命名的端口。 如需了解详情,请参阅已命名的端口。
控制台
在 Google Cloud 控制台中,前往实例群组页面。
点击 lb-backend-example。
在实例组的概览页面上,点击 修改。
在端口映射部分中,点击添加端口。
- 对于端口名称,请输入
http。对于端口号,请输入80。
- 对于端口名称,请输入
点击保存。
gcloud
使用 gcloud compute instance-groups
set-named-ports 命令。
gcloud compute instance-groups set-named-ports lb-backend-example \
--named-ports http:80 \
--zone ZONE_A
Terraform
named_port 属性包含在托管式实例组示例中。
配置防火墙规则
在此示例中,您将创建 fw-allow-health-check 防火墙规则。这是一种入站流量规则,允许来自 Google Cloud 健康检查系统(130.211.0.0/22 和 35.191.0.0/16)的流量。此示例使用目标标记 allow-health-check 来标识虚拟机。
控制台
在 Google Cloud 控制台中,前往防火墙政策页面。
点击创建防火墙规则以创建防火墙规则。
对于名称,输入
fw-allow-health-check。选择网络。
在目标下,选择指定的目标标记。
使用
allow-health-check填充目标标记字段。将来源过滤条件设置为 IPv4 范围。
将来源 IPv4 范围设置为
130.211.0.0/22和35.191.0.0/16。在协议和端口下,选择指定的协议和端口。
选中 TCP 复选框,然后输入端口号
80。点击创建。
gcloud
gcloud compute firewall-rules create fw-allow-health-check \
--network=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
Terraform
如需创建防火墙规则,请使用 google_compute_firewall 资源。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
保留外部 IP 地址
现在您的实例已启动并正在运行,接下来请设置一个全局静态外部 IP 地址,以供客户用来访问您的负载均衡器。
控制台
在 Google Cloud 控制台中,前往外部 IP 地址页面。
如需预留 IPv4 地址,请点击预留外部静态 IP 地址。
对于名称,输入
lb-ipv4-1。将网络服务层级设置为优质。
将 IP 版本设置为 IPv4。
将类型设置为全局。
点击预留。
gcloud
gcloud compute addresses create lb-ipv4-1 \
--ip-version=IPV4 \
--network-tier=PREMIUM \
--global
请记下预留的 IPv4 地址:
gcloud compute addresses describe lb-ipv4-1 \
--format="get(address)" \
--global
Terraform
如需预留 IP 地址,请使用 google_compute_global_address 资源。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
设置负载均衡器
在此示例中,您将在客户端和负载均衡器之间使用 HTTPS(前端)。对于 HTTPS,您需要一个或多个 SSL 证书资源来配置代理。我们建议您使用 Google 管理的证书。
即使您在前端使用 HTTPS,也可以在后端使用 HTTP。Google 会自动对 Google Front End (GFE) 前端与 Google Cloud VPC 网络中的后端之间的流量进行加密。
控制台
选择负载均衡器类型
在 Google Cloud 控制台中,前往负载均衡页面。
- 点击创建负载均衡器。
- 在负载均衡器的类型字段中,选择应用负载均衡器 (HTTP/HTTPS),然后点击下一步。
- 在公共或内部字段中,选择公共(外部),然后点击下一步。
- 在全球或单个区域部署字段中,选择最适合全球性工作负载,然后点击下一步。
- 对于负载均衡器世代,选择传统应用负载均衡器,然后点击下一步。
- 点击配置。
基本配置
在负载均衡器名称部分,输入 web-map-https 或 web-map-http 等内容。
前端配置
- 点击前端配置。
- 将协议设置为 HTTPS。
- 对于 IPv4 流量,选择
IPv4。将 IP 地址设置为您之前创建的lb-ipv4-1。 - 将端口设置为 443。
- 在选择证书仓库字段中,选择使用证书映射或使用经典证书。
- 根据您的选择,选择证书映射或经典证书。
- 可选:创建 SSL 政策:
- 在 SSL 政策列表中,选择创建政策。
- 将 SSL 政策的名称设置为
my-ssl-policy。 - 对于最低的 TLS 版本,请选择 TLS 1.0。
- 对于配置文件,请选择新型。您将看到已启用的功能和已停用的功能。
- 点击保存。
-
可选:选中启用从 HTTP 到 HTTPS 的重定向复选框以启用重定向。
启用此复选框会创建一个额外的部分 HTTP 负载均衡器,它使用与 HTTPS 负载均衡器相同的 IP 地址,并将传入 HTTP 请求重定向到负载均衡器的 HTTPS 前端。
只有在选择 HTTPS 协议并使用预留的 IP 地址时,才能选中此复选框。
- 点击完成。
后端配置
- 点击后端配置。
- 在后端服务和后端存储桶下,选择创建后端服务。
- 添加后端服务的名称,例如
web-backend-service。 - 前往安全部分,然后选择启用 IAP 来保护对应用的访问。
Cloud CDN 与 IAP 不兼容。如果您已启用 Cloud CDN,但选择启用 IAP,则 Cloud CDN 会自动停用。
-
可选:配置默认的后端安全政策。默认安全政策会限制超出用户配置阈值的流量。如需详细了解默认安全政策,请参阅速率限制概览。
- 如需停用 Cloud Armor 默认安全政策,请在 Cloud Armor 后端安全政策列表中选择
None。 - 如需配置 Cloud Armor 默认安全政策,请在 Cloud Armor 后端安全政策列表中选择默认安全政策。
- 在政策名称字段中,接受自动生成的名称或输入安全政策的名称。
- 在请求数字段中,接受默认请求数,或输入介于
1和10,000之间的整数。 - 在间隔字段中,选择间隔。
- 在对密钥实施字段中,选择以下值之一:全部、IP 地址或 X-Forwarded-For IP 地址。如需详细了解这些选项,请参阅确定客户端以进行速率限制。
- 如需停用 Cloud Armor 默认安全政策,请在 Cloud Armor 后端安全政策列表中选择
- 保留其他默认设置。
- 点击创建。
宿主机和路径规则
对于主机和路径规则,保留默认设置。
检查并最终确定
- 点击检查并最终确定。
- 查看负载均衡器配置设置。
- 可选:点击等效代码以查看将用于创建负载均衡器的 REST API 请求。
- 点击创建。
等待负载均衡器创建完毕。
如果您已创建 HTTPS 负载均衡器并选中了启用从 HTTP 到 HTTPS 的重定向复选框,您还将看到使用 -redirect 后缀创建的 HTTP 负载均衡器。
- 点击负载均衡器的名称。
- 在负载均衡器详情屏幕上,记下负载均衡器的 IP:端口。
gcloud
- 创建健康检查。
gcloud compute health-checks create http http-basic-check \ --port 80 - 创建后端服务。
gcloud compute backend-services create web-backend-service \ --load-balancing-scheme=EXTERNAL \ --protocol=HTTP \ --port-name=http \ --health-checks=http-basic-check \ --global - 将您的实例组作为后端添加到后端服务。
gcloud beta compute backend-services add-backend web-backend-service \ --instance-group=lb-backend-example \ --instance-group-zone=ZONE_A \ --global
- 对于 HTTP,请创建网址映射以将传入请求路由到默认后端服务。
gcloud beta compute url-maps create web-map-http \ --default-service web-backend-service
- 对于 HTTPS,请创建网址映射以将传入请求路由到默认后端服务。
gcloud beta compute url-maps create web-map-https \ --default-service web-backend-service
设置 HTTPS 前端
对于 HTTP 负载均衡器,请跳过此部分。
- 对于 HTTPS,请按照以下部分所述创建全球 SSL 证书资源(如果您尚未创建)。在此示例中,SSL 证书资源的名称为
www-ssl-cert。 对于 HTTPS,请创建目标 HTTPS 代理以将请求路由到网址映射。该代理属于负载均衡器,包含用于 HTTPS 负载均衡器的 SSL 证书,因此您还需要在此步骤中加载证书。
gcloud compute target-https-proxies create https-lb-proxy \ --url-map=web-map-https \ --ssl-certificates=www-ssl-cert
- 对于 HTTPS,请创建全球转发规则以将传入请求路由到代理。
gcloud compute forwarding-rules create https-content-rule \ --load-balancing-scheme=EXTERNAL \ --network-tier=PREMIUM \ --address=lb-ipv4-1 \ --global \ --target-https-proxy=https-lb-proxy \ --ports=443
- 可选:对于 HTTPS,请创建全局 SSL 政策并将其附加到 HTTPS 代理。
如需创建全局 SSL 政策,请执行以下操作: 如需将 SSL 政策附加到全球目标 HTTPS 代理,请执行以下操作:gcloud compute ssl-policies create my-ssl-policy \ --profile MODERN \ --min-tls-version 1.0
gcloud compute target-https-proxies update https-lb-proxy \ --ssl-policy my-ssl-policy
设置 HTTP 前端
对于 HTTPS 负载均衡器,请跳过此部分。
- 对于 HTTP,请创建一个目标 HTTP 代理,将请求路由到您的网址映射。
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=web-map-http
- 对于 HTTP,请创建全球转发规则以将传入请求路由到代理。
gcloud compute forwarding-rules create http-content-rule \ --load-balancing-scheme=EXTERNAL \ --address=lb-ipv4-1 \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
Terraform
-
如需创建健康检查,请使用
google_compute_health_check资源。 -
如需创建后端服务,请使用
google_compute_backend_service资源。此示例使用
load_balancing_scheme="EXTERNAL_MANAGED",这将设置具有高级流量管理功能的全球外部应用负载均衡器。如需创建传统版应用负载均衡器,请确保在运行脚本之前将load_balancing_scheme更改为EXTERNAL。 -
如需创建网址映射,请使用
google_compute_url_map资源。 -
如需创建目标 HTTP 代理,请使用
google_compute_target_http_proxy资源。 -
如需创建转发规则,请使用
google_compute_global_forwarding_rule资源。此示例使用
load_balancing_scheme="EXTERNAL_MANAGED",这将设置具有高级流量管理功能的全球外部应用负载均衡器。如需创建传统版应用负载均衡器,请确保在运行脚本之前将load_balancing_scheme更改为EXTERNAL。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
在外部应用负载均衡器上启用 IAP
注意:IAP 与 Cloud CDN 不兼容。您可以将 IAP 配置为启用或停用(默认)。如果设置为启用,您必须为 oauth2-client-id 和 oauth2-client-secret 提供值。
如需启用 IAP,请更新后端服务以添加具有 oauth2-client-id 和 oauth2-client-secret 的 --iap=enabled 标志。
gcloud compute backend-services update BACKEND_SERVICE_NAME \
--iap=enabled,oauth2-client-id=ID,oauth2-client-secret=SECRET \
--global
您可以选择使用 Google Cloud 控制台、gcloud CLI 或 API 为 Compute Engine 资源启用 IAP。
将您的网域连接到负载均衡器
创建负载均衡器后,请记好与负载均衡器关联的 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 控制台可能需要一些时间才能指示虚拟机运行状况良好。如果几分钟后后端似乎仍运行状况不佳,请检查防火墙配置以及分配给后端虚拟机的网络标记。- 对于 HTTPS,如果您要使用 Google 管理的证书,请确认证书资源的状态为“有效”。如需了解详情,请参阅 Google 管理的 SSL 证书资源状态。
- 在 Google Cloud 控制台显示后端实例运行状况良好后,您可使用网络浏览器转到
https://IP_ADDRESS(或http://IP_ADDRESS)来测试您的负载均衡器。将IP_ADDRESS替换为负载均衡器的 IP 地址。 - 如果您使用自签名证书来测试 HTTPS,您的浏览器将显示警告。您必须明确指示浏览器接受自签名证书。
- 您的浏览器应该会呈现一个页面,其中的内容显示提供该页面的实例的名称以及其可用区(例如,
Page served from: lb-backend-example-xxxx)。如果您的浏览器未呈现此页面,请查看本指南中的配置设置。
gcloud
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
几分钟后,您可以通过运行以下 curl 命令来测试设置。
curl http://IP_ADDRESS
-或-
curl https://HOSTNAME
后续步骤
- 了解如何为 GKE 启用 Cloud Load Balancing
- 详细了解实例组。
- 了解负载平衡和调节功能。