本頁面說明如何將您 API 的後端程式碼和可擴充服務 Proxy (ESP) 部署至 Google Kubernetes Engine 及 Compute Engine。
雖然部署步驟會因您 API 的託管平台而有所不同,但一定會有個步驟為 ESP 提供服務名稱,也會有個選項將 ESP 設定為使用最新部署的 Endpoints 服務設定。有了這項資訊,ESP 就可以取得您 API 的 Endpoints 設定,進而讓 ESP 代理要求和回應,以便 Cloud Endpoints 管理您的 API。
必備條件
本頁假設您已經:
準備進行部署
Compute Engine
如要讓 Endpoints 管理您的 API,您必須為您的 API 安裝並設定 ESP 及後端伺服器程式碼。此外,您也必須在您的 Compute Engine VM 執行個體上安裝 Docker,才能執行 Container Registry 中免費提供的 ESP Docker 映像檔。
部署之前的準備:
在您將 API 和 ESP 部署到 Compute Engine 之前,請先完成以下步驟:
- 建立、設定和啟動您的 VM 執行個體。
- 在您的 VM 執行個體上安裝 Docker Enterprise Edition (EE) 或 Docker Community Edition (CE)。
- 為您的後端伺服器程式碼建立 Docker 容器。
- 將容器推送至 Artifact Registry 或其他登錄檔。
確定您可以成功:
- 連線至 VM 執行個體。
- 執行 Docker 映像檔,在 VM 執行個體上啟動後端伺服器。詳情請參閱 Docker 執行參考資料。
- 傳送要求至您的 API。
GKE
當您在 Google Cloud 主控台中建立叢集時,根據預設,授予叢集服務帳戶的 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:
將您的容器化應用程式部署至容器叢集。GKE 說明文件中所述的一般步驟包括:
- 將您的應用程式封裝至 Docker 映像檔中。
- 將這個映像檔上傳至登錄檔。
- 建立容器叢集。
- 將您的應用程式部署至叢集。
- 將您的應用程式公開發佈到網際網路。
確定您可以成功:
- 啟動 API 的伺服器。
- 傳送要求至您的 API。
部署您的 API 和 ESP
Compute Engine
如何利用 Docker 將您的 API 和 ESP 部署至 Compute Engine:
連線到您的 VM 執行個體。使用您的 VM 執行個體名稱取代
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
。 - 將Google Cloud 專案 ID 替換為您在推送映像檔時使用的Google Cloud 。
YOUR_PROJECT_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
。 - 使用您的 API 容器名稱取代
YOUR_API_CONTAINER_NAME
。
--rollout_strategy=managed
選項可將 ESP 設為使用最新部署的服務設定。指定此選項時,在您部署新服務設定後 5 分鐘內,ESP 會偵測到變更並自動開始使用新設定。建議您指定此選項而非讓 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
使用您的 API 服務名稱取代
SERVICE_NAME
。使用
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」 >「Services」。要求可能需要一些時間才能反映在圖表中。
在 Cloud Logging 頁面中查看您的 API 要求記錄。