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 证书,如下图所示:
如需创建全局外部应用负载平衡器,您需要 SSL 证书 resource 是必需项。您可以创建 SSL 使用 Google 管理的 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