在按照本指南进行操作之前,请先熟悉互联网 NEG 概览文档,包括限制。
以下架构图展示了具有外部后端的区域级内部应用负载均衡器前端。
权限
如需按照本指南进行操作,您需要创建互联网 NEG 并在项目中创建或修改应用负载均衡器。您应该是 Project Owner 或 Project Editor(roles/owner
或 roles/editor
),或者应同时具有下列 Compute Engine IAM 角色:
任务 | 所需角色 |
---|---|
创建和修改负载均衡器组件 | Compute Network Admin ( roles/compute.networkAdmin )
|
创建和修改 NEG | Compute Instance Admin ( roles/compute.instanceAdmin )
|
在 Google Cloud 外部设置外部后端环境
如需设置外部后端环境,请参阅以下部分。
配置网络端点
配置网络端点,以将外部后端公开给 Google Cloud。确保端点(IP:Port 组合或完全限定域名 [FQDN] 和端口)可通过互联网访问。此端点稍后可从互联网 NEG 引用。
如需详细了解互联网 NEG 端点的配置要求,请参阅互联网 NEG 概览。
允许外部后端接收来自 Google Cloud 的流量
您可以在创建代理专用子网并设置 Cloud NAT 网关后完成此步骤。
如需允许来自 Google Cloud 的请求到达外部后端,您需要执行以下步骤:
- 为 Cloud NAT 网关配置用于来自 Google Cloud 的出站流量的 IP 地址。该网关会将代理专用子网范围映射到外部 IP 地址。如需了解相关步骤,请参阅设置 Cloud NAT 网关。
- 确保外部后端环境配置为允许来自 Google Cloud 的流量到达外部后端。例如,如果您为 NAT 网关使用了预留的 IP 地址,则需要在外部环境中将这些 IP 地址列入许可名单。您可能需要与外部环境的网络或安全管理员一起进行此设置。
设置 Google Cloud 环境
您需要一个包含两个子网的 VPC 网络:一个用于负载均衡器组件,另一个用于区域的代理专用子网。然后,创建具有互联网 NEG 后端的负载均衡器。
创建 VPC 网络和子网
此子网用于创建负载均衡器的组件。
Cloud 控制台
- 在 Google Cloud 控制台中,转到 VPC 网络页面。
进入“VPC 网络” - 点击创建 VPC 网络。
- 输入名称:LB_NETWORK。
- 在子网部分中执行以下操作:
- 将子网创建模式设置为自定义。
- 在新子网部分中,输入以下信息:
- 名称:LB_SUBNET_NAME
- 区域:REGION
- IP 地址范围:LB_SUBNET_RANGE
- 点击完成。
- 点击创建。
gcloud
使用
gcloud compute networks create
命令创建自定义 VPC 网络:gcloud compute networks create LB_NETWORK \ --subnet-mode=custom
在 LB_NETWORK 网络中创建子网。
gcloud compute networks subnets create LB_SUBNET_NAME \ --network=LB_NETWORK \ --range=LB_SUBNET_RANGE \ --region=REGION
配置代理专用子网
此代理专用子网用于 REGION 区域中所有基于 Envoy 的区域级负载均衡器。
控制台
- 在 Google Cloud 控制台中,转到 VPC 网络页面。
转到“VPC 网络” - 从列表中选择网络。
- 点击添加子网。
- 输入名称:PROXY_ONLY_SUBNET_NAME。
- 选择区域:REGION。
- 将用途设置为区域级代管式代理。
- 输入 IP 地址范围:PROXY_ONLY_SUBNET_RANGE。
- 点击添加。
gcloud
使用 gcloud compute networks subnets
create
命令创建代理专用子网。
gcloud compute networks subnets create PROXY_ONLY_SUBNET_NAME \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=REGION \ --network=LB_NETWORK \ --range=PROXY_ONLY_SUBNET_RANGE
设置 Cloud NAT 网关
在配置 Cloud NAT 网关之前,请确保您已查看相关限制和价格注意事项。如需了解详情,请参阅区域级 NEG:使用 Cloud NAT 网关。以下命令描述了如何设置 Cloud NAT 网关。Cloud NAT 网关可以配置为使用自动 NAT 外部 IP 地址(基于需求分配),也可以配置为使用一组手动预留的外部 IP 地址。该网关会将代理专用子网范围映射到外部 IP 地址。
设置 NAT 自动分配的 IP 地址
在创建具有自动 NAT IP 地址分配的 Cloud NAT 网关时,您可以指定 Cloud NAT 网关用于分配 IP 地址的网络服务层级(高级层级或标准层级)。
控制台
在 Google Cloud 控制台中,转到 Cloud NAT 页面。
点击开始使用或创建 Cloud NAT 网关。
输入网关名称 LB_NAT_CONFIG。
在NAT 类型列表中,选择公开。
在网络列表中,选择 LB_NETWORK。
在区域列表中,选择 REGION。
在该区域中创建一个 Cloud Router 路由器。
在来源端点类型列表中,选择代管式代理负载均衡器。
在来源列表中,选择自定义。
- 在子网列表中,选择 PROXY_ONLY_SUBNET_NAME。
在 Cloud NAT IP 地址列表中,选择自动(推荐)。
对于网络服务层级,选择高级或标准。
点击创建。
gcloud
如果外部后端环境不要求您将可将流量发送到外部后端的特定 Google Cloud IP 地址列入许可名单,请使用动态分配的 IP 地址。
创建 Cloud Router 路由器:
gcloud beta compute routers create ROUTER_NAME \ --network=LB_NETWORK \ --region=REGION
设置 Cloud NAT 网关。
gcloud beta compute routers nats create LB_NAT_CONFIG \ --router=ROUTER_NAME \ --endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \ --nat-custom-subnet-ip-ranges=PROXY_ONLY_SUBNET_NAME \ --auto-allocate-nat-external-ips \ --region=REGION
替换以下内容:
LB_NAT_CONFIG
:NAT 配置的名称。ROUTER_NAME
:您的 Cloud Router 路由器的名称。REGION
:要创建的 NAT 的区域。如果未指定,系统可能会提示您选择一个区域(仅限互动模式)。PROXY_ONLY_SUBNET_NAME
:代理专用子网的名称。
设置手动分配的 IP 地址
仅当外部后端环境要求您将特定 Google Cloud IP 地址列入许可名单时,才使用手动分配的 IP 地址。如果外部后端环境不需要许可名单,请改用动态分配,如上所示。
创建 Cloud NAT 网关时,您可以选择手动分配高级层级和/或标准层级的 NAT IP 地址,但需满足某些条件。
控制台
在 Google Cloud 控制台中,转到 Cloud NAT 页面。
点击开始使用或创建 Cloud NAT 网关。
输入网关名称 LB_NAT_CONFIG。
在网络列表中,选择 LB_NETWORK。
在区域列表中,选择 REGION。
在该区域中选择或创建 Cloud Router 路由器。
在来源端点类型列表中,选择代管式代理负载均衡器。
在来源列表中,选择自定义。
- 在子网中,选择 PROXY_ONLY_SUBNET_NAME。
在 Cloud NAT IP 地址列表中,选择手动。
对于网络服务层级,选择高级或标准。
选择或创建用于 NAT 的静态预留外部 IP 地址。
如果要指定其他 IP 地址,请点击添加 IP 地址,然后选择或创建其他静态预留外部 IP 地址。
点击创建。
gcloud
创建 IP 地址。由于网关执行一对一 NAT 转换,因此您必须确保预留的 IP 地址池足够大,可以处理预期的流量。NAT IP 地址分配不足可能会导致流量丢失。
gcloud compute addresses create IP_ADDRESS_NAME_1 IP_ADDRESS_NAME_2 [IP_ADDRESS_NAME_3 ...] \ --region=REGION
创建 Cloud Router 路由器:
gcloud compute routers create ROUTER_NAME \ --network=LB_NETWORK \ --region=REGION
设置 Cloud NAT 网关。
gcloud beta compute routers nats create LB_NAT_CONFIG \ --router=ROUTER_NAME \ --endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \ --nat-custom-subnet-ip-ranges=PROXY_ONLY_SUBNET_NAME \ --nat-external-ip-pool=IP_ADDRESS_NAME_1,IP_ADDRESS_NAME_2,[IP_ADDRESS_NAME_3 ...] \ --region=REGION
替换以下内容:
LB_NAT_CONFIG
:NAT 配置的名称。ROUTER_NAME
:您的 Cloud Router 路由器的名称。PROXY_ONLY_SUBNET_NAME
:代理专用子网的名称。REGION
:要创建的 NAT 的区域。如果未指定,系统可能会提示您选择一个区域(仅限互动模式)。
如需了解详情,请参阅 Cloud NAT 文档中的指定 NAT 的子网范围。
请确保在外部后端环境中使用 NAT IP 地址范围的许可名单,以便您的外部后端可以接收来自 Google Cloud 的流量。
预留负载均衡器的 IP 地址
为负载均衡器预留内部 IP 地址。
控制台
您可以使用 Google Cloud 控制台预留独立内部 IP 地址。
- 转到 VPC 网络页面。
- 点击用于配置环境之间的混合连接的网络。
- 点击静态内部 IP 地址,然后点击预留静态地址。
- 输入名称:LB_IP_ADDRESS。
- 对于子网,请选择 LB_SUBNET_NAME。
- 如果要指定要预留的 IP 地址,请在静态 IP 地址下选择让我自行选择,然后填写自定义 IP 地址。否则,系统会自动为您分配子网中的 IP 地址。
- 如果要将此 IP 地址与多个转发规则一起使用,请在用途下选择共享。
- 点击保留以完成此流程。
gcloud
使用 gcloud CLI 运行
compute addresses create
命令:gcloud compute addresses create LB_IP_ADDRESS \ --region=REGION \ --subnet=LB_SUBNET_NAME
使用
compute addresses describe
命令查看分配的 IP 地址:gcloud compute addresses describe LB_IP_ADDRESS \ --region=REGION
设置互联网 NEG
您可以创建使用 INTERNET_FQDN_PORT
端点或 INTERNET_IP_PORT
端点的互联网 NEG。
控制台
创建具有 INTERNET_FQDN_PORT
端点的 NEG
在 Google Cloud 控制台中,前往网络端点组页面。
点击创建网络端点组。
为您的互联网 NEG 指定 INTERNET_NEG_NAME。如需了解详情,请参阅资源命名惯例。
在网络端点组类型列表中,选择网络端点组(互联网),然后执行以下操作:
- 在范围列表中,选择区域级。
- 可选:在区域列表中,更改此 NEG 的 REGION。
- 在网络列表中,选择 LB_NETWORK。
- 在默认端口框中,输入 DEFAULT_PORT_NUMBER。
- 在通过以下方式添加端点列表中,选择完全限定域名和端口。
- 选择创建。
将 INTERNET_FQDN_PORT
端点添加到 NEG
在 Google Cloud 控制台中,前往网络端点组页面。
- 点击 INTERNET_NEG_NAME。
输入完全限定域名,例如
myorg.example.com
。您必须采用标准 FQDN 语法指定 FQDN 对象。可选:在端口类型列表中,选择自定义。如果端口类型为
Default
,则使用 NEG 的默认端口。- 在端口号框中,输入 PORT_NUMBER_1。
- 选择创建。
创建具有 INTERNET_IP_PORT
端点的 NEG
在 Google Cloud 控制台中,前往网络端点组页面。
点击创建网络端点组。
为您的互联网 NEG 指定名称 INTERNET_NEG_NAME。如需了解详情,请参阅资源命名惯例。
在网络端点组类型列表中,选择网络端点组(互联网),然后执行以下操作:
- 在范围列表中,选择区域级。
- 可选:在区域列表中,更改此 NEG 的 REGION。
- 在网络列表中,选择 LB_NETWORK。
- 在默认端口框中,输入 DEFAULT_PORT_NUMBER。
- 在通过以下方式添加端点列表中,选择 IP 和端口。
- 选择创建。
将 INTERNET_IP_PORT
端点添加到 NEG
在 Google Cloud 控制台中,前往网络端点组页面。
- 点击 INTERNET_NEG_NAME。
- 在 IP 地址字段中,输入 IP_ADDRESS_1。
可选:在端口类型列表中,选择自定义。如果端口类型为
Default
,则使用 NEG 的默认端口。- 在端口号字段中,输入 PORT_NUMBER_1。
- 选择创建。
gcloud
如需创建具有 INTERNET_FQDN_PORT
端点的 NEG,请执行以下操作:
创建 NEG 资源。
gcloud beta compute network-endpoint-groups create INTERNET_NEG_NAME \ --network-endpoint-type=INTERNET_FQDN_PORT \ --default-port=DEFAULT_PORT_NUMBER \ --network=LB_NETWORK \ --region=REGION
将端点添加到 NEG。如果未指定端口,则系统会使用 NEG 的默认端口。
gcloud beta compute network-endpoint-groups update INTERNET_NEG_NAME \ --add-endpoint="fqdn=FULLY_QUALIFIED_DOMAIN_NAME_1,port=PORT_NUMBER_1" \ [--add-endpoint="fqdn=FULLY_QUALIFIED_DOMAIN_NAME_2,port=PORT_NUMBER_2" \] --region=REGION
请替换以下内容:
FULLY_QUALIFIED_DOMAIN_NAME
:端点的完全限定域名PORT_NUMBER
:端点的端口号
每个 NEG 最多可以添加 256 个端点。
如果您的网域可通过互联网解析,则无需使用其他配置来设置 DNS。但是,如果您使用的是专用 FQDN,则需要配置 Cloud DNS 以便于进行 DNS 解析。该名称必须托管在 Cloud DNS 上,或者必须可通过从 Cloud DNS 到本地 DNS 的 DNS 转发进行解析。
首先,创建一个 Cloud DNS 区域以在您的项目中托管 DNS 记录。然后向其添加 DNS 记录。如需了解具体的配置步骤,请参阅 Cloud DNS 文档。
如需创建具有 INTERNET_IP_PORT
端点的 NEG,请执行以下操作:
创建 NEG 资源。
gcloud beta compute network-endpoint-groups create INTERNET_NEG_NAME \ --network-endpoint-type=INTERNET_IP_PORT \ --default-port=DEFAULT_PORT_NUMBER \ --network=LB_NETWORK \ --region=REGION
将端点添加到 NEG。如果未指定端口,则系统会使用 NEG 的默认端口。
gcloud beta compute network-endpoint-groups update INTERNET_NEG_NAME \ --add-endpoint="ip=IP_ADDRESS_1,port=PORT_NUMBER_1" \ [--add-endpoint="ip=IP_ADDRESS_2,port=PORT_NUMBER_2" \] --region=REGION
请替换以下内容:
IP_ADDRESS
:端点的 IP 地址PORT_NUMBER
:端点的端口号
您可以重复执行此步骤,为每个 NEG 最多添加 256 个端点。
创建负载均衡器
控制台
开始配置
在 Google Cloud 控制台中,转到负载均衡页面。
- 点击创建负载均衡器。
- 在负载均衡器的类型字段中,选择应用负载均衡器 (HTTP/HTTPS),然后点击下一步。
- 在公共或内部字段中,选择内部,然后点击下一步。
- 在跨区域或单区域部署字段中,选择最适合区域级工作负载,然后点击下一步。
- 点击配置。
基本配置
- 输入负载均衡器名称。
- 对于区域,请选择 REGION。
- 对于网络,请选择 LB_NETWORK。
预留代理专用子网
如需预留代理专用子网,请执行以下操作:
- 点击预留子网。
- 对于名称,输入 PROXY_ONLY_SUBNET_NAME。
- 对于 IP 地址范围,输入 PROXY_ONLY_SUBNET_RANGE。
- 点击添加。
前端配置
- 点击前端配置。
- 输入名称。
- 对于子网,选择 LB_SUBNET_NAME。
如需创建 HTTPS 负载均衡器,您必须有一个 SSL 证书。我们建议您使用 Google 管理的证书。
属性 值(按照说明输入值或选择选项) 协议 HTTPS 网络服务层级 优质 IP 版本 IPv4 IP 地址 选择之前预留的 IP 地址: LB_IP_ADDRESS。 端口 443 证书 选择现有的 SSL 证书或创建新证书。
如需创建 HTTPS 负载均衡器,您必须拥有要在 HTTPS 代理中使用的 SSL 证书资源。
如果您想在不设置 SSL 证书资源(或 Google 管理的证书所需要的网域)的情况下测试此过程,则可以设置 HTTP 负载均衡器。
如需创建 HTTP 负载均衡器,请验证以下选项已使用这些值进行配置:
属性 值(按照说明输入值或选择选项) 协议 HTTP 网络服务层级 高级 IP 版本 IPv4 IP 地址 选择之前预留的 IP 地址: LB_IP_ADDRESS。 端口 80 点击完成。
后端配置
- 点击后端配置。
- 点击后端服务和后端存储桶。
- 点击创建后端服务。
- 输入名称。
- 对于后端类型,选择互联网网络端点组。
- 在协议部分中,选择将负载均衡器连接到互联网 NEG 时想要使用的协议。
- 在后端部分的新建后端窗口中,选择上一步中创建的区域级互联网网络端点组。
- 点击完成。
- 配置健康检查:
- 在健康检查字段中,选择创建健康检查。
- 将健康检查名称设置为 HTTP_HEALTH_CHECK_NAME。
- 对于协议,选择 HTTP。
- 将端口设置为
80
。
- 点击创建。
检查并最终确定
- 点击检查并最终确定。
- 如果看起来都正确,请点击创建。
gcloud
- 可选:创建健康检查。外部后端的健康检查探测使用分布式 Envoy 健康检查,并在以后进行 NAT 转换。
gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \ --region=REGION \ --use-serving-port
- 创建后端服务:
gcloud compute backend-services create BACKEND_SERVICE \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTP \ --health-checks=HTTP_HEALTH_CHECK_NAME \ --health-checks-region=REGION \ --region=REGION
- 将互联网 NEG 添加到后端服务:
gcloud compute backend-services add-backend BACKEND_SERVICE \ --network-endpoint-group=INTERNET_NEG_NAME \ --network-endpoint-group-region=REGION \ --region=REGION
- 创建网址映射以将传入的请求路由到此后端服务:
gcloud compute url-maps create URL_MAP_NAME \ --default-service=BACKEND_SERVICE \ --region=REGION
- 可选:如果您在客户端和负载均衡器之间使用 HTTPS,请执行此步骤。HTTP 负载均衡器不需要执行此步骤。
您可以创建 Compute Engine 证书或 Certificate Manager 证书。使用以下任一方法通过 Certificate Manager 创建证书:
- 自行管理的区域级证书。如需了解如何创建和使用自行管理的区域级证书,请参阅部署自行管理的区域级证书。不支持证书映射。
Google 管理的区域级证书。不支持证书映射。
Certificate Manager 支持以下类型的 Google 管理的区域级证书:
- 具有每个项目的 DNS 授权的 Google 管理的区域级证书。如需了解详情,请参阅部署 Google 管理的区域级证书。
- 使用 Certificate Authority Service 的 Google 管理的(专用)区域级证书。如需了解详情,请参阅使用 CA Service 部署 Google 管理的区域级证书。
创建目标 HTTPS 代理以将请求路由到您的网址映射:
对于 HTTP 负载均衡器,请创建 HTTP 目标代理:
gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \ --url-map=URL_MAP_NAME \ --region=REGION
对于 HTTPS 负载均衡器,请创建 HTTPS 目标代理。该代理属于负载均衡器,保存用于 HTTPS 负载均衡的 SSL 证书,因此您还需要在此步骤中加载证书。
gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \ --ssl-certificates=SSL_CERTIFICATE_NAME \ --url-map=URL_MAP_NAME \ --region=REGION
创建转发规则以将传入请求路由到代理。
对于 HTTP 负载均衡器:
gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --network-tier=PREMIUM \ --network=LB_NETWORK \ --subnet=LB_SUBNET_NAME \ --address=LB_IP_ADDRESS \ --target-http-proxy=TARGET_HTTP_PROXY_NAME \ --target-http-proxy-region=REGION \ --region=REGION \ --ports=80
对于 HTTPS 负载均衡器:
gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --network-tier=PREMIUM \ --network=LB_NETWORK \ --subnet=LB_SUBNET_NAME \ --address=LB_IP_ADDRESS \ --target-https-proxy=TARGET_HTTPS_PROXY_NAME \ --target-http-proxy-region=REGION \ --region=REGION \ --ports=443
创建证书后,将证书直接附加到目标代理。
如需创建 Compute Engine 自行管理的 SSL 证书资源,请运行以下命令:gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --certificate CRT_FILE_PATH \ --private-key KEY_FILE_PATH
将您的网域连接到负载均衡器
创建负载均衡器后,请记好与负载均衡器关联的 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 提供商,请参阅添加、修改和删除记录。
测试负载均衡器
现在您已经配置了负载均衡器,接下来可以开始向负载均衡器的 IP 地址发送流量了。
创建客户端虚拟机
此示例在与负载均衡器相同的区域内创建一个客户端虚拟机 (vm-client
)。该客户端用于验证负载均衡器的配置,并演示预期的行为。
gcloud
客户端虚拟机可以位于负载均衡器所在的 REGION 的任何可用区中,并且可以使用同一 VPC 网络中的任何子网。
gcloud compute instances create vm-client \ --image-family=debian-10 \ --image-project=debian-cloud \ --tags=allow-ssh \ --network=LB_NETWORK \ --subnet=LB_SUBNET_NAME \ --zone=ZONE
将流量发送到负载均衡器
负载均衡器配置在首次部署后可能需要几分钟时间才能全球传播。
使用 SSH 连接到客户端实例。
gcloud compute ssh vm-client \ --zone=ZONE
验证负载均衡器是否按预期连接到您在外部后端上运行的应用。
对于 HTTP 测试,请运行以下命令:
curl IP_ADDRESS
对于 HTTPS 测试,请运行以下命令:
curl -k -s 'https://TEST_DOMAIN_URL:443' --connect-to TEST_DOMAIN_URL:443:IP_ADDRESS:443
将 TEST_DOMAIN_URL 替换为与您的应用关联的网域。例如
test.example.com
。-k
标志会导致 curl 跳过证书验证。
其他配置
本部分对配置示例进行了扩展,以提供一些额外的替代配置选项。所有任务均为可选任务。您可以按任意顺序执行这些任务。
如需为区域级内部应用负载均衡器启用更多功能,例如全球访问权限(如果您的客户端位于不同区域),请参阅设置具有虚拟机实例组后端的内部应用负载均衡器:其他配置。使用自定义标头对请求进行身份验证
如需对发送到外部后端的请求进行身份验证,您可以设置自定义标头来指明请求来自 Google Cloud 负载均衡器。您还需要配置外部后端,以对来自 Google Cloud 的流量使用此自定义标头。
如需了解如何设置自定义标头,请参阅设置高级流量管理。如需了解其他身份验证方法,请参阅对发送到外部后端的请求进行身份验证。