支持以下后端类型支持带有 Identity-Aware Proxy(IAP) 的外部 HTTP (S) 负载平衡器:
- 实例组
- 区域网络端点组 (NEG)
- 无服务器 NEG:一个或多个 Cloud Run 服务
- 互联网 NEG,适用于 Google Cloud 之外的端点(也称为自定义源站)
如果此示例与您的使用场景不匹配,请参阅以下页面之一:
- 对于 Cloud Run,请参阅使用 Cloud Run 设置负载均衡器。
- 如需查看包含 IPv6 和 SSL 证书设置的多区域示例,请参阅设置多区域外部 HTTPS 负载均衡器。
- 对于区域外部 HTTP(S) 负载均衡器,请参阅设置区域外部 HTTP(S) 负载均衡器
- 如果您使用的是 GKE,则通常由 Kubernetes Ingress 控制器配置负载均衡器。如需了解详情,请参阅配置 Ingress 以进行外部负载均衡。
如需了解一般概念,请参阅外部 HTTP(S) 负载均衡器概览。
如果您是全球外部 HTTP(S) 负载均衡器(经典版)的现有用户,则在规划使用全球外部 HTTP(S) 负载均衡器的新部署时,请确保查看规划向全球外部 HTTP(S) 负载均衡器的迁移。
负载均衡器拓扑
对于 HTTPS 负载均衡器,您需要创建下图所示的配置。
对于 HTTP 负载均衡器,您需要创建下图所示的配置。
图中的事件顺序如下所示:
- 客户端将内容请求发送到转发规则中定义的外部 IPv4 地址。
对于 HTTPS 负载均衡器,转发规则会将请求定向到目标 HTTPS 代理。
对于 HTTP 负载均衡器,转发规则会将请求定向到目标 HTTP 代理。
目标代理使用网址映射中的规则确定单个后端服务接收所有请求。
负载均衡器确定后端服务只有一个实例组,并将请求定向到该组中的虚拟机实例。
该虚拟机提供用户请求的内容。
准备工作
在创建负载均衡器之前,请先完成以下步骤。
设置 SSL 证书资源
对于 HTTPS 负载均衡器,按照以下说明创建 SSL 证书资源:
我们建议您使用 Google 管理的证书。
此示例假设您已有一个名为 www-ssl-cert
的 SSL 证书资源。
设置权限
为完成本指南中的步骤,您必须拥有在项目中创建 Compute Engine 实例、防火墙规则和预留 IP 地址的权限。您必须具有 Project Owner 或 Project Editor 角色,或者必须具有以下 Compute Engine IAM 角色。
任务 | 所需角色 |
---|---|
创建实例 | Instance Admin |
添加和移除防火墙规则 | Security Admin |
创建负载均衡器组件 | Network Admin |
创建项目(可选) | Project Creator |
如需了解详情,请参阅以下指南:
创建代管式实例组
如需使用 Compute Engine 后端设置负载均衡器,您的虚拟机必须属于某个实例组。本指南介绍了如何创建由一组运行有 Apache 的 Linux 虚拟机组成的代管实例组,然后设置负载均衡。 代管式实例组根据您指定的实例模板创建每个代管式实例。
这个代管式实例组提供运行外部 HTTP(S) 负载均衡器的后端服务器的虚拟机。出于演示目的,后端会传送其各自的主机名。
在创建代管式实例组之前,请先创建实例模板。
控制台
在 Google Cloud 控制台中,转到实例模板页面。
点击创建实例模板。
对于名称,输入
lb-backend-template
。确保启动磁盘已设置为 Debian 映像,例如 Debian GNU/Linux 10 (buster)。本文中的说明使用仅 Debian 支持的命令,例如
apt-get
。请勿配置防火墙选项。
由于外部 HTTP(S) 负载均衡器是代理,因此您无需在防火墙下选择允许 HTTPS 流量或允许 HTTP 流量。在配置防火墙规则中,您将为此负载均衡器创建唯一必要的防火墙规则。
点击高级选项。
点击网络并配置以下字段:
- 对于网络标记,请输入
allow-health-check
。
- 对于网络标记,请输入
点击管理。将以下脚本输入启动脚本字段。
#! /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
创建模板。
gcloud compute instance-templates create TEMPLATE_NAME \ --region=us-east1 \ --network=default \ --subnet=default \ --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
。 - 在位置下方,选择单个可用区。
- 对于区域,选择您的首选区域。本示例使用
us-east1
。 - 对于区域,选择 us-east1-b。
- 在实例模板下方,选择实例模板
lb-backend-template
。 对于自动扩缩模式,选择“开启:在实例组中添加和移除实例”。
将实例数下限设置为
2
,并将实例数上限设置为2
或更大。如需创建新的实例组,请点击创建。
gcloud
基于模板创建代管实例组。
gcloud compute instance-groups managed create lb-backend-example \ --template=TEMPLATE_NAME --size=2 --zone=us-east1-b
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 us-east1-b
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=default \ --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 地址,请点击预留静态地址。
- 对于名称,输入
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(S) 负载均衡下,点击开始配置。
- 在面向互联网或仅限内部下,选择从互联网到我的虚拟机。
- 在全球性或区域级下,选择全球 HTTP(S) 负载均衡器(传统版)。
- 点击继续。
- 对于负载均衡器名称,请输入
web-map-https
或web-map-http
等内容。
- 点击前端配置。
- 将协议设置为 HTTPS。
- 将 IP 地址设置为您之前创建的
lb-ipv4-1
。 - 确保将端口设置为 443 以允许 HTTPS 流量。
- 点击证书,然后选择您的主要 SSL 证书。
- 可选:创建 SSL 政策:
- 在 SSL 政策列表中,选择创建政策。
- 将 SSL 政策的名称设置为
my-ssl-policy
。 - 对于最低的 TLS 版本,请选择 TLS 1.0。
- 对于配置文件,请选择新型。您将看到已启用的功能和已停用的功能。
- 点击保存。 如果您尚未创建任何 SSL 政策,则系统会应用默认 GCP SSL 政策。
-
可选:选中启用从 HTTP 到 HTTPS 的重定向复选框以启用从端口 80 到端口 443 的重定向。
启用此复选框会创建一个额外的部分 HTTP 负载均衡器,它使用与 HTTPS 负载均衡器相同的 IP 地址,并将传入 HTTP 请求重定向到负载均衡器的 HTTPS 前端。
只有在选择 HTTPS 协议并使用预留 IP 地址时,才能选中此复选框。
- 点击完成。
- 点击后端配置。
- 在创建或选择后端服务和后端存储分区下,选择后端服务 > 创建后端服务。
- 为您的后端服务添加名称,例如
web-backend-service
。 - 在协议下,选择 HTTP。
- 在已命名端口中输入
http
。 - 在后端 > 新后端 > 实例组中,选择您的实例组
lb-backend-example
。 - 在端口号中输入
80
。 - 保留其他默认设置。
- 在健康检查下,选择创建健康检查,然后为您的健康检查添加一个名称,例如
http-basic-check
。 - 将协议设置为 HTTP,然后点击保存。
-
可选:配置默认的后端安全政策。默认安全政策会限制超出用户配置阈值的流量。如需详细了解默认安全政策,请参阅速率限制概览。
- 如需停用 Google Cloud Armor 默认安全政策,请在后端安全政策列表菜单中选择
None
。 - 在安全部分中,选择默认安全政策。
- 在政策名称字段中,接受自动生成的名称或输入安全政策的名称。
- 在请求数字段中,接受默认请求数,或输入介于
1
和10,000
之间的整数。 - 在间隔字段中,选择间隔。
- 在对密钥实施字段中,选择以下值之一:全部、IP 地址或 X-Forwarded-For IP 地址。如需详细了解这些选项,请参阅确定客户端以进行速率限制。
- 如需停用 Google 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 compute backend-services add-backend web-backend-service \ --instance-group=lb-backend-example \ --instance-group-zone=us-east1-b \ --global
- 对于 HTTP,请创建一项网址映射,将传入的请求路由到默认后端服务。
gcloud compute url-maps create web-map-http \ --default-service web-backend-service
- 对于 HTTPS,请创建网址映射以将传入请求路由到默认后端服务。
gcloud compute url-maps create web-map-https \ --default-service web-backend-service
设置 HTTPS 前端
对于 HTTP 负载均衡器,请跳过此部分。- 对于 HTTPS,如果您尚未创建全球 SSL 证书资源,请创建该资源,如下所示:
对于 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"
,这将设置具有高级流量管理功能的全球外部 HTTP(S) 负载均衡器。如需创建全球外部 HTTP(S) 负载均衡器(传统版),请务必先将load_balancing_scheme
更改为EXTERNAL
,之后再运行脚本。 -
如需创建网址映射,请使用
google_compute_url_map
资源。 -
如需创建目标 HTTP 代理,请使用
google_compute_target_http_proxy
资源。 -
如需创建转发规则,请使用
google_compute_global_forwarding_rule
资源。此示例使用
load_balancing_scheme="EXTERNAL_MANAGED"
,这将设置具有高级流量管理功能的全球外部 HTTP(S) 负载均衡器。如需创建全球外部 HTTP(S) 负载均衡器(传统版),请务必先将load_balancing_scheme
更改为EXTERNAL
,之后再运行脚本。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
在外部 HTTP(S) 负载均衡器上启用 IAP
您可以将 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
将您的网域连接到负载均衡器
创建负载均衡器后,请记好与负载均衡器关联的 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
如果您使用的是 Google Domains,请参阅 Google Domains 帮助了解详情。
测试发送到实例的流量
现在负载均衡服务已运行,您可以将流量发送到转发规则并会发现流量被分散到不同的实例。
控制台
在 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
- 详细了解实例组。
- 了解负载均衡和调节功能。