乐趣区

关于apisix:为什么-APISIX-Ingress-是比-Traefik-更好的选择

本文能够为正在选型 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 集群被攻打的可能。

Traefik

Traefik 是由 Traefik Labs 开源的一款反向代理和负载均衡器。它在 Kubernetes 中反对多种规定的配置形式,包含 Ingress、Traefik IngressRoute(自定义资源)和 Gateway API。

Traefik 是一个对立的二进制文件,管制面和数据面的代理逻辑均绑定在一起。因而,如果受到攻打或者有近程执行的安全漏洞被利用,极有可能存在 Kubernetes 集群被攻打的状况。

APISIX Ingress vs Traefik

接下来我将从以下几个维度对 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 中进行性能扩大,次要是通过开发自定义插件来实现。以后,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 提供了更多种的扩大形式,能够依据理论状况进行灵便抉择。能够依据本人喜爱或善于的工具即可,更容易实现与现有业务集成。而 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,次要是思考如下方面:

  • 通过 Annotation 减少的配置不易重用;
  • Traefik 中默认的行为与 NGINX 中不同,用户在应用时候会产生困惑;

在切换为 Apache APISIX Ingress 后,得益于 APISIX Ingress 丰盛的插件生态,绝大多数需要均可通过内置插件满足。并且插件的配置可间接通过 APISIX Ingress 的 ApisixRoute 资源进行定义,比拟直观。也能够通过 ApisixPluginConfig 进行插件模板的配置,在其余的 ApisixRoute 资源中进行援用。

APISIX Ingress 的数据面性能更佳,能高效地应答日益增长的业务流量,而不会陷入性能瓶颈。

除地平线以外,包含少年失去,观为智慧等公司也都应用 APISIX Ingress 替换了 Traefik,更多用户案例请参考用户案例。

此外,Apache APISIX 社区十分沉闷,在 GitHub 和 Slack 等频道上都会疾速响应。也期待各位在社区踊跃进行反馈与探讨。

总结

本文从协定反对、可扩展性和生态等方面比照了 Apache APISIX Ingress 和 Traefik。从内容中也能够看到,APISIX Ingress 在可扩展性和生态集成方面有肯定的劣势,用户能够更容易地对 APISIX Ingress 进行扩大,以及与一些根底组件进行集成。

心愿本文能够为正在选型 Kubernetes Ingress Controller 产品的用户提供一些帮忙。

退出移动版