API Gateway 部署模型

关于 API 组件

API Gateway 上定义的 API 由两个主要组件构成:

  1. API 配置:上传 API 定义时创建的 API 配置。您将 API 定义创建为 OpenAPI 规范。如果 API 管理 Cloud Run 上的 gRPC 服务,则可以使用 gRPC 服务定义和配置来定义 API。

    每次上传 API 定义时,API Gateway 都会创建新的 API 配置。也就是说,您可以创建 API 配置,但创建后就不能修改。如果您以后在 OpenAPI 规范或 gRPC 服务定义中修改 API 定义,然后上传修改后的 API 定义,则会创建新的 API 配置。

  2. 网关:基于 Envoy 的可扩缩高性能代理,用于托管已部署的 API 配置。将 API 配置部署到网关会创建面向外部的网址,您的 API 客户端使用该网址来访问 API。

下图展示了这些组件:

API Gateway 窗格上的 API 定义显示了三个 API 配置组件和三个网关组件。

关于将 API 配置部署到网关

将 API 配置部署到网关,以便 API 客户端可以访问您的 API 客户端:

在三个示例 API 中,API 配置部署到网关,使 API 客户端可以访问 API 客户端。

网关:

  • 部署到特定 GCP 地区。地区是 GCP 上的特定地理地区,您可以在其中部署资源。

  • 必须托管 API 配置。您无法创建空网关,空网关是指没有 API 配置的网关。但创建网关后,您可以更新网关,将一个 API 配置替换为另一个 API 配置。

  • 只能托管单个 API 配置。您不能将多个 API 配置部署到同一网关。

然后,您需要单独管理每个已部署的网关。对于每个网关,您可以执行以下操作:

  • 启动/停止/删除网关
  • 查看日志和指标
  • 查看跟踪记录信息

选择 GCP 区域

每个网关均部署到 GCP 上的特定地理地区。API Gateway 支持在以下 GCP 地区进行部署:

  • asia-northeast1
  • australia-southeast1
  • europe-west1
  • europe-west2
  • us-east1
  • us-east4
  • us-central1
  • us-west2
  • us-west3
  • us-west4

将于 2022 年 11 月 1 日停止支持先前在 asia-east1 中创建的 API Gateway 网关。您应查看当前在 asia-east1 中运行的任何网关,并根据需要删除它们或在新位置重新创建它们。

定义已部署的 API 配置的端点

将 API 配置部署到网关时,API Gateway 会在 gateway.dev 网域中为网关创建唯一的网址。然后,您的 API 客户端会使用以下形式的网址访问已部署的 API 配置:

https://GATEWAY_ID-HASH.REGION_CODE.gateway.dev

其中,GATEWAY_ID 是网关的名称,HASH 是部署 API 时生成的唯一哈希代码,REGION_CODEGCP 地区的代码部署网关的位置。

例如:

my-gateway-a12bcd345e67f89g0h.uc.gateway.dev

配置服务账号以部署 API 配置

在网关上部署的 API 配置使用与授予服务账号的角色关联的权限执行,该账号用于创建 API 配置。因此,您通常需要定义单独的服务账号来创建 API 配置。然后,该服务账号只会被分配给访问后端服务所需的角色。这样,您就可以限制与 API 配置关联的权限。

除了访问后端服务所需的角色外,还需要向服务账号授予以下权限:

  • iam.serviceAccounts.actAs 权限。此权限包含在 Service Account User 角色中。

  • 访问后端服务所需的权限。例如,如果您的后端作为 Cloud Functions 函数实现,则至少应将服务账号分配给 Cloud Functions Invoker 角色。对于 Cloud Run 后端,角色为 Cloud Run Invoker。通过限制与 API 配置相关的权限,您可以更好地保护后端系统。

如需了解详情,请参阅配置开发环境

关于缩减至零

API Gateway 是一项“缩减至零”服务。这意味着如果没有流量,就删除所有实例。如果流量增加,就按需创建新实例来处理负载。缩减至零由 GCP 自动控制;无需您来配置或管理。

使用负载均衡器

