基於 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 服務網格方案感興趣的朋友們進行嚐鮮。