透過 ESPv2 開始使用 Kubernetes 適用的 Cloud Endpoints


本教學課程說明如何將範例 API 和可擴充服務 Proxy V2 (ESPv2) 設定並部署至非 Google Cloud上的 Kubernetes 叢集。如果您想使用 Google Kubernetes Engine (GKE),請參照在 GKE 中開始使用 Endpoints

本文使用 OpenAPI 規範說明範例程式碼的 REST API。本教學指南也會說明如何建立 API 金鑰以傳送要求至 API。

本教學課程使用範例程式碼與 ESPv2 的預先建構容器映像檔,這些映像檔儲存在 Artifact Registry 中。如果您對於容器不熟悉,請參閱以下詳細資訊:

如需 Cloud Endpoints 的總覽資訊,請參閱關於 EndpointsEndpoints 架構

目標

在逐步進行本教學課程時,請使用以下高階工作清單。您必須完成第 1 部分內的所有工作,才能成功傳送要求至 API。

第 1 部分

  1. 設定 Google Cloud 專案。請參閱事前準備
  2. 安裝及設定用於教學課程的軟體,請參閱「安裝並設定所需的軟體」一節。
  3. 根據需要下載範例程式碼,請參閱「取得範例程式碼」一節。
  4. 下載 Kubernetes 設定檔,請參閱「取得 Kubernetes 設定檔」一節。
  5. 設定 openapi.yaml 檔案,用於設定 Endpoints。請參閱「設定 Endpoints」一節。
  6. 部署 Endpoints 設定,以建立 Cloud Endpoints 服務。請參閱「部署 Endpoints 設定」。
  7. 為您的 Endpoints 服務建立憑證。請參閱「為服務建立憑證」。
  8. 將 API 和 ESPv2 部署至叢集。請參閱「部署 API 後端」一節。
  9. 取得服務的外部 IP 位址。請參閱取得外部 IP 位址一節。
  10. 使用 IP 位址傳送要求至 API。請參閱「使用 IP 位址傳送要求」一節。
  11. 追蹤 API 活動。請參閱「追蹤 API 活動」一節。

第 2 部分

  1. 為範例 API 設定 DNS 記錄,請參閱「為 Endpoints 設定 DNS」一節。
  2. 使用網域名稱傳送要求至 API,請參閱「使用 FQDN 傳送要求」一節。

清除

完成本課程時,請參閱「清除所用資源」,以免系統向您的 Google Cloud 帳戶收取相關費用。

費用

在本文件中,您會使用 Google Cloud的下列計費元件:

您可以使用 Pricing Calculator 根據預測用量產生預估費用。 新 Google Cloud 使用者可能符合申請免費試用的資格。

完成本文件所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱「清除所用資源」。

事前準備

本教學課程假設您已完成 Minikube 或 Kubernetes 叢集設定。詳情請參閱 Kubernetes 說明文件

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. 記下 Google Cloud 專案 ID,以便在稍後使用。
  7. 安裝並設定所需的軟體

    在本教學課程中,您將安裝 Google Cloud CLI,以便使用 gcloud CLI 管理專案。您將使用 kubectl 指令列介面對 Kubernetes 叢集執行指令。此外,您也必須備妥測試 API 的方法。

    在後續程序中,如果您已安裝所需的軟體,請繼續進行下一步驟。

    安裝並設定所需的軟體:

    1. 您需要一個可以將要求傳送至範例 API 的應用程式。

      • Linux 和 macOS 使用者:本教學課程提供了使用 curl 的範例,這項工具通常已預先安裝於您的作業系統。如果您尚未安裝 curl,可以前往 curl版本與下載頁面下載這項工具。
      • Windows 使用者:本教學課程提供了使用 Invoke-WebRequest 的範例,PowerShell 3.0 以上版本均支援這項工具。
    2. 安裝並初始化 gcloud CLI
    3. 更新 gcloud CLI 並安裝 Endpoints 元件:
      gcloud components update
    4. 確認 Google Cloud CLI (gcloud) 已取得授權,可存取您在 Google Cloud中的資料與服務:
      gcloud auth login
      在開啟的新分頁中選取一個帳戶。
    5. 將預設專案設為您的專案 ID:
      gcloud config set project YOUR_PROJECT_ID

      YOUR_PROJECT_ID 替換為專案 ID。如果您有其他 Google Cloud 專案,而且想要使用 gcloud 加以管理,請參閱「管理 gcloud CLI 設定」。

    6. 安裝 kubectl
      gcloud components install kubectl
    7. 取得新的使用者憑證以用於應用程式預設憑證。使用者憑證將會授權 kubectl
      gcloud auth application-default login
    8. 在開啟的新分頁中選擇一個帳戶。
    9. 執行以下指令以確認 Kubernetes 用戶端已妥善設定:
      kubectl version

      您應該會看到類似以下的輸出內容:

         Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.4",
           GitCommit:"9befc2b8928a9426501d3bf62f72849d5cbcd5a3", GitTreeState:"clean",
           BuildDate:"2017-11-20T05:28:34Z", GoVersion:"go1.8.3", Compiler:"gc",
           Platform:"linux/amd64"}
         Server Version: version.Info{Major:"1", Minor:"7+",
           GitVersion:"v1.7.8-gke.0",
           GitCommit:"a7061d4b09b53ab4099e3b5ca3e80fb172e1b018", GitTreeState:"clean",
           BuildDate:"2017-10-10T18:48:45Z", GoVersion:"go1.8.3", Compiler:"gc",
           Platform:"linux/amd64"}
         