部署在地区中的每个网关都包含一个集成式负载均衡器,用于管理部署到网关的 API 的客户端请求。您无需为每个网关创建单独的负载均衡器。

在不同地区中的网关上部署同一 API 时,必须创建负载均衡器。然后,负载均衡器会将 API 请求定向到不同的地区。如需了解详情,请参阅下面的将 API 部署到多个地区

配置对 API 的 SSL 访问权限

API Gateway 支持对部署到网关的 API 进行 HTTPS 访问。由于您的 API 已部署到 gateway.dev 网域,因此 Google 会在与网关集成的负载均衡器上创建和管理 SSL 证书。您无需创建或上传自己的证书。

配置域名服务器

默认情况下,API 客户端会向 gateway.dev 网域发出请求以访问已部署的 API,如上文所示。

自定义域名与 API Gateway 的 HTTP(S) 负载均衡预览版结合使用时,可用于 API Gateway。如需自定义域名,请创建一个负载均衡器以使用自定义域名,然后将请求定向到已部署的 API 的 gateway.dev 网域。如需了解详情,请参阅将自定义网域与 API Gateway 搭配使用

在同一 API 中部署多个 API 配置

您只能将一个 API 配置部署到网关。但是,您可以将多个 API 配置部署到同一 API 中的多个网关。

本部分介绍可在单个 API 中的多个网关上部署多个 API 配置的两种场景。

将 API 配置部署到同一区域中的多个网关

构建 API 时,API 开发者通常会创建开发、预演和生产环境,其中:

  • 开发环境供开发者创建 API。
  • 预演环境用于测试 API,为发布到生产环境做好准备。
  • 生产环境中,您的外部 API 客户端可以访问 API。

为了支持此类开发环境,您可以定义多个 API 配置。例如,您可能有多个正在开发的 API 配置,其中一个 API 配置当前正在预演环境中进行测试,一个 API 配置当前部署到生产环境。

通过 API Gateway,您可以在单个 API 中创建多个 API 配置,然后将每个 API 配置部署到不同的网关:

在 API 1 中,名为 API Config Dev、API Config Stage 和 API Config Prod 的三个 API 配置部署到三个单独的网关。

在此示例中,有三个不同的 API 配置:devstageprod。然后,您将每个 API 配置部署到不同的网关,其中每个网关都定义了自己的唯一端点网址。

将 API 配置部署到多个区域

通常,您可以将一个 API 部署到多个 GCP 地区。在多个地区中部署具有多项优势,包括缩短请求延迟时间和提高可靠性,其中缩短延迟得益于请求定向到在地理位置靠近客户端的地区中运行的 API,提高可靠性得益于在一个地区发生故障不会影响其他地区中运行的 API。

如需将 API 部署到多个地区,请将 API 配置部署到每个地区的网关。每个 API 配置都特定于已部署的地区,因为它必须引用该地区中的后端服务。

在下图中,API 1 和 2 部署到单个地区,API 3 部署到多个地区:

API 1 和 API 2 部署到地区 1,API 3 使用负载均衡器器跨地区 1、地区 2 和地区 3 进行部署。

在此示例中,部署到 API 3 网关的 API 配置具有唯一的网址端点,格式如下:

https://my-gateway1-a12bcd345e67f89g0h.uc.gateway.dev
https://my-gateway2-b12cde345f67g89h0i.en.gateway.dev
https://my-gateway3-c12bde345g67h89i0j.uw.gateway.dev

然后,使用 API Gateway 的 HTTP(S) 负载均衡预览版配置负载均衡,以处理向 API 发出的请求并将请求转发到相应地区。如需了解详情,请参阅为 API Gateway 创建多地区部署

更新 API

要更新已部署的 API,您可以修改 OpenAPI 规范中的 API 定义,然后上传该规范。上传新规范会创建新的 API 配置。

API Gateway 支持零停机时间更新模型,这意味着您的 API 在部署更新后的 API 配置期间会继续处理请求。但是,在一段时间内,在新的 API 配置正在部署的同时,某些请求可能仍由旧版 API 配置处理。

如果您已跨多个区域和网关部署 API 配置,则必须在每个区域中单独重新部署更新后的 API 配置。

后续步骤