您的位置:  首頁 > 技術雜談 > 正文

為什么 APISIX Ingress 是比 Traefik 更好的選擇?

2022-12-23 17:00 https://my.oschina.net/ApacheAPISIX/blog/5614318 Apache_APISIX_中文社區 次閱讀 條評論

本文可以為正在選型 Kubernetes Ingress Controller 產品的用戶提供一些幫助。

作者張晉濤,API7.ai 云原生專家,Apache APISIX Committer、Kubernetes Ingress Nginx Reviewer

Apache APISIX Ingress

Apache APISIX Ingress 是一個使用 Apache APISIX 作為數據面的 Kubernetes Ingress controller 實現。

目前,它支持多種規則的配置方式,包括 Ingress、APISIX Ingress CRD (自定義資源)以及 Gateway API。

其整體采用數據面與控制面分離的架構,由 Apache APISIX 承載實際的業務流量。因此大大提升了整體的安全性,極大避免了由于數據面被攻擊而導致 Kubernetes 集群被攻擊的可能。

image (4).png

Traefik

Traefik 是由 Traefik Labs 開源的一款反向代理和負載均衡器。它在 Kubernetes 中支持多種規則的配置方式,包括 Ingress、Traefik IngressRoute(自定義資源)和 Gateway API。

Traefik 是一個統一的二進制文件,控制面和數據面的代理邏輯均綁定在一起。因此,如果受到攻擊或者有遠程執行的安全漏洞被利用,極有可能存在 Kubernetes 集群被攻擊的情況。

image (5).png

APISIX Ingress vs Traefik

接下來我將從以下幾個維度對 Apache APISIX Ingress 和 Traefik 進行一些對比,方便大家在選型時對產品有更多的認知。

協議支持

作為網關,最為核心的能力便是要能夠正確的代理流量。作為 Kubernetes 集群的入口網關,主要處理如下兩部分的流量:即 Client 到網關的流量網關與 Upstream 的流量。如下所示:

Client <----> Ingress <----> Upstream Service

當前的協議多種多樣,以下簡單匯總了兩個項目對協議的支持,僅供參考。

協議APISIX IngressTraefik
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 中進行功能擴展,主要是通過開發自定義插件來完成。當前,APISIX Ingress 主要支持如下幾種插件的開發方式:

  • 通過 Lua 進行插件的開發:這種方式相對簡單,并且幾乎沒有性能損耗;
  • 通過 Plugin Runner 開發:這種模式下支持 JAVA/Python/Go 等多種計算語言進行開發,方便用戶利用現有的業務邏輯,同時無需學習新語言;
  • 通過 WASM 進行插件插件:這種模式下,可以使用任何支持構建出 WASM 的語言進行插件開發;

此外,還可以通過 Serverless 插件來直接編排 Lua 代碼,滿足業務需求。

當然,如果你有 Lua 模塊的開發經驗,也可以直接編寫 Lua 模塊,然后進行加載即可,只需在配置文件中增加如下內容即可:

apisix:
...
extra_lua_path: "/path/to/example/?.lua"

具體關于插件的的開發步驟和使用,請參考 Apache APISIX 的插件開發文檔。

Traefik

Traefik 也提供了相關插件機制用于功能擴展。但是 Traefik 是由 Go 進行開發的,因此它的插件也需要用 Go 進行開發。

在開發完成后,就可以在 Traefik 的配置中添加如下內容進行引用了(需注意,插件的名字需要與包名保持一致)。例如:

experimental:
localPlugins:
example:
moduleName: github.com/traefik/pluginproviderdemo

總體來看,APISIX Ingress 提供了更多種的擴展方式,可以根據實際情況進行靈活選擇??梢愿鶕约合矚g或擅長的工具即可,更容易實現與現有業務集成。而 Traefik 目前則只支持通過 Go 語言進行開發,選擇較少。

生態

在進行技術選型時候,除了考慮一些性能表現,還需要對產品的整個生態支持進行考察。比如項目所使用的協議、項目歸屬以及與現有基礎設施是否可以整合等等。下方簡單整理了幾個角度進行呈現(包含了控制面和數據面)。

對比維度APISIX IngressTraefik
歸屬Apache 軟件基金會(ASF)Traefik Labs
協議Apache 2.0MIT
誕生時間2019 年 6 月2015 年 8 月
consul支持支持
nacos支持不支持
Eureka支持不支持
etcd支持支持
zookeeper支持支持
DNS支持不支持

此外,這兩個項目都非常積極與一些周邊項目進行了集成與合作。比如 Rancher、KubeSphere 等。

從生態合作角度來看,APISIX Ingress 比 Traefik 提供了更為廣泛的集成能力,尤其是與基礎組件。因此在進行技術選型時,可以結合當前自己所用的基礎組件的情況進行權衡。

來自用戶的聲音

在今年,我們也看到了很多來自用戶的聲音,他們開始在業務架構中用上了 APISIX Ingress。比如地平線使用 APISIX Ingress 替換了 Traefik,主要是考慮如下方面:

  • 通過 Annotation 增加的配置不易重用;
  • Traefik 中默認的行為與 NGINX 中不同,用戶在使用時候會產生困惑;

在切換為 Apache APISIX Ingress 后,得益于 APISIX Ingress 豐富的插件生態,絕大多數需求均可通過內置插件滿足。并且插件的配置可直接通過 APISIX Ingress 的 ApisixRoute 資源進行定義,比較直觀。也可以通過 ApisixPluginConfig 進行插件模板的配置,在其他的 ApisixRoute 資源中進行引用。

image (8).png

APISIX Ingress 的數據面性能更佳,能高效地應對日益增長的業務流量,而不會陷入性能瓶頸。

除地平線以外,包括少年得到觀為智慧等公司也都使用 APISIX Ingress 替換了 Traefik,更多用戶案例請參考用戶案例。

此外,Apache APISIX 社區非?;钴S,在 GitHub 和 Slack 等頻道上都會快速響應。也期待各位在社區積極進行反饋與討論。

總結

本文從協議支持、可擴展性和生態等方面對比了 Apache APISIX Ingress 和 Traefik。從內容中也可以看到,APISIX Ingress 在可擴展性和生態集成方面有一定的優勢,用戶可以更容易地對 APISIX Ingress 進行擴展,以及與一些基礎組件進行集成。

希望本文可以為正在選型 Kubernetes Ingress Controller 產品的用戶提供一些幫助。

展開閱讀全文
  • 0
    感動
  • 0
    路過
  • 0
    高興
  • 0
    難過
  • 0
    搞笑
  • 0
    無聊
  • 0
    憤怒
  • 0
    同情
熱度排行
友情鏈接
18禁高潮出水呻吟娇喘mp3,日本熟妇乱人伦A片免费高清,成人午夜精品无码区,狠狠色噜噜色狠狠狠综合久久,麻豆一区二区99久久久久,年轻的妈妈4,少妇被又大又粗又爽毛片,护士张开腿让我爽了一夜,男男互攻互受h啪肉np文,你好神枪手电视剧免费观看啊,97人妻一区二区精品免费,久久久婷婷五月亚洲97号色,freegaysexvideos男男中国,国产精品国产三级国av麻豆,国产精品又黄又爽又色无遮挡网站,亚洲av无码一区二区三区网站,亚洲国产精品久久久久蜜桃,国产真人无码作爱视频免费,国产成人精品亚洲一区二区三区,亚洲欧洲日产最新,老司机带带我精彩免费,国产成人久久精品激情,日本最新av免费一区二区三区,边摸边吃奶又黄又激烈视频
<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>