本頁內容適用於 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 運算子」中的步驟,安裝 Kubernetes 適用的 Apigee 運算子。
建立 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 金鑰: