基於 APISIX 的服務網格方案 Amesh 積極開發中!
作者@lingsamuel,API7.ai 雲原生技術專家,Apache APISIX Committer。
在雲原生快速發展的前提下,服務網格領域也開始逐漸火熱。目前階段,大家所熟知的服務網格解決方案很多,每種產品又各有其優勢。因此在面對不同的行業或者業務背景時,每個人的選型想法都各不相同。
Apache APISIX 是一個動態、實時、高效能的雲原生 API 閘道器,提供負載均衡、動態上游、灰度釋出、服務熔斷、身份認證、可觀測性等豐富的流量管理功能。基於 APISIX 的擴充套件道路上,除了 APISIX Ingress 在雲原生領域被各大廠商開始關注外,基於 APISIX 的服務網格方案也在積極迭代中。
基於 APISIX 的服務網格方案
Amesh 是 Apache APISIX 的服務網格庫。它適配了 xDS 協議,可以從諸如 Istio 的控制平面中接收資料,並生成 APISIX 所需的資料結構,使得 APISIX 能夠在服務網格領域作為資料面發揮作用。
依靠 Amesh,APISIX 可以工作在服務網格模式下,不使用傳統的 etcd 作為資料中心,而是使用 shdict 與 Amesh 庫直接進行資料交換,避免了額外的效能損耗,使得大規模部署成為可能。
通過使用 Amesh,可以在服務網格領域獲得 APISIX 具備的高效能、豐富的流量管理功能、易擴充套件性等多種優勢。
Amesh 的架構
Amesh 通過適配 xDS 協議,可以讓 APISIX 替代 Istio 所使用的 envoy 元件來接管叢集流量。在實際使用中,APISIX 將作為 Pod 的 Sidecar 接管網格內的所有流量。目前 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 也能正常使用 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 服務網格方案感興趣的朋友們進行嚐鮮。
- RESTful API 為何成為頂流 API 架構風格?
- APISIX Ingress 如何使用 Cert Manager 管理證書
- API 閘道器策略的二三事
- 服務網格領域的百花齊放,是否存在一個更優解?
- 馬蜂窩如何利用 APISIX 閘道器實現微服務架構升級
- 為什麼 APISIX Ingress 是比 Ingress NGINX 更好的選擇?
- 基於 APISIX 的服務網格方案 Amesh 積極開發中!
- 盤點微服務架構下的諸多身份驗證方式
- 2022 Apache APISIX 年度記憶
- APISIX Ingress 對 Gateway API 的支援和應用
- 為什麼 APISIX Ingress 是比 Traefik 更好的選擇?
- 當 Amazon Lambda 遇上 Apache APISIX 可以擦出什麼火花?
- 認證鑑權對於 API 閘道器的重要性
- 馬斯克都不懂的 GraphQL,API 閘道器又能對其如何理解?
- APISIX Ingress 如何支援自定義外掛
- Apache APISIX 玩轉 Tongsuo 國密外掛
- 如何基於 APISIX 迭代數字智聯平臺
- 譯文 | A poor man's API
- APISIX 在君潤人力雲原生平臺的架構實踐