下載範例程式碼

根據需要下載範例程式碼,在本教學課程中,您會部署預先建立的容器映像檔,因此無須從範例程式碼中建構容器。但是您可能會想要下載包含多種語言版本的範例程式碼,以協助您瞭解範例 API 的運作方式。

下載程式碼範例:

Java

如何複製或下載範例 API:

  1. 將範例應用程式存放區複製到您的本機電腦:
    git clone https://github.com/GoogleCloudPlatform/java-docs-samples

    或者,您也可以選擇下載範例 ZIP 檔案,然後再解壓縮。

  2. 前往包含範例程式碼的目錄:
    cd java-docs-samples/endpoints/getting-started
Python

如何複製或下載範例 API:

  1. 將範例應用程式存放區複製到您的本機電腦:
    git clone https://github.com/GoogleCloudPlatform/python-docs-samples

    或者,您也可以選擇下載範例 ZIP 檔案,然後再解壓縮。

  2. 前往包含範例程式碼的目錄:
    cd python-docs-samples/endpoints/getting-started
Go

如何複製或下載範例 API:

  1. 確定您已設定 GOPATH 環境變數
  2. 將範例應用程式存放區複製到您的本機電腦:
    go get -d github.com/GoogleCloudPlatform/golang-samples/endpoints/getting-started
  3. 前往包含範例程式碼的目錄:
    cd $GOPATH/src/github.com/GoogleCloudPlatform/golang-samples/endpoints/getting-started
PHP

如何複製或下載範例 API:

  1. 將範例應用程式存放區複製到您的本機電腦:
    git clone https://github.com/GoogleCloudPlatform/php-docs-samples

    或者,您也可以選擇下載範例 ZIP 檔案,然後再解壓縮。

  2. 前往包含範例程式碼的目錄:
    cd php-docs-samples/endpoints/getting-started
Ruby

如何複製或下載範例 API:

  1. 將範例應用程式存放區複製到您的本機電腦:
    git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples

    或者,您也可以選擇下載範例 ZIP 檔案,然後再解壓縮。

  2. 前往包含範例程式碼的目錄:
    cd ruby-docs-samples/endpoints/getting-started
NodeJS

如何複製或下載範例 API:

  1. 將範例應用程式存放區複製到您的本機電腦:
    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples

    或者,您也可以選擇下載範例 ZIP 檔案,然後再解壓縮。

  2. 前往包含範例程式碼的目錄:
    cd nodejs-docs-samples/endpoints/getting-started

取得 Kubernetes 設定檔案

  1. 複製包含本教學課程中使用的 yaml 檔案的存放區至本機電腦:

     git clone https://github.com/googlecloudplatform/endpoints-samples

    您也可以下載範例 ZIP 檔案,然後解壓縮。

  2. 切換到包含設定檔的目錄:

     cd endpoints-samples/kubernetes

設定 Endpoints

