本頁內容適用於 Apigee 和 Apigee Hybrid。
查看
Apigee Edge 說明文件。
本頁說明如何建立APIMExtensionPolicy自訂資源,將 Apigee 政策套用至通過 Kubernetes Gateway 的流量。Kubernetes 適用的 Apigee 運算子會監控 APIMExtensionPolicy 資源,並據此設定閘道。
Apigee
如果您使用 Apigee,請按照下列步驟操作。
事前準備
開始這項工作前,請先完成下列步驟:
- 確認 GKE 叢集已設定 Workload Identity。如需必要步驟,請參閱「設定 GKE 適用的工作負載身分聯盟」。
- 確認叢集已設定並正常運作 GKE Gateway。詳情請參閱「部署閘道」。
- 安裝 Kubernetes 適用的 Apigee 運算子。如需安裝操作說明,請參閱「安裝 Kubernetes 適用的 Apigee 運算子」。
建立 APIMExtensionPolicy
在本步驟中,請建立 APIMExtensionPolicy 並套用至叢集中執行的 GKE Gateway。這項政策會控管通過閘道的所有流量,以及相關聯的 HTTPRoutes,運作方式與目前 Apigee 環境層級的流程掛鉤類似。
建立 APIMExtensionPolicy 的方法如下:
- 建立名為
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 環境名稱。注意:如果您使用
generateEnv=TRUE旗標安裝 Kubernetes 適用的 Apigee Operator,則不必填寫apigeeEnv欄位。 - 套用政策:
kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml套用政策後,Kubernetes 適用的 Apigee Operator 會在背景建立網路資源。
- 使用下列指令檢查
APIMExtensionPolicy的狀態:kubectl -n apim get APIMExtensionPolicy輸出內容應如下所示,其中
STATE為RUNNING:NAME STATE ERRORMESSAGE global-ext-lb1-apim-policy RUNNING
測試政策
使用下列指令將要求傳送至 Gateway:
- 取得閘道 IP 位址:
export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -n default -o=jsonpath='{.status.addresses[0].value}')echo $GATEWAY_IP將
GATEWAY_NAME替換為閘道名稱,例如global-ext-lb1。 - 向
HTTPRoute中設定的端點傳送要求:curl http://$GATEWAY_IP/get -H "Host: HOST_NAME"將
HOST_NAME替換為閘道HTTPRoute中定義的主機名稱,例如example.httpbin.com。 - 由於
defaultSecurityEnabled: true已在APIMExtensionPolicy資源中設定,因此要求應該會失敗,因為這會啟用 API 金鑰和存取權杖驗證。畫面會顯示類似以下的回應:{"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}這表示 Apigee 擴充功能政策已啟用,且 API 金鑰強制執行和存取權杖驗證功能也已啟用。
後續步驟
Apigee Hybrid
如果您使用 Apigee Hybrid,請按照下列步驟操作。
事前準備
本程序假設您已按照「安裝 Apigee Hybrid 適用的 Kubernetes 版 Apigee Operator」中的步驟,安裝 Kubernetes 版 Apigee Operator。
建立 TLS 憑證密鑰
APIMExtensionPolicy 需要與環境群組主機名稱相關聯的 base64 編碼公開憑證。您在「使用 Helm 安裝 Apigee Hybrid 環境」中建立這個憑證。在 apim 命名空間中建立 Kubernetes 密鑰,向運算子提供這個憑證。
- 從安裝期間建立的檔案取得 Base64 編碼憑證字串:
cat $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_ENV_GROUP.pem.base64 - 建立名為
secret-cert.yaml的檔案,並在當中加入下列內容:# secret-cert.yaml apiVersion: v1 kind: Secret metadata: name: apigee-conf namespace: apim data: ca.crt: BASE64_ENCODED_CERT_STRING - 將
BASE64_ENCODED_CERT_STRING替換為步驟 1 中cat指令的輸出內容。 - 將密鑰套用至叢集:
kubectl apply -f secret-cert.yaml
定義及套用APIMExtensionPolicy
定義 APIMExtensionPolicy 資源,並將其套用至叢集中執行的 Istio Gateway。這項政策擴充功能會攔截閘道管理的流量及其相關聯的 HTTPRoutes,並套用 Apigee 政策,然後將要求轉送至後端目標。
- 建立名為
istio-gateway-apim-policy.yaml的檔案,並在當中加入下列內容:# istio-gateway-apim-policy.yaml apiVersion: apim.googleapis.com/v1 kind: APIMExtensionPolicy metadata: name: istio-gateway-apim-policy namespace: apim spec: apigeeEnv: ENV_NAME ingressCertSecret: apigee-conf apigeeAuthority: HOST_NAME apigeeIngressIP: INGRESS_IP_ADDRESS location: global failOpen: false timeout: 1000ms defaultSecurityEnabled: true targetRef: # identifies the Gateway where the extension should be applied group: gateway.networking.k8s.io kind: Gateway name: istio-gateway namespace: default - 請替換下列變數:
ENV_NAME:您建立的 Apigee Hybrid 環境名稱,且已啟用服務擴充功能,例如my-hybrid-env。HOST_NAME:用於環境群組的網域名稱,例如my-proxies.example.com。INGRESS_IP_ADDRESS:Apigee Hybrid 執行階段 Ingress 的 Ingress IP 位址。如要瞭解如何擷取這個 IP,請參閱「公開 Apigee Ingress」。
- 將政策套用至叢集:
kubectl -n apim apply -f istio-gateway-apim-policy.yaml - 資源套用後,Kubernetes 適用的 Apigee 運算子會開始設定閘道網路資源。檢查
APIMExtensionPolicy的狀態:kubectl -n apim get APIMExtensionPolicy - 等待
STATE顯示為RUNNING。輸出內容應如下所示:NAME STATE ERRORMESSAGE istio-gateway-apim-policy RUNNING
測試政策
在上一個步驟中建立的 APIMExtensionPolicy 中,defaultSecurityEnabled 已設為 true。這會自動為符合此閘道的流量啟用 API 金鑰和 OAuth2 權杖驗證政策。如要測試這項功能,請將未經驗證的要求傳送至您在「驗證 Istio 閘道設定」中設定的範例 httpbin 服務。
- 取得閘道 IP 位址:
export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io istio-gateway -n default -o=jsonpath='{.status.addresses[0].value}')echo $GATEWAY_IP - 將要求傳送至 HTTPRoute 中設定的
/get端點:curl http://$GATEWAY_IP/get -H "Host: example.httpbin.com" -v - 由於
defaultSecurityEnabled: true需要驗證 (例如有效的 API 金鑰),Apigee 應拒絕要求並傳回驗證錯誤。回覆內容應如下所示:{"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}這項輸出內容確認
APIMExtensionPolicy處於啟用狀態,且 Istio Gateway 正在強制執行 Apigee 政策。
後續步驟
瞭解如何建立 API 產品、開發人員和應用程式,以取得用於驗證要求的 API 金鑰: