API Gateway 负载均衡使用入门
本教程介绍如何创建全球外部应用负载平衡器,以将请求路由到 API Gateway。配置过程遵循与配置全球外部应用负载平衡器与其他无服务器产品(如 Cloud Run、Cloud Run functions 和 App Engine)的集成相同的步骤。
虽然 API Gateway 无需负载均衡器即可正常运行,但负载均衡器可让您的网关充分利用负载均衡器的优势。例如,将全球外部应用负载平衡器与 API Gateway 搭配使用,您可以:
- 使用自定义网域。
- 将 Google Cloud Armor 用作网络安全服务。
- 跨多个位置的网关高效管理负载均衡。
- 实现高级流量管理。
准备工作
如果您尚未下载并安装 Google Cloud CLI,请执行此操作。
更新
gcloud
组件:gcloud components update
按照 API Gateway 快速入门部署 Cloud Run 服务并创建指向该服务的网关。
配置权限。
部署 Cloud Run 服务和 API Gateway 实例
在本教程中,您需要将“hello-world”服务部署到 Cloud Run,创建一个路由到 Cloud Run 服务的网关,并配置全球外部应用负载平衡器以将请求路由到自定义网域。
虽然本教程使用 Cloud Run 作为 API Gateway 的后端服务,但这些步骤也适用于 API Gateway 支持的任何后端服务。
API Gateway 快速入门成功完成后,您应该有一个已部署的网关网址指向 Cloud Run 服务。
配置权限
在本教程中,您将创建一个无服务器网络端点组 (NEG) 并在 Cloud 项目中创建一个全球外部应用负载平衡器。这需要项目 Owner 或 Editor 角色,或者以下 Compute Engine IAM 角色:
任务 | 所需角色 |
---|---|
创建负载均衡器和网络组件 | Network Admin |
创建和修改 NEG | Compute Instance Admin |
创建和修改 SSL 证书 | Security Admin |
创建 SSL 证书资源
如需创建全球外部应用负载均衡器,必须将 SSL 证书资源添加到负载均衡器的前端。使用 Google 管理的 SSL 证书或自行管理的 SSL 证书创建 SSL 证书资源。
Google 管理的证书。建议使用 Google 管理的证书,因为 Google Cloud 会自动获取、管理和续订这些证书。如需创建 Google 管理的证书,您必须拥有该网域的网域和 DNS 记录,才能预配证书。如果您还没有域名,则可以从 Google Domains 获取一个。此外,您还需要更新网域的 DNS A 记录,以指向后续步骤中创建的负载均衡器的 IP 地址。如需了解详细说明,请参阅使用 Google 管理的证书。
自签发证书。如果您暂时不想设置网域,则可以使用自签名 SSL 证书进行测试。
本教程假定您已创建 SSL 证书资源。
如果您想在不创建 SSL 证书资源(或 Google 管理的证书所需的网域)的情况下测试此过程,则仍然可以改用此页面中的说明来设置 HTTP 负载均衡器。
创建全球外部应用负载平衡器
为 API Gateway 创建无服务器 NEG。
网络端点组 (NEG) 为负载均衡器指定了一组后端端点。无服务器 NEG 是指向 API Gateway 等服务的后端,如下图所示:
如需为您的网关创建无服务器 NEG,请运行以下命令,其中:
- SERVERLESS_NEG_NAME 是要创建的无服务器 NEG 的名称。
- GATEWAY_ID 指定网关的名称。
- REGION_ID 是无服务器 NEG 的部署区域(这应与网关区域一致)。
gcloud beta compute network-endpoint-groups create SERVERLESS_NEG_NAME \ --region=REGION_ID \ --network-endpoint-type=serverless \ --serverless-deployment-platform=apigateway.googleapis.com \ --serverless-deployment-resource=GATEWAY_ID
例如:
gcloud beta compute network-endpoint-groups create api-gateway-serverless-neg \ --region=us-central1 \ --network-endpoint-type=serverless \ --serverless-deployment-platform=apigateway.googleapis.com \ --serverless-deployment-resource=my-gateway
创建后端服务以定义全球外部应用负载平衡器如何分配流量。
后端服务配置包含一组值,例如用于连接到后端的协议、各种分发和会话设置、健康检查和超时,如下图所示:
如需创建后端服务,请运行以下命令:
gcloud compute backend-services create BACKEND_SERVICE_NAME --global
其中 BACKEND_SERVICE_NAME 是新后端服务的名称。
例如:
gcloud compute backend-services create api-gateway-backend-service --global
如需将无服务器 NEG 作为后端添加到后端服务,请运行以下命令,其中:
- BACKEND_SERVICE_NAME 是后端服务的名称。
- SERVERLESS_NEG_NAME 是上一步中创建的无服务器 NEG 的名称。
- REGION_ID 是无服务器 NEG 的部署区域(这应与网关区域一致)。
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --global \ --network-endpoint-group=SERVERLESS_NEG_NAME \ --network-endpoint-group-region=REGION_ID
例如:
gcloud compute backend-services add-backend api-gateway-backend-service \ --global \ --network-endpoint-group=api-gateway-serverless-neg \ --network-endpoint-group-region=us-central1
创建网址映射以将传入的请求路由到此后端服务,如下图所示:
要创建网址映射,请运行以下命令,其中:
- URL_MAP_NAME 是要创建的网址映射的名称。
- BACKEND_SERVICE_NAME 是后端服务的名称。
gcloud compute url-maps create URL_MAP_NAME \ --default-service BACKEND_SERVICE_NAME
例如:
gcloud compute url-maps create api-gateway-url-map \ --default-service api-gateway-backend-service
此示例网址映射仅定位到一项代表单个网关的后端服务,因此不需要主机规则或路径匹配器。如果您有多项后端服务,则可以使用主机规则根据主机名将请求定向到不同的服务。使用路径匹配器根据请求路径将请求定向到不同的服务。
例如:
gcloud compute url-maps add-path-matcher api-gateway-url-map \ --path-matcher-name=my-pm2 \ --default-service=my-host-default-backend \ --path-rules="/video=video-service,/video/*=video-service" \ --new-hosts my-hosts.com
gcloud compute url-maps add-host-rule api-gateway-url-map \ --hosts=my-app-domain \ --path-matcher-name=my-app-path-matcher
如需详细了解主机规则和路径匹配器,请参阅网址映射文档。
为目标代理创建 SSL 证书,如下图所示:
如需创建全局外部应用负载平衡器,HTTP(S) 目标代理需要 SSL 证书资源。您可以使用 Google 管理的 SSL 证书或自行管理的 SSL 证书创建 SSL 证书资源。建议使用 Google 管理的证书。如果您在不使用 SSL 证书资源的情况下测试此过程,并且想要设置 HTTP 负载均衡器,则可以跳过此步骤。
如需创建 Google 管理的证书,您必须拥有一个网域。如果您没有网域,则可以使用自签名 SSL 证书进行测试。
如需创建 Google 管理的 SSL 证书资源,请运行以下命令:
gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --domains DOMAIN
如需创建自行管理的 SSL 证书资源,请运行以下命令:
gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --certificate CRT_FILE_PATH \ --private-key KEY_FILE_PATH
创建目标 HTTP(S) 代理以将请求路由到您的网址映射,如下图所示:
如需创建目标代理,请使用以下命令,其中:
- TARGET_HTTPS_PROXY_NAME 是要创建的目标 HTTP(S) 代理的名称。
- URL_MAP_NAME 是上一步中创建的网址映射的名称。
- 可选:SSL_CERT_NAME 是创建的 SSL 证书的名称。
gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \ --ssl-certificates=SSL_CERT_NAME \ --url-map=URL_MAP_NAME
例如:
gcloud compute target-https-proxies create api-gateway-https-proxy \ --ssl-certificates=hello-cert \ --url-map=api-gateway-url-map
如前所述,您无需创建 SSL 证书资源即可创建 HTTP 负载均衡器。为此,请使用以下命令:
gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \ --url-map=URL_MAP_NAME
例如:
gcloud compute target-http-proxies create api-gateway-http-proxy \ --url-map=api-gateway-url-map
应修改 HTTP 代理的后续命令,以适应
--target-http-proxy
标志,并将 TARGET_HTTP_PROXY_NAME 替换为 HTTP(S) 对应项。创建转发规则以将传入请求路由到相应代理,如下图所示:
使用以下命令创建转发规则,其中:
- HTTPS_FORWARDING_RULE_NAME 是要创建的规则的名称。
- TARGET_HTTPS_PROXY_NAME 是 HTTP(S) 目标代理的名称。
gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \ --target-https-proxy=TARGET_HTTPS_PROXY_NAME \ --global \ --ports=443
例如:
gcloud compute forwarding-rules create my-fw \ --target-https-proxy=api-gateway-https-proxy \ --global \ --ports=443
使用负载均衡器 IP 地址更新 DNS 记录
如果您有自定义网域,则需要执行此步骤来设置网域的 DNS 设置,以指向服务的新 IP 地址。如果您使用 Google 管理的证书(需要网域)创建全球外部应用负载平衡器,也必须执行此步骤。与 DNS 搭配使用时,建议分配和使用静态 IP 地址。此步骤的具体说明取决于您的 DNS 提供商。
为了将流量发送到负载均衡器,您的网域的 DNS 记录(在本教程中为 my-app-domain)必须指向负载均衡器的 IP 地址。
如需查找全局转发规则的 IP 地址,请使用以下命令:
gcloud compute forwarding-rules list
更新网域的 DNS A 或 AAAA 记录以指向负载均衡器的 IP 地址,以便改为通过负载均衡器路由发送到现有自定义网域网址的流量。DNS 可能需要短则几秒钟,长则几小时的时间才能将此项更改传播到 DNS 服务器。
测试以确认您的网关是否使用
curl
或访问浏览器中的网址接收流量。例如:https://my-app-domain
测试后,您应该会看到 Cloud Run 服务生成的响应。例如,这可能是“Hello World”HTML 页面,或者是由后端服务直接生成的其他预期响应。这意味着您的请求正在经过负载均衡器,并且后端服务正在指示负载均衡器将其发送到网关。
测试负载均衡器配置
现在您已经配置了负载均衡器,接下来可以开始向转发规则的 IP 地址发送流量了。
如需查找全局转发规则的 IP 地址,请使用以下命令:
gcloud compute forwarding-rules list
通过 curl 命令测试您的服务的各个网址的响应。例如:
curl https://HOST_URL/hello/
curl https://HOST_URL
您可以使用 API Gateway Cloud 控制台验证请求是否到达正确的服务。
恭喜!您已成功为 API Gateway 预览版配置全球外部应用负载平衡器。
清理
为避免系统因本快速入门中使用的资源向您的 Google Cloud 账号收取费用,您可以删除您创建的 Cloud Load Balancing 资源。如果这些资源是在其自己的项目中创建的,则您可以删除整个项目。否则,您可以逐个删除这些资源。
删除项目
运行以下命令,将 PROJECT_ID 替换为您的项目 ID:
gcloud projects delete PROJECT_ID
删除各个资源
删除负载均衡器中的每个组件:
删除转发规则:
gcloud compute forwarding-rules delete HTTPS_FORWARDING_RULE_NAME --global
删除全局外部 IP 地址:
gcloud compute addresses delete IP_ADDRESSES --global
删除目标代理:
gcloud compute target-https-proxies delete TARGET_HTTP_PROXY_NAME
删除网址映射:
gcloud compute url-maps delete URL_MAP_NAME
删除后端服务:
gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
(可选)删除 SSL 证书:
gcloud compute ssl-certificates delete SSL_CERTIFICATE_NAME
删除无服务器 NEG:
gcloud compute network-endpoint-groups delete SERVERLESS_NEG_NAME --region=REGION