範例程式碼中包含以 OpenAPI 規格 v2.0 為基礎的 OpenAPI 設定檔 openapi.yaml。如要設定 Endpoints:

  1. 在範例程式碼目錄中開啟 openapi.yaml 設定檔。

    swagger: "2.0"
    info:
      description: "A simple Google Cloud Endpoints API example."
      title: "Endpoints Example"
      version: "1.0.0"
    host: "echo-api.endpoints.YOUR-PROJECT-ID.cloud.goog"

    注意事項:

    • 設定範例會顯示 host 欄位附近的文字行,您必須修改這些文字行。如要將 openapi.yaml 檔案部署至 Endpoints,您必須使用完整的 OpenAPI 文件。
    • 範例 openapi.yaml 檔案中包含用來設定驗證作業的區段,不過本教學課程無須執行這個步驟。您不需要設定含有 YOUR-SERVICE-ACCOUNT-EMAILYOUR-CLIENT-ID 的文字行。
    • OpenAPI 是一種各語言通用的規範。為求方便,相同的 openapi.yaml 檔案皆位於每個語言 GitHub 存放區的 getting-started 範例中。
  2. host 欄位中的文字替換為 Endpoints 服務名稱,格式如下所示:
    host: "echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog"

    YOUR_PROJECT_ID 替換為您的 Google Cloud 專案 ID。例如:

    host: "echo-api.endpoints.example-project-12345.cloud.goog"

請注意,echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog 是 Endpoints 服務名稱,而不是您用來將要求傳送至 API 的完整網域名稱 (FQDN)。

如要瞭解 Endpoints 所需的 OpenAPI 文件欄位,請參閱「設定 Endpoints」一文。

完成下列所有設定步驟後,您就能使用 IP 位址成功將要求傳送至範例 API。請參閱「為 Endpoints 設定 DNS」,瞭解如何將 echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog 設為 FQDN。

部署 Endpoints 設定

如要部署 Endpoints 設定,請使用 gcloud endpoints services deploy 指令。這個指令會使用 Service Management 建立代管服務。

如何部署 Endpoints 設定:

  1. 確認您位於 endpoints-samples/kubernetes 目錄。
  2. 上傳設定並建立代管服務:
    gcloud endpoints services deploy openapi.yaml
    

接著,gcloud 指令會呼叫 Service Management API,並使用您在 openapi.yaml 檔案 host 欄位中指定的名稱建立代管服務。Service Management 會依據 openapi.yaml 檔案中的設定建立服務。變更 openapi.yaml 時,您必須重新部署檔案才能更新 Endpoints 服務。

Service Management 在建立和設定服務時,會輸出資訊至終端機。您可以放心忽略 openapi.yaml 檔案中路徑不需要 API 金鑰的警告。完成服務設定程序之後,Service Management 會顯示含有服務設定 ID 與服務名稱的訊息,類似於以下內容:

Service Configuration [2017-02-13r0] uploaded for service [echo-api.endpoints.example-project-12345.cloud.goog]

在上方的範例中,2017-02-13r0 是服務設定 ID,echo-api.endpoints.example-project-12345.cloud.goog 則為 Endpoints 服務。服務設定 ID 是由一個日期戳記和一個修訂版本編號所組成。如果您在同一天再次部署 openapi.yaml 檔案,服務設定 ID 中的修訂版本編號就會遞增。您可以在控制台的「Endpoints」 >「Services」(服務) 頁面中查看 Endpoints 服務設定。 Google Cloud

如果您收到錯誤訊息,請參閱 Endpoints 設定部署疑難排解一文。

檢查必要服務

Endpoints 和 ESP 至少需要啟用下列 Google 服務:
名稱 標題
servicemanagement.googleapis.com Service Management API
servicecontrol.googleapis.com Service Control API

在大多數情況下,gcloud endpoints services deploy 指令會啟用這些必要服務。不過在以下情況中,即便您成功執行 gcloud 指令,還是無法啟用必要服務:

  • 您使用 Terraform 之類的第三方應用程式,而其中未包含這些服務。

  • 您已將 Endpoints 設定部署至現有Google Cloud 專案,但在專案中已明確停用這些服務。

使用下列指令確認已啟用必要服務:

gcloud services list

如果必要的服務並未列出,請執行下列指令加以啟用:

gcloud services enable servicemanagement.googleapis.com
gcloud services enable servicecontrol.googleapis.com

並啟用 Endpoints 服務:

gcloud services enable ENDPOINTS_SERVICE_NAME

