搭配使用 Kubernetes 適用的 Apigee APIM Operator 和 API 管理政策

本頁內容適用於 Apigee,但不適用於 Apigee Hybrid

查看 Apigee Edge 說明文件。

本頁說明如何修改叢集中執行的 Google Kubernetes Engine (GKE) Gateway,使用 Kubernetes 適用的 Apigee APIM Operator 套用 Apigee API 管理政策。

事前準備

開始這項工作前,請務必完成下列步驟:

必要的角色

如果您已按照「 安裝 Kubernetes 適用的 Apigee APIM Operator」一文的說明,將必要角色指派給服務帳戶,則不需要其他 IAM 角色或權限即可完成這些工作。

您可以選擇使用 Kubernetes 內建的角色型存取權控管 (RBAC) 機制,授權在 Google Kubernetes Engine 叢集中的資源上執行動作。詳情請參閱「 使用角色型存取控制授權叢集中的動作」。

總覽

以下各節說明使用 APIM Operator 修改 GKE Gateway,以使用 Apigee 政策的必要步驟。在本逐步操作說明中,您將:

  1. 定義 APIM 擴充功能政策
  2. 定義 API 產品
  3. 定義 API 作業集。
  4. 測試 Apigee 服務擴充功能。
  5. 在 Google Cloud 控制台中查看 Apigee API 數據分析。

定義 APIM 擴充功能政策

在這個步驟中,您將定義 APIM 擴充功能政策,並套用至叢集中執行的 GKE Gateway。這項政策會控管通過閘道和相關聯 HTTPRoutes所有流量,運作方式與目前 Apigee 環境層級的流程掛鉤類似。

定義 APIM 擴充功能政策:

  1. apim 命名空間中,建立名為 global-ext-lb1-apim-policy.yaml 的新檔案。
  2. 將下列內容複製到新檔案中:
    # global-ext-lb1-apim-policy.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIMExtensionPolicy
    metadata:
      name: global-ext-lb1-apim-policy
      namespace: apim
    spec:
      apigeeenv: ENV_NAME # optional
      location: global
      failOpen: false
      timeout: 1000ms
      defaultSecurityEnabled: true
      targetRef: # identifies the Gateway where the extension should be applied
        name: global-ext-lb1
        kind: Gateway
        namespace: default

    其中 ENV_NAME 是在安裝步驟「建立 Apigee 環境」中建立的 Apigee 環境名稱。

    您可以在 Google Cloud 控制台的「Apigee Environments」(Apigee 環境) 頁面中,查看所有可用環境:

    前往「環境」

  3. 套用政策:
    kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml

    套用 yaml 後,APIM 運算子會在背景建立網路資源。

  4. 使用下列指令檢查 API 擴充功能政策的狀態:
    kubectl -n apim get APIMExtensionPolicy

    輸出內容應如下所示,並顯示 StateRUNNING

    NAME                         STATE      ERRORMESSAGE
    global-ext-lb1-apim-policy   RUNNING  
  5. 使用下列指令將要求傳送至 Gateway:
    curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME"

    其中:

    • GATEWAY_IP_ADDRESS 是閘道的 IP 位址。您可以使用下列指令擷取閘道 IP 位址,其中 GATEWAY_NAME 是閘道的名稱:
      kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
    • HOST_NAME 是在 Gateway 的 HTTPRoute 中定義的主機名稱。
  6. 由於 API 擴充功能政策資源中已設定 defaultSecurityEnabled: true,因此要求應會失敗,因為預設安全性已啟用。畫面會顯示類似以下的回應:
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}

    這表示 Apigee 擴充功能政策已啟用,且 API 金鑰強制執行和存取權杖驗證也已啟用。

定義 API 產品

定義 API 產品:

  1. apim 命名空間中,建立名為 api-product.yaml 的新檔案。
  2. 將下列內容複製到新檔案中:
    # api-product.yaml
      apiVersion: apim.googleapis.com/v1
      kind: APIProduct
      metadata:
        name: api-product
        namespace: apim
      spec:
        approvalType: auto
        description: Http bin GET calls
        displayName: api-product
        enforcementRefs:
          - name: global-ext-lb1-apim-policy
            kind: APIMExtensionPolicy
            group: apim.googleapis.com
            namespace: apim
        attributes:
          - name: access
            value: private
  3. 使用下列指令將檔案套用至閘道:
    kubectl -n apim apply -f api-product.yaml

定義 API 作業集

定義在上一個步驟中建立的 API 產品適用的 API 作業集:

  1. apim 命名空間中,建立名為 apim-policies.yaml 的新檔案。
  2. 將下列內容複製到新檔案中。 這個檔案會定義配額政策,以及上一個步驟中定義的 API 產品可用的 REST 作業:
    # apim-policies.yaml
      apiVersion: apim.googleapis.com/v1
      kind: APIOperationSet
      metadata:
        name: item-set
        namespace: apim
      spec:
        apiProductRefs:
          - name: api-product
            kind: APIProduct
            group: apim.googleapis.com
            namespace: apim
        quota:
          limit: 10
          interval: 1
          timeUnit: minute
        restOperations:
          - name: GetItems
            path: /get
            methods:
              - GET
  3. 將檔案套用至閘道:
    kubectl -n apim apply -f apim-policies.yaml

測試 Apigee 服務擴充功能

在這個步驟中,您將使用 Google Cloud 控制台中的 Apigee UI,測試 Apigee 服務擴充功能,以及套用至 Gateway 的 Apigee 擴充功能政策。

測試設定

