Kubernetes 整合工作

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

新增自訂外掛程式

您可以透過編寫自訂外掛程式,為微閘道新增功能。自訂外掛程式可讓您透過程式輔助的方式,與通過微閘道的要求和回應互動。

本節說明如何將外掛程式封裝並部署至在 Kubernetes 叢集中執行的 Edge Microgateway 執行個體。

本節的其餘部分假設您已熟悉為標準 Edge Microgateway 設定的外掛程式編寫及設定外掛程式。如果沒有,請參閱「開發自訂外掛程式」。

封裝外掛程式

如要封裝自訂外掛程式,請按照下列步驟操作:

  1. 根據編寫簡易外掛程式中的指示編寫並測試外掛程式。

  2. 將外掛程式程式碼放在適當的目錄結構中。外掛程式目錄必須採用一組結構。以下範例顯示您必須遵循的結構,其中 response-uppercaserequest-headers 是包含自訂外掛程式程式碼的資料夾名稱 (這些名稱只是範例,您的資料夾名稱可能會有所不同):

    plugin
      |
      |-- plugins
        |
        |- response-uppercase
        |     |- index.js
        |     |- package.json
        |- request-headers
        |     | - index.js
              | - package.json
    
  3. cd 寫入 plugin 資料夾。

  4. plugin 資料夾中,壓縮整個 plugins 資料夾:

    zip -r plugins.zip plugins/

建立 Docker 映像檔

  1. 在 ZIP 檔案所在的目錄中,建立名為 Dockerfile 的新檔案。
  2. 將下列程式碼新增至 Dockerfile,然後儲存檔案:

    FROM gcr.io/apigee-microgateway/edgemicro:latest
    RUN apt-get install unzip
    COPY plugins.zip /opt/apigee/
    RUN chown apigee:apigee /opt/apigee/plugins.zip
    RUN su - apigee -c "unzip /opt/apigee/plugins.zip -d /opt/apigee"
    EXPOSE 8000
    EXPOSE 8443
    ENTRYPOINT ["entrypoint"]
    
  3. 使用外掛程式建立新的 Edge Microgateway Docker 映像檔,並將映像檔推送至 Docker Registry。您可以使用任何想要的註冊資料庫,例如 docker.iogcr.io

    docker build -t edgemicroplugins .
    docker tag edgemicroplugins container-registry/your-project/edgemicroplugins
    docker push container-registry/your-project/edgemicroplugins
    

    例如:

    docker build -t edgemicroplugins .
    docker tag edgemicroplugins gcr.io/my-project/edgemicroplugins
    docker push   gcr.io/my-project/edgemicroplugins
    

更新 Edge Microgateway 設定

  1. 將外掛程式新增至 Edge Microgateway 設定檔。您可以在以下位置找到設定檔:

    $HOME/.edgemicro/org-env-config.yaml
    

    例如:

    $HOME/.edgemicro/myorg-test-config.yaml

在以下範例設定中,已新增自訂外掛程式 response-uppercase。根據預設,oauth 外掛程式已內建於該外掛程式。

  edgemicro:
    ...
    plugins:
      sequence:
        - oauth
        - response-uppercase

更新 Kubernetes 叢集

最後一個步驟是將設定變更套用至 Kubernetes 叢集。Kubernetes 會使用您推送至 Container Registry 的外掛程式程式碼提取新的映像檔,並針對任何新建立的 Pod 使用這個外掛程式。

如果您已將 Edge Microgateway 部署為服務