如要判斷 ENDPOINTS_SERVICE_NAME,您可以採取下列任一做法:

  • 部署 Endpoints 設定後,請前往 Cloud 控制台的「Endpoints」頁面。Service name 欄下方會列出可能的 ENDPOINTS_SERVICE_NAME 清單。

  • 針對 OpenAPI,ENDPOINTS_SERVICE_NAME 是您在 OpenAPI 規格 host 欄位中指定的值。針對 gRPC,ENDPOINTS_SERVICE_NAME 是您在 gRPC Endpoints 設定的 name 欄位中指定的值。

如要進一步瞭解 gcloud 指令,請參閱 gcloud 服務

為服務建立憑證

為了妥善管理您的 API,ESP 和 ESPv2 都需要使用服務基礎架構中的服務。ESP 和 ESPv2 必須使用存取憑證才能呼叫這些服務。當您將 ESP 或 ESPv2 部署至 GKE、Compute Engine 或 App Engine 彈性環境等 Google Cloud 環境時,ESP 和 ESPv2 會透過Google Cloud 中繼資料服務為您取得存取權杖。

如果您要將 ESP 或 ESPv2 部署至非Google Cloud 環境 (例如本機電腦、內部部署的 Kubernetes 叢集,或是其他雲端服務平台),則必須提供含有私密金鑰的服務帳戶 JSON 檔案。ESP 和 ESPv2 會使用服務帳戶產生存取權杖,以呼叫管理 API 所需的服務。

您可以使用 Google Cloud 控制台或 Google Cloud CLI 建立服務帳戶和私密金鑰檔案:

控制台

  1. 在 Google Cloud 控制台中,開啟「Service Accounts」(服務帳戶) 頁面。

    前往「Service Accounts」(服務帳戶) 頁面

  2. 按一下 [Select a project] (選取專案)。
  3. 選取您已建立 API 的專案,並按一下 [Open] (開啟)。
  4. 按一下 [+ Create Service Account] (+ 建立服務帳戶)
  5. 在「Service account name」(服務帳戶名稱) 欄位中,輸入服務帳戶的名稱。
  6. 按一下 [建立]。
  7. 按一下「繼續」
  8. 按一下 [完成]
  9. 按一下新建立的服務帳戶電子郵件地址。
  10. 點選「金鑰」
  11. 依序點選「新增金鑰」和「建立新的金鑰」
  12. 按一下「建立」,JSON 金鑰檔案會下載至您的電腦。

    請務必妥善保存金鑰檔案,因為此檔案可當做服務帳戶進行驗證。您可以任意移動及重新命名這個檔案。

  13. 按一下 [關閉]

gcloud

  1. 輸入以下指令,以顯示Google Cloud 專案的專案 ID:

    gcloud projects list
  2. 替換以下指令中的 PROJECT_ID,將預設專案設為您的 API 所在的專案:

    gcloud config set project PROJECT_ID
  3. 確認 Google Cloud CLI (gcloud) 已取得授權,可存取您在 Google Cloud中的資料與服務:

    gcloud auth login

    如果您有多個帳戶,請務必選擇 API 所在之 Google Cloud 專案中的帳戶。如果您執行 gcloud auth list,則您選取的帳戶會顯示為專案的有效帳戶。

  4. 如要建立服務帳戶,請執行下列指令,並將 SERVICE_ACCOUNT_NAMEMy Service Account 替換為您要使用的名稱及顯示名稱:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
       --display-name "My Service Account"

    指令會為服務帳戶指派電子郵件地址,格式如下:

    SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

    後續指令將會用到這個電子郵件地址。

  5. 建立服務帳戶金鑰檔案:

    gcloud iam service-accounts keys create ~/service-account-creds.json \
       --iam-account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

新增必要的 IAM 角色:

本節說明 ESP 和 ESPv2 使用的 IAM 資源,以及附加服務帳戶存取這些資源時所需的 IAM 角色。

端點服務設定

ESP 和 ESPv2 會呼叫 Service Control,後者會使用 Endpoints 服務設定。端點服務設定是 IAM 資源,ESP 和 ESPv2 需要服務控制器角色才能存取。

IAM 角色是在端點服務設定中,而非在專案中。一個專案可以有多個端點服務設定。

使用下列 gcloud 指令,將角色新增至端點服務設定的已連結服務帳戶。

gcloud endpoints services add-iam-policy-binding SERVICE_NAME \
  --member serviceAccount:SERVICE_ACCOUNT_NAME@DEPLOY_PROJECT_ID.iam.gserviceaccount.com \
  --role roles/servicemanagement.serviceController

