本頁內容適用於 Apigee,但不適用於 Apigee Hybrid。
查看
Apigee Edge 說明文件。
本頁說明如何修改叢集中執行的 Google Kubernetes Engine (GKE) Gateway,使用 Kubernetes 適用的 Apigee APIM Operator 套用 Apigee API 管理政策。
事前準備
開始這項工作前,請務必完成下列步驟:
- 確認 GKE 叢集已設定 Workload Identity。如需必要步驟,請參閱「建立工作負載身分」。
- 確認叢集已設定並正常運作 GKE Gateway。詳情請參閱「部署閘道」。
- 安裝 APIM Operator。如需安裝說明,請參閱「安裝 Kubernetes 適用的 Apigee APIM Operator」。
必要的角色
如果您已按照「 安裝 Kubernetes 適用的 Apigee APIM Operator」一文的說明,將必要角色指派給服務帳戶,則不需要其他 IAM 角色或權限即可完成這些工作。
您可以選擇使用 Kubernetes 內建的角色型存取權控管 (RBAC) 機制,授權在 Google Kubernetes Engine 叢集中的資源上執行動作。詳情請參閱「 使用角色型存取控制授權叢集中的動作」。
總覽
以下各節說明使用 APIM Operator 修改 GKE Gateway,以使用 Apigee 政策的必要步驟。在本逐步操作說明中,您將:
定義 APIM 擴充功能政策
在這個步驟中,您將定義 APIM 擴充功能政策,並套用至叢集中執行的 GKE Gateway。這項政策會控管通過閘道和相關聯 HTTPRoutes
的所有流量,運作方式與目前 Apigee 環境層級的流程掛鉤類似。
定義 APIM 擴充功能政策:
- 在
apim
命名空間中,建立名為global-ext-lb1-apim-policy.yaml
的新檔案。 - 將下列內容複製到新檔案中:
# 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 環境) 頁面中,查看所有可用環境:
- 套用政策:
kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml
套用
yaml
後,APIM 運算子會在背景建立網路資源。 - 使用下列指令檢查 API 擴充功能政策的狀態:
kubectl -n apim get APIMExtensionPolicy
輸出內容應如下所示,並顯示
State
的RUNNING
:NAME STATE ERRORMESSAGE global-ext-lb1-apim-policy RUNNING
- 使用下列指令將要求傳送至 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
中定義的主機名稱。
- 由於 API 擴充功能政策資源中已設定
defaultSecurityEnabled: true
,因此要求應會失敗,因為預設安全性已啟用。畫面會顯示類似以下的回應:{"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
這表示 Apigee 擴充功能政策已啟用,且 API 金鑰強制執行和存取權杖驗證也已啟用。
定義 API 產品
定義 API 產品:
- 在
apim
命名空間中,建立名為api-product.yaml
的新檔案。 - 將下列內容複製到新檔案中:
# 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
- 使用下列指令將檔案套用至閘道:
kubectl -n apim apply -f api-product.yaml
定義 API 作業集
定義在上一個步驟中建立的 API 產品適用的 API 作業集:
- 在
apim
命名空間中,建立名為apim-policies.yaml
的新檔案。 - 將下列內容複製到新檔案中。
這個檔案會定義配額政策,以及上一個步驟中定義的 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
- 將檔案套用至閘道:
kubectl -n apim apply -f apim-policies.yaml
測試 Apigee 服務擴充功能
在這個步驟中,您將使用 Google Cloud 控制台中的 Apigee UI,測試 Apigee 服務擴充功能,以及套用至 Gateway 的 Apigee 擴充功能政策。
測試設定
設定測試所需的 API 資源:
前往 Google Cloud 控制台的「Apigee API 管理」頁面:
- 選取您安裝 APIM 運算子的 Apigee 機構。
- 建立開發人員:
- 選取「發行」>「開發人員」。
- 在「開發人員」頁面中,按一下「+ 建立」。
- 在「新增開發人員」頁面中,使用任意值填寫必填欄位。
- 按一下「新增」。
- 建立應用程式:
- 選取「發布」>「應用程式」。
- 在「應用程式」頁面,按一下「+ 建立」
- 在「建立應用程式」頁面中,使用下列值填寫「應用程式詳細資料」區段中的必填欄位:
- 應用程式名稱:demo-app
- 開發人員:選取您在上一個步驟中建立的開發人員,或從清單中選取其他開發人員。
- 在「應用程式憑證」部分中,按一下「+ 新增憑證」。
- 在「憑證」部分,使用下列值填寫「憑證詳細資料」部分中的必填欄位:
- 憑證名稱:demo-credential
- 憑證類型:選取「API 金鑰」。
- 點選「建立」。
- 在「產品」部分中,按一下「+ 新增產品」。
- 選取上一個步驟中建立的
api-product-1
。 - 按一下「新增」。
- 點選「建立」。
- 在「應用程式詳細資料」頁面的「憑證」部分,按一下
visibility_off 即可顯示「金鑰」的值。
複製
Key
值。您會在後續步驟中使用這組金鑰,向服務發出 API 呼叫。 - 在「應用程式詳細資料」頁面的「憑證」部分,按一下 visibility_off 即可顯示「應用程式密鑰」的值。
複製「應用程式密鑰」值。您會在後續步驟中使用這個值產生存取權杖。
測試 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:
- 前往 Google Cloud 控制台的「Apigee API management」(Apigee API 管理) 頁面:
- 選取您安裝 APIM 運算子的 Apigee 機構。
- 在側邊導覽選單中,依序選取「Analytics」>「API 指標」。
- 在「API Proxy Performance」分頁中,選擇您在選用安裝步驟「建立 Apigee 環境」中建立的環境,或是 APIM Operator 在安裝期間建立的環境。環境名稱開頭會是前置字串
apigee-ext-proc-enabled-env
。 - 觀察記錄的 API 流量。
疑難排解
如果在 APIM Operator 中使用 API 管理政策時遇到問題,請參閱「排解 APIM Operator 問題」,瞭解常見錯誤的解決方法。