您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
新增自訂外掛程式
您可以編寫自訂外掛程式,為微型閘道新增功能。透過自訂外掛程式,您可以透過程式輔助方式,與流經微型閘道的請求和回應互動。
本節說明如何將外掛程式封裝及部署至 Kubernetes 叢集中執行的 Edge Microgateway 執行個體。
本節的其餘部分假設您已熟悉如何為標準 Edge Microgateway 設定編寫及設定外掛程式。如果沒有,請參閱「開發自訂外掛程式」。
封裝外掛程式
如要封裝自訂外掛程式,請按照下列步驟操作:
按照「撰寫簡單的外掛程式」中的指示,編寫及測試外掛程式。
將外掛程式碼放在適當的目錄結構中。外掛程式目錄必須遵循特定結構。以下範例顯示您必須遵循的結構,其中
response-uppercase和request-headers是包含自訂外掛程式碼的資料夾名稱 (這些名稱僅為範例,您的資料夾名稱可能不同):plugin | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.jsoncd至plugin資料夾。在
plugin資料夾中,將整個plugins資料夾壓縮成 ZIP 檔案:zip -r plugins.zip plugins/
建立 Docker 映像檔
- 在 ZIP 檔案所在的目錄中,建立名為
Dockerfile的新檔案。 將下列程式碼新增至
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"]使用外掛程式建立新的 Edge Microgateway Docker 映像檔,然後將映像檔推送至 Docker 登錄檔。您可以選擇使用任何登錄檔,例如
docker.io或gcr.io:docker build -t edgemicroplugins .docker tag edgemicroplugins container-registry/your-project/edgemicropluginsdocker push container-registry/your-project/edgemicroplugins例如:
docker build -t edgemicroplugins .docker tag edgemicroplugins gcr.io/my-project/edgemicropluginsdocker push gcr.io/my-project/edgemicroplugins
更新 Edge Microgateway 設定
將外掛程式新增至 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 會從容器登錄檔提取您推送的外掛程式程式碼,並用於任何新建立的 Pod。
如果 Edge Microgateway 是以服務形式部署
使用 edgemicroctl 指令插入更新的 Edge Microgateway 設定:
使用新映像檔更新 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.io或docker.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)
測試外掛程式。呼叫 API,確認是否出現預期行為。舉例來說,如果是「response uppercase」外掛程式,回應文字會全部轉換為大寫,如下所示:
curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'
輸出內容:
HELLO WORLD
手動注入新設定
手動注入是簡單明瞭的方法,您可從指令列注入新設定。
執行下列指令:
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.io或docker.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)
測試外掛程式。呼叫服務 API,確認是否出現預期行為。舉例來說,如果是「response uppercase」外掛程式,回應文字會轉換為全大寫,如下所示:
curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'
輸出內容:
HELLO WORLD
變更 Edge Microgateway 設定
在某些情況下,您可能需要修改 Edge Microgateway 設定。舉例來說,您可能想在 Edge Microgateway 中新增外掛程式,或是變更設定參數。本節說明如何對在 Kubernetes 中執行的 Edge Microgateway 進行及套用設定變更。
建立設定檔
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指定
EDGEMICRO_ORG、EDGEMICRO_ENV、EDGEMICRO_KEY、EDGEMICRO_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'為貴機構和環境變更 Edge Microgateway 設定檔:
$HOME/.edgemicro/your_org-your_env-config.yaml
對設定檔內容進行兩次 Base64 編碼:
cat $HOME/.edgemicro/org-env-config.yaml | base64 | tr -d '\n' | base64 | tr -d '\n'
在服務執行的命名空間中,將變更套用至 Kubernetes。
kubectl apply -f secret.yaml -n
現有的微閘道 Pod 不會自動採用這些新變更,但新的 Pod 會採用。您可以刪除現有 Pod,讓部署作業建立新的 Pod,以反映變更。
服務範例
以下範例說明如何使用新的服務 Deployment 更新服務 Deployment
取得 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刪除
edge-microgatewayPod。kubectl delete pod edge-microgateway-57ccc7776b-g7nrg
輸出內容範例:
pod "edge-microgateway-57ccc7776b-g7nrg" deleted再次取得膠囊。系統會啟動新的 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 調度原則來調度部署作業的資源。
調度服務部署作業
檢查部署作業:
kubectl get deployments
輸出內容範例:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE edge-microgateway 1 1 1 1 18h helloworld 1 1 1 1 1d輸出內容會顯示已部署一個副本。
將部署作業從 1 個備用資源擴充至任意數量。在本範例中,
edge-microgateway服務會進行調整。kubectl scale deployment edge-microgateway --replicas=2
(選用) 如要使用自動調度資源,請使用下列指令:
kubectl autoscale deployment edge-microgateway --cpu-percent=50 --min=1 --max=10
檢查部署作業,確認已啟用調整大小功能:
kubectl get deployments
輸出內容範例:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE edge-microgateway 2 2 2 2 18h helloworld 1 1 1 1 1d狀態已變更為包含兩個副本。
檢查 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
您可以將多個 Edge Microgateway 服務執行個體部署及設定至 Kubernetes 叢集。這個用途可讓您為每個微閘道執行個體設定專屬的外掛程式和參數。例如:
- Edge Microgateway 服務 A 只需要尖峰流量防護外掛程式。
- Edge Microgateway 服務 B 需要配額和 OAuth 外掛程式,但不需要尖峰流量防護。
如要解決這個用途,請使用 Kubernetes 命名空間。舉例來說,您可以將 Edge Microgateway 服務 A 部署至命名空間 foo,並將 Edge Microgateway 服務 B 部署至命名空間 bar。
在下列範例中,組織 OrgA 中設定的 Edge Microgateway 會使用 -n 選項,以服務形式部署至命名空間 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
同樣地,在下列範例中,使用 -n 選項,將在機構 OrgB 中設定的 Edge Microgateway,部署為命名空間 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