其中:
* SERVICE_NAME 是端點服務名稱
* SERVICE_ACCOUNT_NAME@DEPLOY_PROJECT_ID.iam.gserviceaccount.com 是已附加的服務帳戶。

Cloud Trace

ESP 和 ESPv2 會呼叫 Cloud Trace 服務,將 Trace 匯出至專案。這項專案稱為追蹤專案。在 ESP 中,追蹤專案和擁有端點服務設定的專案相同。在 ESPv2 中,您可以使用 --tracing_project_id 旗標指定追蹤專案,預設為部署專案。

ESP 和 ESPv2 需要 Cloud Trace 代理人角色才能啟用 Cloud Trace。

使用下列 gcloud 指令,將角色新增至已連結的服務帳戶:

gcloud projects add-iam-policy-binding TRACING_PROJECT_ID \
  --member serviceAccount:SERVICE_ACCOUNT_NAME@DEPLOY_PROJECT_ID.iam.gserviceaccount.com \
  --role roles/cloudtrace.agent

其中
* TRACING_PROJECT_ID 是追蹤專案 ID
* SERVICE_ACCOUNT_NAME@DEPLOY_PROJECT_ID.iam.gserviceaccount.com 是已附加的服務帳戶。詳情請參閱「 什麼是角色和權限?」。

如要進一步瞭解指令,請參閱 gcloud iam service-accounts

部署 API 後端

您目前已將 OpenAPI 文件部署至 Service Management,但尚未部署為 API 後端提供服務的程式碼。本節會逐步引導您針對 API 範例和 ESPv2,將預先建構的容器部署至 Kubernetes。

檢查必要權限

將必要權限授予與叢集相關聯的服務帳戶:

gcloud endpoints services add-iam-policy-binding SERVICE_NAME \
    --member "serviceAccount:SERVICE_ACCOUNT" \
    --role roles/servicemanagement.serviceController

詳情請參閱「 什麼是角色和權限?」。

為 ESPv2 提供服務憑證

在容器內部執行的 ESPv2 必須能存取儲存在本機 service-account-creds.json 檔案中的憑證。如果要讓 ESPv2 能存取憑證,您可以建立 Kubernetes 密鑰,並將 Kubernetes 密鑰掛接成 Kubernetes 磁碟區

如何建立 Kubernetes 密鑰並掛接磁碟區:

  1. 如果 JSON 檔案已經下載至不同目錄,請記得將 JSON 檔案重命名為 service-account-creds.json,並將其複製到endpoints-samples/kubernetes。這樣一來,名稱就會與 echo.yaml 部署資訊清單檔案中指定的選項相符。
  2. 確認您位於 endpoints-samples/kubernetes 目錄。
  3. 使用下列指令,透過服務帳戶憑證建立 Kubernetes 密鑰:

    kubectl create secret generic service-account-creds \
       --from-file=service-account-creds.json
    

    成功之後,系統會顯示以下訊息:

    secret "service-account-creds" created

您用來將 API 和 ESPv2 部署至 Kubernetes 的部署資訊清單檔案,已包含密鑰磁碟區,如下列檔案的兩個區段所示:

volumes:
  - name: service-account-creds
    secret:
      secretName: service-account-creds
volumeMounts:
  - mountPath: /etc/esp/creds
    name: service-account-creds
    readOnly: true

設定服務名稱並啟動服務

ESPv2 必須知道您的服務名稱,才能使用 gcloud endpoints services deploy 指令找出先前部署的設定。

