本页介绍如何将 API 的后端代码和可扩展服务代理 (ESP) 部署到 Google Kubernetes Engine 和 Compute Engine。
尽管部署步骤因托管 API 的平台而异,但您始终需要执行的一个步骤是为 ESP 提供服务名称,并且您可以选择将 ESP 配置为使用最新部署的 Cloud Endpoints 服务配置。通过此信息,ESP 可以获取 API 的 Endpoints 配置,这使得 ESP 可以代理请求和响应,从而让 Cloud Endpoints 能够管理您的 API。
前提条件
首先,本页假定您已完成以下操作:
准备部署
Compute Engine
要让 Endpoints 管理您的 API,您必须为 API 安装和配置 ESP 以及后端服务器代码。您需要在 Compute Engine 虚拟机实例上安装 Docker,以便运行 Container Registry 中免费提供的 ESP Docker 映像。
部署前的准备工作:
在将 API 和 ESP 部署到 Compute Engine 之前,请完成以下步骤:
- 创建、配置并启动虚拟机实例。
- 在虚拟机实例上安装 Docker 企业版 (EE) 或 Docker 社区版 (CE)。
- 为后端服务器代码创建 Docker 容器。
- 将容器推送到 Container Registry 或其他注册表。
确保您可以成功地执行以下操作:
- 连接到虚拟机实例。
- 运行 Docker 映像,以便在虚拟机实例上启动后端服务器。 请参阅 Docker 运行参考。
- 向您的 API 发送请求。
GKE
当您在 Google Cloud 控制台中创建集群时,默认情况下, 向集群服务账号授予的 OAuth 范围包括 所需的范围:
- Service Control:已启用
- Service Management:只读
使用 gcloud container clusters create
命令或第三方配置文件创建集群时,请务必指定以下范围:
"https://www.googleapis.com/auth/servicecontrol"
"https://www.googleapis.com/auth/service.management.readonly"
如需了解详情,请参阅什么是访问权限范围?。
部署之前,请做好以下准备工作:
向部署清单文件添加了少量内容后,您可以在容器集群中运行 ESP Docker 映像以及您的容器化应用。在使用 ESP 将 API 部署到 GKE 之前,请完成以下步骤:
将容器化应用部署到容器集群。GKE 文档中介绍的常规步骤包括:
- 将应用打包到 Docker 映像中。
- 将该映像上传到注册表。
- 创建容器集群。
- 将应用部署到集群。
- 在互联网上公开应用。
确保您可以成功地执行以下操作:
- 启动 API 的服务器。
- 向您的 API 发送请求。
部署 API 和 ESP
Compute Engine
要将 API 和 ESP 部署到装有 Docker 的 Compute Engine,请执行以下操作:
连接到您的虚拟机实例。将
INSTANCE_NAME
替换为您的虚拟机实例的名称:gcloud compute ssh INSTANCE_NAME
自行创建名为
esp_net
的容器网络:sudo docker network create --driver bridge esp_net
运行后端服务器代码的映像实例,并将其连接到
esp_net
容器网络:sudo docker run \ --detach \ --name=YOUR_API_CONTAINER_NAME \ --net=esp_net \ gcr.io/YOUR_PROJECT_ID/YOUR_IMAGE:1
- 将
YOUR_API_CONTAINER_NAME
替换为您的容器名称。 - 将
YOUR_PROJECT_ID
替换为您在推送该映像时使用的 Google Cloud 项目 ID。 - 将
YOUR_IMAGE
替换为您的映像名称。
- 将
获取 API 的服务名称。这是您在服务配置 YAML 文件的
name
字段中指定的名称。运行 ESP Docker 映像的实例:
sudo docker run \ --detach \ --name=esp \ --publish=80:9000 \ --net=esp_net \ gcr.io/endpoints-release/endpoints-runtime:1 \ --service=SERVICE_NAME \ --rollout_strategy=managed \ --http2_port=9000 \ --backend=grpc://YOUR_API_CONTAINER_NAME:8000
- 将
SERVICE_NAME
替换为您的服务名称。 - 将
YOUR_API_CONTAINER_NAME
替换为您的 API 容器名称。
--rollout_strategy=managed
选项可将 ESP 配置为使用最新部署的服务配置。指定此选项后,在部署新的服务配置后,ESP 最多会在 5 分钟内检测到更改并自动开始使用该服务配置。建议您指定此选项,而非让 ESP 使用特定的配置 ID。- 将
如果您需要将 ESP 配置为使用特定的配置 ID,请执行以下操作:
添加
--version
选项,并将其设置为特定的配置 ID。移除
--rollout_strategy=managed
选项,或将--rollout_strategy
设置为fixed
。fixed
选项可将 ESP 配置为使用您在--version
中指定的服务配置。再次运行
docker run
命令。
如果您同时指定 --rollout_strategy=managed
和 --version
选项,ESP 会使用您在 --version
中指定的配置启动,但随后会在托管模式下运行并获取最新配置。
建议您不要长时间将 ESP 配置为使用特定的配置 ID,否则在您部署更新的服务配置后,必须重启 ESP 才能使用新的配置。
如需移除特定的配置 ID,请执行以下操作:
在
docker run
的 ESP 标志中,移除--version
选项。添加
--rollout_strategy=managed
选项。如需重启 ESP,请运行
docker run
命令。
如需获取在启动 ESP 时可以指定的完整选项列表,请参阅 ESP 启动选项。
GKE
要将 ESP 部署到 GKE,请执行以下操作:
获取 API 的服务名称。
打开您的部署清单文件(即
deployment.yaml
),并将以下内容添加到containers
部分:containers: - name: esp image: gcr.io/endpoints-release/endpoints-runtime:1 args: [ "--http2_port=9000", "--service=SERVICE_NAME", "--rollout_strategy=managed", "--backend=grpc://127.0.0.1:8000" ] ports: - containerPort: 9000
将
SERVICE_NAME
替换为 API 的服务名称。使用
kubectl create
命令启动 Kubernetes 服务:kubectl create -f deployment.yaml
如果您需要将 ESP 配置为使用特定的配置 ID,请执行以下操作:
在部署清单文件中,添加
--version
选项,并将其设置为特定的配置 ID。移除
--rollout_strategy=managed
,或将--rollout_strategy
设置为fixed
。fixed
选项可将 ESP 配置为使用您在--version
中指定的服务配置。启动 Kubernetes 服务:
kubectl create -f deployment.yaml
如果您同时指定 --rollout_strategy=managed
和 --version
选项,ESP 会以您在 --version
中指定的配置启动,但之后会在托管模式下运行并获取最新配置。
建议您不要长时间将 ESP 配置为使用特定的配置 ID,否则在您部署更新的服务配置后,必须重启 ESP 才能使用新的配置。
如需移除特定的配置 ID,请执行以下操作:
在部署清单文件中,移除
--version
选项。添加
--rollout_strategy=managed
。启动 Kubernetes 服务:
kubectl create -f deployment.yaml
如需获取在启动 ESP 时可以指定的完整选项列表,请参阅 ESP 启动选项。
跟踪 API 活动
在部署 ESP 和 API 后端后,您可以使用 curl
或 Postman 等工具向 API 发送请求。如果您未成功收到响应,请参阅排查响应错误。
发送一些请求后,您可以执行以下操作:
如需查看 API 的活动图,请转到 Endpoints > 服务。 请求可能需要一些时间才能体现在图表中。
在 Cloud Logging 页面中查看您的 API 的请求日志。