服務網格|如何使用 Amesh 配置外掛

Apache_APISIX發表於2023-01-18
作者@lingsamuel,API7.ai 雲原生技術專家,Apache APISIX Committer。

在上一篇 Amesh 產品介紹中,我們有提到在 Amesh v2.0 版本新增了一個可選的控制面元件,即 amesh-controller 及相應的 CRD。Amesh controller 為使用者提供了配置 APISIX 外掛的能力,使 APISIX 眾多的外掛在服務網格場景下也能開箱即用,而無需使用者進行自定義的開發。

那麼如何使用這些元件,來進行 APISIX 外掛能力的使用呢?本文在假設已經成功安裝 Amesh 後,如何在 Amesh 中進行部署、配置和更新外掛等操作。

部署 Amesh Controller 與 CRD

使用如下命令部署 Amesh Controller 與 CRD:

cd controller
kubectl apply -k ./config/crd/
helm install amesh-controller -n istio-system ./charts/amesh-controller

預設情況下,Amesh 將會自動連線到位於 istio-system namespace 下的 amesh-controller 服務 15810 埠,而無需重啟 Sidecar。

如需自定義,可以使用 AMESH_GRPC_SOURCE 環境變數進行配置。該變數預設值為 "grpc://amesh-controller.istio-system.svc:15810",按需指定到對應的 amesh-controller 即可。

部署示例應用

這裡我們以 Istio 提供的 Bookinfo 應用為測試用例。

# 在 Istio 目錄下執行
kubectl -n test apply -f samples/bookinfo/platform/kube/bookinfo.yaml
kubectl -n test run consumer --image curlimages/curl --image-pull-policy IfNotPresent --command sleep 1d

測試是否能夠正常訪問:

kubectl -n test exec -it -c istio-proxy consumer -- curl -i -XGET "http://productpage:9080/productpage" | grep -o "<title>.*</title>"

輸出細節類似如下所示:

<title>Simple Bookstore App</title>

配置示例外掛

本文將以 response-rewrite 外掛為例進行演示。首先為叢集應用下列示例配置:

apiVersion: apisix.apache.org/v1alpha1
kind: AmeshPluginConfig
metadata:
  name: ameshpluginconfig-sample
spec:
  plugins:
    - name: response-rewrite
      config: '{"body": "BODY_REWRITE", "headers": {"X-Header":"Rewrite"}}'

嘗試訪問測試負載:

kubectl -n test exec -it -c istio-proxy consumer -- curl -i -XGET "http://productpage:9080/productpage"

輸出細節應該包含如下內容:

Via: APISIX
Server: APISIX/2.15.0
X-Header: Rewrite

BODY_REWRITE

更新外掛配置

將示例 AmeshPluginConfig 檔案修改為如下,移除 Body 配置:

apiVersion: apisix.apache.org/v1alpha1
kind: AmeshPluginConfig
metadata:
  name: ameshpluginconfig-sample
spec:
  plugins:
  - name: response-rewrite
    config: '{"headers": {"X-Header":"Rewrite"}}'

再次請求測試負載:

kubectl -n test exec -it -c istio-proxy consumer -- curl -i -XGET "http://productpage:9080/productpage" | grep -o "<title>.*</title>"

輸出應該包含如下內容:

<title>Simple Bookstore App</title>

這表明響應 Body 沒有被重寫,符合我們的預期。
下面的命令可以驗證 Header 是否被正常重寫:

kubectl -n test exec -it -c istio-proxy consumer -- curl -i -XGET "http://productpage:9080/productpage" | grep "X-Header"

輸出內容如下所示:

X-Header: Rewrite

其他場景

除了上文演示的 response-rewrite 外掛之外,Amesh 還支援配置 APISIX 的所有外掛。使用者可以根據需要進行配置。

例如,當需要進行故障注入時,只需要將配置中的外掛名改為 fault-injection,外掛配置改為 '{"abort": { "http_status": 200, "body": "Fault Injection!" }' 即可實現,具體如下所示:

apiVersion: apisix.apache.org/v1alpha1
kind: AmeshPluginConfig
metadata:
  name: faultinjection-sample
spec:
  plugins:
  - name: fault-injection
    config: '{"abort": { "http_status": 200, "body": "Fault Injection!" }'

總結

本文以 response-rewrite 外掛為例,演示了 Amesh v0.2 版本新增的外掛配置功能。在實際使用中,使用者可以根據需要,為 Amesh 配置適合的 APISIX 中已有的外掛。也歡迎各位在實踐中進行體驗,並反饋更多關於服務網格的想法。

相關文章