部署 API 后端

本页介绍如何将 API 的后端代码和 Extensible Service Proxy (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 之前,请完成以下步骤:

  1. 创建、配置并启动虚拟机实例
  2. 在虚拟机实例上安装 Docker 企业版 (EE) 或 Docker 社区版 (CE)
  3. 为后端服务器代码创建 Docker 容器
  4. 将容器推送到 Container Registry 或其他注册表。
  5. 确保您可以成功地执行以下操作:

GKE

在 Cloud Console 中创建集群时,向集群服务帐号授予的 OAuth 范围默认包含 Endpoints 所需的范围:

  • Service Control:已启用
  • Service Management:只读

使用 gcloud container clusters create 命令或第三方配置文件创建集群时,请务必指定以下范围:

  • "https://www.googleapis.com/auth/servicecontrol"
  • "https://www.googleapis.com/auth/service.management.readonly"

如需了解详情,请参阅什么是访问权限范围?

部署前的准备工作

部署清单文件添加了一小部分内容后,您便可以在容器集群以及容器化应用中运行 ESP Docker 映像。在将 API 与 ESP 部署到 GKE 之前,请完成以下步骤:

  1. 将容器化应用部署到容器集群。GKE 文档中介绍的常规步骤包括:

    1. 将应用打包到 Docker 映像中。
    2. 将该映像上传到注册表。
    3. 创建容器集群。
    4. 将应用部署到集群。
    5. 在互联网上公开应用。
  2. 确保您可以成功地执行以下操作:

    • 启动 API 的服务器。
    • 向您的 API 发送请求。

部署 API 和 ESP

Compute Engine

要将 API 和 ESP 部署到装有 Docker 的 Compute Engine,请执行以下操作

  1. 连接到您的虚拟机实例。将 INSTANCE_NAME 替换为您的虚拟机实例的名称:

    gcloud compute ssh INSTANCE_NAME
    
  2. 自行创建名为 esp_net 的容器网络:

    sudo docker network create --driver bridge esp_net
    
  3. 运行后端服务器代码的映像实例,并将其连接到 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 替换为您的映像名称。
  4. 获取 API 的服务名称。这是您在服务配置 YAML 文件的 name 字段中指定的名称。

  5. 运行 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,请执行以下操作

  1. 添加 --version 选项,并将其设置为特定的配置 ID

  2. 移除 --rollout_strategy=managed 选项,或将 --rollout_strategy 设置为 fixedfixed 选项可将 ESP 配置为使用您在 --version 中指定的服务配置。

  3. 再次运行 docker run 命令。

如果您同时指定 --rollout_strategy=managed--version 选项,ESP 会使用您在 --version 中指定的配置启动,但随后会在托管模式下运行并获取最新配置。

建议您不要长时间将 ESP 配置为使用特定的配置 ID,否则在您部署更新的服务配置后,必须重启 ESP 才能使用新的配置。

如需移除特定的配置 ID,请执行以下操作

  1. docker run 的 ESP 标志中,移除 --version 选项。

  2. 添加 --rollout_strategy=managed 选项。

  3. 如需重启 ESP,请运行 docker run 命令。

如需获取在启动 ESP 时可以指定的完整选项列表,请参阅 ESP 启动选项

GKE

如需将 ESP 部署到 GKE,请执行以下操作

  1. 获取您的 API 的服务名称

  2. 打开您的部署清单文件(即 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 的服务名称。

  3. 使用 kubectl create 命令启动 Kubernetes 服务:

        kubectl create -f deployment.yaml
    

如果您需要将 ESP 配置为使用特定的配置 ID,请执行以下操作

  1. 在部署清单文件中,添加 --version 选项,并将其设置为特定的配置 ID

  2. 移除 --rollout_strategy=managed,或将 --rollout_strategy 设置为 fixedfixed 选项可将 ESP 配置为使用您在 --version 中指定的服务配置。

  3. 启动 Kubernetes 服务:kubectl create -f deployment.yaml

如果您同时指定 --rollout_strategy=managed--version 选项,ESP 会以您在 --version 中指定的配置启动,但之后会在托管模式下运行并获取最新配置。

建议您不要长时间将 ESP 配置为使用特定的配置 ID,否则在您部署更新的服务配置后,必须重启 ESP 才能使用新的配置。

如需移除特定的配置 ID,请执行以下操作

  1. 在部署清单文件中,移除 --version 选项。

  2. 添加 --rollout_strategy=managed

  3. 启动 Kubernetes 服务:kubectl create -f deployment.yaml

如需获取在启动 ESP 时可以指定的完整选项列表,请参阅 ESP 启动选项

跟踪 API 活动

在部署 ESP 和 API 后端后,您可以使用 curl 或 Postman 等工具向 API 发送请求。如果您未成功收到响应,请参阅排查响应错误

发送一些请求后,您可以执行以下操作:

后续步骤