使用 edgemicroctl 指令插入更新後的 Edge Microgateway 設定:

  1. 使用新映像檔更新 Edge Microgateway 部署作業。例如:

    kubectl apply -f <(edgemicroctl -org=your_organization -env=your_environment -key=configuration_key -sec=configuration_secret -conf=config_file_path -img=container-registry/your_project_name/image_name:latest)

    其中:

    • your_organization - 您在 edgemicro configure 指令中指定的 Apigee 機構。
    • your_environment - 您在 edgemicro configure 指令中指定的環境。
    • configuration_key - edgemicro configure 指令傳回的金鑰。
    • configuration_secret - edgemicro configure 指令傳回的密鑰。
    • config_file_path - 從 edgemicro configure 指令傳回的 Edge Micro 設定檔路徑。
    • container-registry:您推送映像檔的 Docker 註冊資料庫。例如 gcr.iodocker.io
    • your_project_name - 推送 Docker 映像檔的 Docker 存放區專案名稱。
    • image_name:您推送的 Docker 映像檔名稱。

    示例:

    kubectl apply -f <(edgemicroctl -org=jdoe -env=test -key=f2d2eaa52b758493d00cec656e574ac947bee1d701c5c5f3295e5eaa39a3b -sec=0c38cda3fac6c59152f15657052ba1728f8003c1a763cf08da2a -conf=/Users/jdoe/.edgemicro/apigeesearch-test-config.yaml -img=gcr.io/jdoe-project/edgemicroplugins:latest)
  2. 測試外掛程式。呼叫 API,查看是否獲得預期行為。舉例來說,針對「回應大寫」外掛程式,回應文字會轉換為全部大寫,如下所示:

    curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'

    輸出內容:

    HELLO WORLD
    
手動插入新設定

手動插入是一種簡單明瞭的方法,可讓您從指令列插入新設定。

  1. 執行下列指令:

    kubectl apply -f <(edgemicroctl -org=your_org -env=your_env -key=your_key -sec=your_secret -conf=config_file_path -img=container-registry/your_project_name/image_name:latest -svc=service_deployment_file)

    其中:

    • your_org - 您在 edgemicro configure 指令中指定的 Apigee 機構。
    • your_env - 您在 edgemicro configure 指令中指定的環境。
    • your_key - edgemicro configure 指令傳回的金鑰。
    • your_secret - edgemicro configure 指令傳回的密鑰。
    • config_file_path - 從 edgemicro configure 指令傳回的 Edge Micro 設定檔路徑。
    • container-registry:您推送映像檔的 Docker 註冊資料庫。例如 gcr.iodocker.io
    • your_project_name - 推送 Docker 映像檔的 Docker 存放區專案名稱。
    • image_name:您推送的 Docker 映像檔名稱。
    • service_deployment_file:要套用外掛程式的服務部署檔案路徑。例如:samples/helloworld/helloworld.yaml

    例如:

    kubectl apply -f <(edgemicroctl -org=myorg -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/jdoe/.edgemicro/myorg-test-config.yaml -img=gcr.io/myproject/edgemicroplugins:latest -svc=samples/helloworld/helloworld.yaml)
  2. 測試外掛程式。呼叫服務 API,看看是否達到預期行為。舉例來說,針對「回應大寫」外掛程式,回應文字會轉換為全部大寫,如下所示:

    curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'

    輸出內容:

    HELLO WORLD
    

變更 Edge Microgateway 設定

在某些情況下,您可能需要修改 Edge Microgateway 設定。舉例來說,您可能會想要新增外掛程式至 Edge Microgateway,或是變更設定參數。本節說明如何對在 Kubernetes 中執行的 Edge Microgateway 的設定變更及套用設定變更。

  1. 建立設定檔 secret.yaml,如下所示:

    apiVersion: v1
    kind: Secret
    metadata:
      name: mgwsecret
    type: Opaque
    data:
      mgorg: EDGEMICRO_ORG
      mgenv: EDGEMICRO_ENV
      mgkey: EDGEMICRO_KEY
      mgsecret: EDGEMICRO_SECRET
      mgconfig: EDGEMICRO_CONFIG
    
  2. 指定 EDGEMICRO_ORGEDGEMICRO_ENVEDGEMICRO_KEYEDGEMICRO_SECRET 的 Base64 編碼值:

    echo -n "your-org" | base64 | tr -d '\n'
    echo -n "your-org-env" | base64 | tr -d '\n'
    echo -n "your-mg-key" | base64 | tr -d '\n'
    echo -n "your-mg-secret" | base64 | tr -d '\n'
    
  3. 為貴機構和環境變更「Edge Microgateway」設定檔

    $HOME/.edgemicro/your_org-your_env-config.yaml
  4. Base64 將設定檔內容編碼為兩倍:

    cat $HOME/.edgemicro/org-env-config.yaml | base64 | tr -d '\n' | base64  | tr -d '\n'
  5. 將變更套用至執行服務的命名空間上的 Kubernetes。

    kubectl apply -f secret.yaml -n 