如何設定服務名稱及啟動服務:

  1. 開啟部署資訊清單檔案 echo.yaml,並將 ESPv2 啟動選項中的 SERVICE_NAME 替換成您的服務名稱。這與您在 OpenAPI 文件的 host 欄位中設定的名稱相同。例如:

    "--service=echo-api.endpoints.example-project-12345.cloud.goog"
    containers:
    - name: esp
      image: gcr.io/endpoints-release/endpoints-runtime:2
      args: [
        "--listener_port=8080",
        "--backend=127.0.0.1:8081",
        "--service=SERVICE_NAME",
        "--rollout_strategy=managed",
        "--non_gcp",
        "--service_account_key=/etc/esp/creds/service-account-creds.json"
      ]
      ports:
        - containerPort: 8080
      volumeMounts:
        - mountPath: /etc/esp/creds
          name: service-account-creds
          readOnly: true
    - name: echo
      image: gcr.io/endpoints-release/echo:latest
      ports:
        - containerPort: 8081
    

    "--rollout_strategy=managed" 選項可將 ESPv2 設為使用最新部署的服務設定。指定此選項時,在您部署新服務設定後一分鐘內,ESPv2 會偵測到變更並自動開始使用新設定。建議您指定此選項,而非讓 ESPv2 使用特定的設定 ID。如要進一步瞭解使用的其他 ESPv2 選項,請參閱 ESPv2 啟動選項

  2. 使用下列指令啟動服務,以在 Kubernetes 上部署 Endpoints 服務:

    kubectl create -f echo.yaml

    如果您看到類似以下內容的錯誤訊息:

    The connection to the server localhost:8080 was refused - did you specify the right host or port?

    這表示您未正確設定 kubectl,詳情請參閱「設定 kubectl」一節。詳情請參閱「在 Kubernetes 上部署 Endpoints」。

取得服務的外部 IP 位址

如果您使用 Minikube,請直接前往「使用 IP 位址傳送要求」一節。在容器中啟動服務之後,系統可能需要幾分鐘的時間才能備妥外部 IP 位址。

如何查看服務的外部 IP 位址:

  1. 請執行下列指令:

    kubectl get service

  2. 記下 EXTERNAL-IP 的值,傳送要求至範例 API 時,將會使用這個 IP 位址。

使用 IP 位址傳送要求

在容器叢集中執行範例 API 之後,您就能向 API 傳送要求。

建立 API 金鑰並設定環境變數

範例程式碼需要 API 金鑰。為了簡化要求,請設定 API 金鑰的環境變數。

  1. 在您用於 API 的 Google Cloud 專案中,在 API 憑證頁面上建立 API 金鑰。如果您想在不同的 Google Cloud 專案中建立 API 金鑰,請參閱在 Google Cloud 專案中啟用 API

    前往憑證頁面

  2. 按一下 [Create credentials] (建立憑證),然後選取 [API key] (API 金鑰)
  3. 將金鑰複製到剪貼簿。
  4. 按一下 [Close] (關閉)
  5. 在本機電腦中貼上 API 金鑰,以便指派給環境變數:
    • 在 Linux 或 macOS 中:export ENDPOINTS_KEY=AIza...
    • 在 Windows PowerShell 中:$Env:ENDPOINTS_KEY="AIza..."

傳送要求至 minikube

下列指令使用您前面所設定的 ENDPOINTS_KEY 環境變數。

Linux 或 mac OS

NODE_PORT=`kubectl get service esp-echo --output='jsonpath={.spec.ports[0].nodePort}'`
MINIKUBE_IP=`minikube ip`
curl --request POST \
    --header "content-type:application/json" \
    --data '{"message":"hello world"}' \
    ${MINIKUBE_IP}:${NODE_PORT}/echo?key=${ENDPOINTS_KEY}

PowerShell

$Env:NODE_PORT=$(kubectl get service esp-echo --output='jsonpath={.spec.ports[0].nodePort}')
$Env:MINIKUBE_IP=$(minikube ip)
(Invoke-WebRequest -Method POST -Body '{"message": "hello world"}' `
    -Headers @{"content-type"="application/json"} `
    -URI "http://$Env:MINIKUBE_IP:$Env:NODE_PORT/echo?key=$Env:ENDPOINTS_KEY").Content

傳送要求至其他 Kubernetes 叢集

Linux 或 mac OS

使用 curl,透過先前設定的 ENDPOINTS_KEY 環境變數傳送 HTTP 要求。將 IP_ADDRESS 替換為您的執行個體外部 IP 位址。

curl --request POST \
   --header "content-type:application/json" \
   --data '{"message":"hello world"}' \
   "http://IP_ADDRESS:80/echo?key=${ENDPOINTS_KEY}"

在上方的 curl 中:

  • --data 選項會指定要發布至 API 的資料。
  • --header 選項會指定資料採用 JSON 格式。

PowerShell

使用 Invoke-WebRequest,透過先前設定的 ENDPOINTS_KEY 環境變數傳送 HTTP 要求。將 IP_ADDRESS 替換為您的執行個體外部 IP 位址。

(Invoke-WebRequest -Method POST -Body '{"message": "hello world"}' `
    -Headers @{"content-type"="application/json"} `
    -URI "http://IP_ADDRESS:80/echo?key=$Env:ENDPOINTS_KEY").Content

