建立 APIMExtensionPolicy

本頁內容適用於 ApigeeApigee Hybrid

查看 Apigee Edge 說明文件。

本頁說明如何建立APIMExtensionPolicy自訂資源,將 Apigee 政策套用至通過 Kubernetes Gateway 的流量。Kubernetes 適用的 Apigee 運算子會監控 APIMExtensionPolicy 資源,並據此設定閘道。

Apigee

如果您使用 Apigee,請按照下列步驟操作。

事前準備

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

建立APIMExtensionPolicy

在本步驟中,請建立 APIMExtensionPolicy 並套用至叢集中執行的 GKE Gateway。這項政策會控管通過閘道的所有流量,以及相關聯的 HTTPRoutes,運作方式與目前 Apigee 環境層級的流程掛鉤類似。

建立 APIMExtensionPolicy 的方法如下:

  1. 建立名為 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
        
  2. ENV_NAME 替換為在安裝步驟「建立 Apigee 環境」中建立的 Apigee 環境名稱。

    注意:如果使用 generateEnv=TRUE 旗標安裝 Kubernetes 適用的 Apigee Operator,則不必填寫 apigeeEnv 欄位。

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

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

    套用政策後,Kubernetes 適用的 Apigee Operator 會在背景建立網路資源。

  4. 使用下列指令檢查 APIMExtensionPolicy 的狀態:
    kubectl -n apim get APIMExtensionPolicy
        

    輸出內容應如下所示,且 STATERUNNING

    NAME                         STATE      ERRORMESSAGE
    global-ext-lb1-apim-policy   RUNNING
        

測試政策

使用下列指令將要求傳送至 Gateway:

  1. 取得閘道 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

  2. HTTPRoute 中設定的端點傳送要求:
    curl http://$GATEWAY_IP/get -H "Host: HOST_NAME"
          

    HOST_NAME 替換為閘道 HTTPRoute 中定義的主機名稱,例如 example.httpbin.com

  3. 由於 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 密鑰,向運算子提供這項憑證。

  1. 從安裝期間建立的檔案取得 Base64 編碼憑證字串:
    cat $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_ENV_GROUP.pem.base64
        
  2. 建立名為 secret-cert.yaml 的檔案,並在當中加入下列內容:
    # secret-cert.yaml
    apiVersion: v1
    kind: Secret
    metadata:
      name: apigee-conf
      namespace: apim
    data:
      ca.crt: BASE64_ENCODED_CERT_STRING
        
  3. BASE64_ENCODED_CERT_STRING 替換為步驟 1 中 cat 指令的輸出內容。
  4. 將密鑰套用至叢集:
    kubectl apply -f secret-cert.yaml
        

定義及套用APIMExtensionPolicy

定義 APIMExtensionPolicy 資源,並將其套用至叢集中執行的 Istio Gateway。這項政策擴充功能會攔截閘道管理的流量及其相關聯的 HTTPRoutes,並套用 Apigee 政策,然後將要求轉送至後端目標。

  1. 建立名為 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
        
  2. 替換下列變數:
    • ENV_NAME:您建立的 Apigee Hybrid 環境名稱 (已啟用服務擴充功能),例如 my-hybrid-env
    • HOST_NAME:用於環境群組的網域名稱,例如 my-proxies.example.com
    • INGRESS_IP_ADDRESS:Apigee Hybrid 執行階段 Ingress 的 Ingress IP 位址。如要瞭解如何擷取這個 IP,請參閱「公開 Apigee Ingress」。
  3. 將政策套用至叢集:
    kubectl -n apim apply -f istio-gateway-apim-policy.yaml
        
  4. 資源套用後,Kubernetes 適用的 Apigee 運算子會開始設定閘道網路資源。檢查 APIMExtensionPolicy 的狀態:
    kubectl -n apim get APIMExtensionPolicy
        
  5. 等待 STATE 顯示為 RUNNING。輸出內容應如下所示:
    NAME                         STATE      ERRORMESSAGE
    istio-gateway-apim-policy    RUNNING
        

測試政策

在上一個步驟中建立的 APIMExtensionPolicy 中,defaultSecurityEnabled 已設為 true。這會自動為符合此閘道的流量啟用 API 金鑰和 OAuth2 權杖驗證政策。如要測試這項功能,請將未經驗證的要求傳送至您在「驗證 Istio 閘道設定」中設定的範例 httpbin 服務。

  1. 取得閘道 IP 位址:
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io istio-gateway -n default -o=jsonpath='{.status.addresses[0].value}')
        
    echo $GATEWAY_IP
        
  2. 將要求傳送至 HTTPRoute 中設定的 /get 端點:
    curl http://$GATEWAY_IP/get -H "Host: example.httpbin.com" -v
        
  3. 由於 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 金鑰: