基於 APISIX 的服務網格方案 Amesh 積極開發中!

語言: CN / TW / HK

作者@lingsamuel,API7.ai 雲原生技術專家,Apache APISIX Committer。

在雲原生快速發展的前提下,服務網格領域也開始逐漸火熱。目前階段,大家所熟知的服務網格解決方案很多,每種產品又各有其優勢。因此在面對不同的行業或者業務背景時,每個人的選型想法都各不相同。

Apache APISIX 是一個動態、實時、高性能的雲原生 API 網關,提供負載均衡、動態上游、灰度發佈、服務熔斷、身份認證、可觀測性等豐富的流量管理功能。基於 APISIX 的擴展道路上,除了 APISIX Ingress 在雲原生領域被各大廠商開始關注外,基於 APISIX 的服務網格方案也在積極迭代中。

基於 APISIX 的服務網格方案

AmeshApache APISIX 的服務網格庫。它適配了 xDS 協議,可以從諸如 Istio 的控制平面中接收數據,並生成 APISIX 所需的數據結構,使得 APISIX 能夠在服務網格領域作為數據面發揮作用。

依靠 Amesh,APISIX 可以工作在服務網格模式下,不使用傳統的 etcd 作為數據中心,而是使用 shdict 與 Amesh 庫直接進行數據交換,避免了額外的性能損耗,使得大規模部署成為可能。

通過使用 Amesh,可以在服務網格領域獲得 APISIX 具備的高性能、豐富的流量管理功能、易擴展性等多種優勢。

Amesh 的架構

Amesh 通過適配 xDS 協議,可以讓 APISIX 替代 Istio 所使用的 envoy 組件來接管集羣流量。在實際使用中,APISIX 將作為 Pod 的 Sidecar 接管網格內的所有流量。目前 Amesh 的架構如下圖所示:

Amesh 架構

通過架構圖可以看到,通過 xDS 協議,Amesh 可以將 Istio 作為控制面,從 Istio 側獲取配置信息,並將其轉義為 APISIX 所需的配置。

而網格內部的所有流量都將由 APISIX 接管。其中,APISIX 的配置中心被設置為 Amesh,這使得 APISIX 脱離 etcd 的依賴。Amesh 為 APISIX 提供了一種從 xDS 協議中獲取配置信息的方式。

此外,Amesh 在 v0.2 中提供了額外的可選控制面組件:amesh-controller。Amesh controller 增加了 Amesh 專用的 CRD,可以為 APISIX 配置一些 Istio 所不支持的額外功能。額外帶有 amesh-controller 的架構如下圖所示:

amesh-controller 架構

正如前文所提到的,Amesh controller 是可選組件。在未安裝時,Amesh 也能正常使用 Istio 的原生能力提供服務。在安裝了 amesh-controller 後,Amesh 能自動檢測到控制面的加入,並動態地從中獲取配置,而無需重啟。

Amesh controller 為 Amesh 提供了 Istio 無法提供的 APISIX 特有功能。例如在安裝 amesh-controller 後,用户能為服務配置 APISIX 原生具備的海量插件。

Amesh 發展狀態

目前 Amesh 項目正在積極開發中。在最近發佈的的 v0.2 版本中,Amesh 新增了可選的控制面 amesh-controller 組件,為 Amesh 提供了 APISIX 所支持的強大的插件系統,大大增強了 Amesh 的可擴展性。

擴展能力

在使用 Amesh 時,如果是常規的 Istio 部署,用户則可以通過 Lua 或 Wasm 來對 envoy 進行功能擴展。

與 Envoy 原生能力相比,APISIX 官方即支持插件擴展能力,維護了 80+ 的插件可供用户使用,許多功能已經原生集成。但由於在 Istio 中,不能對這些插件進行配置,無法直接使用這些插件所提供的能力。

為此,Amesh v2.0 版本新增了一個控制面組件,即前文提到的 amesh-controller。它為用户提供了配置 APISIX 插件的能力,使 APISIX 眾多的插件在服務網格場景下也能開箱即用,而無需用户進行自定義的開發。

應用示例

在 Amesh v0.2 版本中,可以通過安裝 amesh-controller 並使用提供的 AmeshPluginConfig CRD 來進行 APISIX 的插件配置。

例如,我們可以為請求的響應添加特定的 header,這裏可以通過配置 APISIX 的 response-rewrite 插件實現。

假設我們需要添加的 header 為 X-Header,其值為 AddedHeader,我們可以配置如下的 AmeshPluginConfig,此時請求的響應中就會帶上我們所需的 header。

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

總結

在本文中,我們簡單介紹了 Amesh 的架構,以及在 v0.2 版本中提供的 amesh-controller 所帶來的架構變更,可以更好地幫助用户理解 Amesh 的工作原理。

在當下技術發展趨勢中,服務網格勢必是未來的流行趨勢。雖然現在各種方案都還不太完善,但整體都屬於螺旋上升的狀態。當然,基於 APISIX 的服務網格也正朝着大家心目中的理想型服務網格解決方案奮進,也歡迎各位對 APISIX 服務網格方案感興趣的朋友們進行嚐鮮。