在上述範例中,前兩行的結尾為倒引號。當您將範例貼到 PowerShell 中時,請確保倒引號後面沒有空格。 如要瞭解範例要求中使用的選項,請參閱 Microsoft 說明文件中的 Invoke-WebRequest

第三方應用程式

您可以使用諸如 Chrome 瀏覽器擴充功能 Postman 等第三方應用程式,傳送要求:

  • 選取 POST 做為 HTTP 動詞。
  • 選取 content-type 鍵和 application/json 值做為標頭。
  • 輸入以下內文:
    {"message":"hello world"}
  • 在網址中使用實際的 API 金鑰,而非環境變數。例如:
    http://192.0.2.0:80/echo?key=AIza...

API 會回應您傳送的訊息,並傳回以下內容:

{
  "message": "hello world"
}

如果您未取得成功的回應,請參閱排解回應錯誤一文。

您已在 Endpoints 中部署並測試了 API!

追蹤 API 活動

如要追蹤 API 活動,請執行下列步驟:

  1. 在「Endpoints」>「Services」(服務) 頁面中查看 API 的活動圖表。

    前往 Endpoints 服務頁面


    要求可能需要一些時間才能反映在圖表中。

  2. 在「Logs Explorer」(記錄檔探索工具) 頁面中查看您的 API 要求記錄。

    前往「Logs Explorer」頁面

為 Endpoints 設定 DNS

API 的 Endpoints 服務名稱位於 .endpoints.YOUR_PROJECT_ID.cloud.goog 網域,因此您只需要略為調整 openapi.yaml 檔案的設定,即可將該網域當做完整的網域名稱 (FQDN)。這樣一來,您就能使用 echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog (而非 IP 位址) 將要求傳送至範例 API。

如何設定 Endpoints DNS:

  1. 開啟 OpenAPI 設定檔 openapi.yaml,並在檔案最上層新增 x-google-endpoints 屬性 (請勿使用縮排或巢狀結構),如以下程式碼片段所示:
    host: "echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog"
    x-google-endpoints:
    - name: "echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog"
      target: "IP_ADDRESS"
  2. name 屬性中,將 YOUR_PROJECT_ID 替換為您的專案 ID。
  3. target 屬性中,將 IP_ADDRESS 替換為您向範例 API 傳送要求時使用的 IP 位址。
  4. 將更新的 OpenAPI 設定檔部署至 Service Management:
    gcloud endpoints services deploy openapi.yaml
    

例如,假設 openapi.yaml 檔案的設定如下:

host: "echo-api.endpoints.example-project-12345.cloud.goog"
x-google-endpoints:
- name: "echo-api.endpoints.example-project-12345.cloud.goog"
  target: "192.0.2.1"

您使用前述的 gcloud 指令部署 openapi.yaml 檔案時,Service Management 會建立 DNS A 記錄 echo-api.endpoints.my-project-id.cloud.goog,這個記錄會解析為目標 IP 位址 192.0.2.1。新的 DNS 設定可能需要幾分鐘才會生效。

設定 SSL

如要進一步瞭解如何設定 DNS 和安全資料傳輸層 (SSL),請參閱「啟用 Endpoints 的安全資料傳輸層 (SSL)」一文。

傳送要求至 FQDN

為範例 API 設定 DNS 記錄之後,請使用 FQDN (將 YOUR_PROJECT_ID 替換為您的專案 ID) 與先前設定的 ENDPOINTS_KEY 環境變數向 API 傳送要求:
  • 在 Linux 或 macOS 中:
    curl --request POST \
        --header "content-type:application/json" \
        --data '{"message":"hello world"}' \
        "http://echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog:80/echo?key=${ENDPOINTS_KEY}"
  • 在 Windows PowerShell 中:
    (Invoke-WebRequest -Method POST -Body '{"message": "hello world"}' -Headers @{"content-type"="application/json"} -URI "http://echo-api.endpoints.[YOUR_PROJECT_ID].cloud.goog:80/echo?key=$Env:ENDPOINTS_KEY").Content

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。

  • 刪除 Kubernetes 服務和部署:
    kubectl delete -f echo.yaml

如要瞭解如何停用本教學課程使用的服務,請參閱「刪除 API 和 API 執行個體」一文。

後續步驟