現有的微閘道 Pod 不會自動接收這些新的變更,但新的 Pod 會收到變更。您可以刪除現有 Pod,以便部署建立新的 Pod 來接收變更。

服務範例

以下範例說明如何使用新的

  1. 取得 Pod。

    kubectl get pods

    輸出內容範例:

    NAME                                 READY     STATUS    RESTARTS   AGE
    edge-microgateway-57ccc7776b-g7nrg   1/1       Running   0          19h
    helloworld-6987878fc4-cltc2          1/1       Running   0          1d
    
  2. 刪除 edge-microgateway Pod。

    kubectl delete pod edge-microgateway-57ccc7776b-g7nrg

    輸出內容範例:

    pod "edge-microgateway-57ccc7776b-g7nrg" deleted
    
  3. 再次取得 Pod。系統會啟動新的 Pod,並取得您的設定變更。

    kubectl get pods

    輸出內容範例:

    NAME                                 READY     STATUS    RESTARTS   AGE
    edge-microgateway-57ccc7776b-7f6tc   1/1       Running   0          5s
    helloworld-6987878fc4-cltc2          1/1       Running   0          1d
    

調度部署資源

本節說明如何使用 Kubernetes 的資源調度原則來調度部署的資源。

調度服務部署的資源

  1. 檢查部署作業:

    kubectl get deployments

    輸出內容範例:

    NAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    edge-microgateway   1         1         1            1           18h
    helloworld          1         1         1            1           1d
    

    輸出內容表示已部署一個備用資源。

  2. 視需求將部署作業從 1 擴充為多個備用資源。在這個範例中,edge-microgateway 服務已調整資源配置。

    kubectl scale deployment edge-microgateway --replicas=2
  3. (選用) 如要使用自動調度資源功能,請使用下列指令:

    kubectl autoscale deployment edge-microgateway --cpu-percent=50 --min=1 --max=10
  4. 檢查部署作業,確認資源調度已啟用:

    kubectl get deployments

    輸出內容範例:

    NAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    edge-microgateway   2         2         2            2           18h
    helloworld          1         1         1            1           1d
    

    狀態已變更為包含兩個備用資源。

  5. 檢查 Pod:

    kubectl get pods

    輸出內容範例:

    NAME                                 READY     STATUS    RESTARTS   AGE
    edge-microgateway-57ccc7776b-g7nrg   1/1       Running   0          18h
    edge-microgateway-57ccc7776b-rvfz4   1/1       Running   0          41s
    helloworld-6987878fc4-cltc2          1/1       Running   0          1d
    

    輸出內容會顯示兩個備用資源都處於執行中狀態。

針對多項 Edge Microgateway 設定使用命名空間

您可以在 Kubernetes 叢集中部署及設定 Edge Microgateway 服務的多個執行個體。這個用途可讓您為每個 Migateway 執行個體設定專屬的外掛程式和參數組合。例如:

  • Edge Microgateway Service A 只需要使用尖峰值逮捕外掛程式外掛程式。
  • Edge Microgateway Service B 需要配額和 OAuth 外掛程式,但不能執行尖峰流量防範。

如要解決這個用途,請使用 Kubernetes 命名空間。舉例來說,您可以將 Edge Microgateway Service A 部署至 foo 命名空間,並將 Edge Microgateway Service B 部署至 bar 命名空間。

以下範例使用 -n 選項,將機構 OrgA 中設定的 Edge Microgateway 服務部署至 foo 命名空間:

kubectl apply -f <(edgemicroctl -org=myorgA -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/joed/.edgemicro/orgA-test-config.yaml -svc=samples/helloworld/helloworld.yaml) -n foo

同樣地,在以下範例中,機構 OrgB 中設定的 Edge Microgateway 會使用 -n 選項以服務的形式部署至 bar 命名空間:

kubectl apply -f <(edgemicroctl -org=myorgB -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/joed/.edgemicro/orgB-test-config.yaml -svc=samples/helloworld/helloworld.yaml) -n bar