本文可以為正在選型 Kubernetes Ingress Controller 產品的用戶提供一些幫助。
作者張晉濤,API7.ai 云原生專家,Apache APISIX Committer、Kubernetes Ingress Nginx Reviewer
Apache APISIX Ingress 是一個使用 Apache APISIX 作為數據面的 Kubernetes Ingress controller 實現。
目前,它支持多種規則的配置方式,包括 Ingress、APISIX Ingress CRD (自定義資源)以及 Gateway API。
其整體采用數據面與控制面分離的架構,由 Apache APISIX 承載實際的業務流量。因此大大提升了整體的安全性,極大避免了由于數據面被攻擊而導致 Kubernetes 集群被攻擊的可能。
Traefik 是由 Traefik Labs 開源的一款反向代理和負載均衡器。它在 Kubernetes 中支持多種規則的配置方式,包括 Ingress、Traefik IngressRoute(自定義資源)和 Gateway API。
Traefik 是一個統一的二進制文件,控制面和數據面的代理邏輯均綁定在一起。因此,如果受到攻擊或者有遠程執行的安全漏洞被利用,極有可能存在 Kubernetes 集群被攻擊的情況。
接下來我將從以下幾個維度對 Apache APISIX Ingress 和 Traefik 進行一些對比,方便大家在選型時對產品有更多的認知。
作為網關,最為核心的能力便是要能夠正確的代理流量。作為 Kubernetes 集群的入口網關,主要處理如下兩部分的流量:即 Client 到網關的流量和網關與 Upstream 的流量。如下所示:
Client <----> Ingress <----> Upstream Service
當前的協議多種多樣,以下簡單匯總了兩個項目對協議的支持,僅供參考。
協議 | APISIX Ingress | Traefik |
---|---|---|
HTTP/HTTPS | 支持 | 支持 |
HTTP/2 | 支持 | 支持 |
HTTP/3 | 不支持 | 支持 |
TCP | 支持 | 支持 |
UDP | 支持 | 支持 |
WebSocket | 支持 | 支持 |
Dubbo | 支持 | 不支持 |
此外,無論是 APISIX Ingress 還是 Traefik,均可通過 HTTP/2 或者 TCP 代理等方式支持 gRPC、MQTT 等協議,故而未在上述表格中列出。
從協議支持的角度來看,APISIX Ingress 和 Traefik 各有優勢。此外,APISIX 對于 HTTP/3 的支持正在規劃中,后續也可隨時關注社區動態。
由于業務需求多種多樣,所以可擴展性也是進行技術選型的一個主要指標。APISIX Ingress 和 Traefik 均提供了一些擴展方式,我們將分別進行介紹。
在 APISIX Ingress 中進行功能擴展,主要是通過開發自定義插件來完成。當前,APISIX Ingress 主要支持如下幾種插件的開發方式:
此外,還可以通過 Serverless 插件來直接編排 Lua 代碼,滿足業務需求。
當然,如果你有 Lua 模塊的開發經驗,也可以直接編寫 Lua 模塊,然后進行加載即可,只需在配置文件中增加如下內容即可:
apisix:
...
extra_lua_path: "/path/to/example/?.lua"
具體關于插件的的開發步驟和使用,請參考 Apache APISIX 的插件開發文檔。
Traefik 也提供了相關插件機制用于功能擴展。但是 Traefik 是由 Go 進行開發的,因此它的插件也需要用 Go 進行開發。
在開發完成后,就可以在 Traefik 的配置中添加如下內容進行引用了(需注意,插件的名字需要與包名保持一致)。例如:
experimental:
localPlugins:
example:
moduleName: github.com/traefik/pluginproviderdemo
總體來看,APISIX Ingress 提供了更多種的擴展方式,可以根據實際情況進行靈活選擇??梢愿鶕约合矚g或擅長的工具即可,更容易實現與現有業務集成。而 Traefik 目前則只支持通過 Go 語言進行開發,選擇較少。
在進行技術選型時候,除了考慮一些性能表現,還需要對產品的整個生態支持進行考察。比如項目所使用的協議、項目歸屬以及與現有基礎設施是否可以整合等等。下方簡單整理了幾個角度進行呈現(包含了控制面和數據面)。
對比維度 | APISIX Ingress | Traefik |
---|---|---|
歸屬 | Apache 軟件基金會(ASF) | Traefik Labs |
協議 | Apache 2.0 | MIT |
誕生時間 | 2019 年 6 月 | 2015 年 8 月 |
consul | 支持 | 支持 |
nacos | 支持 | 不支持 |
Eureka | 支持 | 不支持 |
etcd | 支持 | 支持 |
zookeeper | 支持 | 支持 |
DNS | 支持 | 不支持 |
此外,這兩個項目都非常積極與一些周邊項目進行了集成與合作。比如 Rancher、KubeSphere 等。
從生態合作角度來看,APISIX Ingress 比 Traefik 提供了更為廣泛的集成能力,尤其是與基礎組件。因此在進行技術選型時,可以結合當前自己所用的基礎組件的情況進行權衡。
在今年,我們也看到了很多來自用戶的聲音,他們開始在業務架構中用上了 APISIX Ingress。比如地平線使用 APISIX Ingress 替換了 Traefik,主要是考慮如下方面:
在切換為 Apache APISIX Ingress 后,得益于 APISIX Ingress 豐富的插件生態,絕大多數需求均可通過內置插件滿足。并且插件的配置可直接通過 APISIX Ingress 的 ApisixRoute 資源進行定義,比較直觀。也可以通過 ApisixPluginConfig 進行插件模板的配置,在其他的 ApisixRoute 資源中進行引用。
APISIX Ingress 的數據面性能更佳,能高效地應對日益增長的業務流量,而不會陷入性能瓶頸。
除地平線以外,包括少年得到,觀為智慧等公司也都使用 APISIX Ingress 替換了 Traefik,更多用戶案例請參考用戶案例。
此外,Apache APISIX 社區非?;钴S,在 GitHub 和 Slack 等頻道上都會快速響應。也期待各位在社區積極進行反饋與討論。
本文從協議支持、可擴展性和生態等方面對比了 Apache APISIX Ingress 和 Traefik。從內容中也可以看到,APISIX Ingress 在可擴展性和生態集成方面有一定的優勢,用戶可以更容易地對 APISIX Ingress 進行擴展,以及與一些基礎組件進行集成。
希望本文可以為正在選型 Kubernetes Ingress Controller 產品的用戶提供一些幫助。
|