建立 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 Operator」中的步驟,安裝 Kubernetes 版 Apigee Operator。

建立 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 金鑰: