作者@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 中已有的外掛。也歡迎各位在實踐中進行體驗,並反饋更多關於服務網格的想法。