設定測試所需的 API 資源:

  1. 前往 Google Cloud 控制台的「Apigee API 管理」頁面:

    Apigee API 管理平台

  2. 選取您安裝 APIM 運算子的 Apigee 機構。
  3. 建立開發人員:
    1. 選取「發行」>「開發人員」
    2. 在「開發人員」頁面中,按一下「+ 建立」
    3. 在「新增開發人員」頁面中,使用任意值填寫必填欄位。
    4. 按一下「新增」
  4. 建立應用程式:
    1. 選取「發布」>「應用程式」
    2. 在「應用程式」頁面,按一下「+ 建立」
    3. 在「建立應用程式」頁面中,使用下列值填寫「應用程式詳細資料」區段中的必填欄位:
      • 應用程式名稱:demo-app
      • 開發人員:選取您在上一個步驟中建立的開發人員,或從清單中選取其他開發人員。
    4. 在「應用程式憑證」部分中,按一下「+ 新增憑證」
    5. 在「憑證」部分,使用下列值填寫「憑證詳細資料」部分中的必填欄位:
      • 憑證名稱:demo-credential
      • 憑證類型:選取「API 金鑰」
    6. 點選「建立」
    7. 在「產品」部分中,按一下「+ 新增產品」
    8. 選取上一個步驟中建立的 api-product-1
    9. 按一下「新增」
    10. 點選「建立」
  5. 在「應用程式詳細資料」頁面的「憑證」部分,按一下 即可顯示「金鑰」的值。

    複製 Key 值。您會在後續步驟中使用這組金鑰,向服務發出 API 呼叫。

  6. 在「應用程式詳細資料」頁面的「憑證」部分,按一下 即可顯示「應用程式密鑰」的值。

    複製「應用程式密鑰」值。您會在後續步驟中使用這個值產生存取權杖。

測試 API 金鑰強制執行功能

使用下列指令,透過先前步驟取得的 API 金鑰,將要求傳送至 Gateway:

curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY"

其中:

  • GATEWAY_IP_ADDRESS 是閘道的 IP 位址。您可以使用下列指令擷取閘道 IP 位址,其中 GATEWAY_NAME 是閘道的名稱:
    kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
  • HOST_NAME 是在 Gateway 的 HTTPRoute 中定義的主機名稱。
  • API_KEY 是在「測試設定」中取得的 API 金鑰值。

要求應會成功,並傳回類似下列內容的回應:

{
  "args": {},
  "headers": {
    "Accept": "*/*",
    "Host": "apigee-apim-operator-test.apigee.net",
    "User-Agent": "curl/8.7.1",
    "X-Api-Key": "f0N6sYYYclGYYYe0oP5YYYdA20PjgrP2x8YYYh7z4YYYKiYt",
    "X-Cloud-Trace-Context": "bb3a768787099bda628781188bfb318b/15554891713516675739"
  },
  "origin": "34.54.193.72",
  "url": "https://34.54.193.72/get"
}

測試配額限制

如要測試 APIM 擴充功能政策中定義的配額強制執行,請在一分鐘內,將上一個步驟的要求傳送至 Gateway 十次。

您可以執行下列指令碼來產生要求:

#!/bin/sh
for i in $(seq 1 11); do
    curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY"
    sleep 1
done

其中:

  • GATEWAY_IP_ADDRESS 是閘道的 IP 位址。您可以使用下列指令擷取閘道 IP 位址,其中 GATEWAY_NAME 是閘道的名稱:
    kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
  • HOST_NAME 是在 Gateway 的 HTTPRoute 中定義的主機名稱。
  • API_KEY 是在「測試設定」中取得的 API 金鑰值。

這項動作應會觸發配額違規,並引發類似下列的錯誤:

{"fault":{"faultstring":"Rate limit quota violation. Quota limit  exceeded. Identifier : _default","detail":{"errorcode":"policies.ratelimit.QuotaViolation"}}}

測試 REST 作業強制執行

如要測試其餘作業的強制執行情況,請使用下列指令,透過 API 作業集包含的網址,向 Gateway 傳送要求:

curl http://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME" -H "x-api-key: API_KEY"

其中:

  • GATEWAY_IP_ADDRESS 是閘道的 IP 位址。您可以使用下列指令擷取閘道 IP 位址,其中 GATEWAY_NAME 是閘道的名稱:
    kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
  • HOST_NAME 是在 Gateway 的 HTTPRoute 中定義的主機名稱。
  • API_KEY 是在「測試設定」中取得的 API 金鑰值。

要求應會失敗,並傳回類似以下的回應:

{"fault":{"faultstring":"Invalid ApiKey for given resource","detail":{"errorcode":"oauth.v2.InvalidApiKeyForGivenResource"}}}

在 Google Cloud 控制台中查看 Apigee API 數據分析

您可以在 Google Cloud 主控台中使用 Apigee API Analytics,查看 GKE Gateway 處理的 API 流量,以及您安裝的 APIMExtensionPolicy:

  1. 前往 Google Cloud 控制台的「Apigee API management」(Apigee API 管理) 頁面:

    Apigee API 管理平台

  2. 選取您安裝 APIM 運算子的 Apigee 機構。
  3. 在側邊導覽選單中,依序選取「Analytics」>「API 指標」
  4. 在「API Proxy Performance」分頁中,選擇您在選用安裝步驟「建立 Apigee 環境」中建立的環境,或是 APIM Operator 在安裝期間建立的環境。環境名稱開頭會是前置字串 apigee-ext-proc-enabled-env
  5. 觀察記錄的 API 流量。

疑難排解

如果在 APIM Operator 中使用 API 管理政策時遇到問題,請參閱「排解 APIM Operator 問題」,瞭解常見錯誤的解決方法。

後續步驟