为什么 APISIX Ingress 是比 Traefik 更好的选择?

news2025/7/18 14:30:20

本文可以为正在选型 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 提供了更多种的扩展方式,可以根据实际情况进行灵活选择。可以根据自己喜欢或擅长的工具即可,更容易实现与现有业务集成。而 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 社区非常活跃,在 GitHub 和 Slack 等频道上都会快速响应。也期待各位在社区积极进行反馈与讨论。

总结

本文从协议支持、可扩展性和生态等方面对比了 Apache APISIX Ingress 和 Traefik。从内容中也可以看到,APISIX Ingress 在可扩展性和生态集成方面有一定的优势,用户可以更容易地对 APISIX Ingress 进行扩展,以及与一些基础组件进行集成。

希望本文可以为正在选型 Kubernetes Ingress Controller 产品的用户提供一些帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108847.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FrameLayout布局案例

框架布局-FrameLayout 1.FrameLayout简介 1.简介&#xff1a;白话&#xff0c;墙角堆砌东西 就是开辟一个巨大的空间控件的位置不能够指定&#xff0c;默认就是左上角后面对挡住前面的2.属性 属性名称 对应方法 说明 android:foreground setForeground(Drawable) 设置绘制…

【408篇】C语言笔记-第十四章( 二叉树的建树和遍历考研真题实战)

文章目录第一节&#xff1a;冒泡排序1. 排序2. 冒泡排序第二节&#xff1a;冒泡排序实战1. 步骤2. 代码3. 时间复杂度与空间复杂度第三节&#xff1a;快速排序原理与实战1. 基本思想2. 快速排序实战3. 时间复杂度与空间复杂度第四节&#xff1a;插入排序原理及实战1. 插入排序原…

HSF 实现原理

HSF 实现原理 提供服务的流程 - server启动时候向ConfigServer注册 - client启动时候向ConfigServer请求list - client缓存list&#xff0c;发现不可用的server&#xff0c;从缓存中remove - ConfigServer通过心跳包维护可用server的list - list有更新的时候&#xff0c;…

单片机——LED

0. 单片机编程的一般步骤 目标分析&#xff1a;点亮开发板上的LED灯 电路原理图分析&#xff1a;相关器件的工作原理 数据手册分析&#xff1a;IO端口控制 代码编写、编译 下载与调试 1. LED简介 Led&#xff1a;即发光二极管&#xff0c;具有单向导通性&#xff0c;一般…

验证码、通知短信API常见使用问题

如今短信应用于我们生活工作的方方面面&#xff0c;注册或者登录一个应用可以用短信验证码快速登录&#xff0c;支付可以使用短信验证码&#xff1b;商家搞促销活动可以发送通知短信给客户&#xff0c;会员到期了商家可以发送告警短信给会员用户…可见验证码短信API和通知短信A…

JavaFX爱好者看过来,这款工具值得拥有

前言 各位CSDN的博友们&#xff0c;随着各地政策的放开&#xff0c;大伙现在是在水深火热当中呢&#xff1f;还是天选打工人-安然无羊。在这里&#xff0c;希望阳了的朋友&#xff0c;赶紧恢复健康&#xff0c;早日康复。希望没有阳的朋友们&#xff0c;继续坚持&#xff0c;万…

聊聊设计模式-解释器模式?

简介 解释器模式属于行为型模式。它是指给定一门语言&#xff0c;定义它的文法的一种表示&#xff0c;并定义一个解释器&#xff0c;该解释器使用该表示来解释语言中的句子。是一种按照规定的语法进行解析的模式 编译器可以将源码编译解释为机器码&#xff0c;让CPU能进行识别并…

C++调用matlab引擎画三维图

VS2012设置 项目–项目属性–配置属性–VC目录–包含目录 D:\MATLAB\R2016a\extern\include 项目–项目属性–配置属性–VC目录–库目录 D:\MATLAB\R2016a\extern\lib\win64\microsoft 添加依赖项有两种方法&#xff1a; 方法一&#xff1a;项目中设置 项目–项目属性–配置属…

一、线程相关概念

文章目录相关概念程序(program)进程线程单线程与多线程并发与并行相关概念 程序(program) 是为完成特定任务、用某种语言编写的一组指令的集合。简单的说:就是我们写的代码。 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c…

基于注解方式Spring Security忽略拦截

文章目录1.Spring Security忽略拦截配置2.基于配置文件注入2.1.添加配置2.2.修改Spring Security配置类2.3. 测试3.基于注解的方式过滤接口3.1.添加注解3.2.获取所有使用了IgnoreWebSecurity注解的接口访问路径3.3.测试1.Spring Security忽略拦截配置 关于Spring Securite的使…

SDL学习

学习笔记&#xff1a;整合安全开发生命周期SDL的Devops工具链建设 分享思路&#xff1a;《SDL安全开发生命周期介绍》 1、什么是SDL&#xff1f; 2、为什么需要SDL&#xff1f; 3、DevSecOps实践&#xff08;SDLDevOps&#xff09; 【整合安全开发生命周期SDL的DevOps工具链建…

408 考研《操作系统》第三章第一节:内存

文章目录教程1. 内存的基础知识1.1什么是内存&#xff1f;有何作用&#xff1f;补充知识&#xff1a;几个常用的数量单位2. 进程的运行原理2.1 指令的工作原理2.2 逻辑地址vs物理地址2.3 从写程序到程序运行2.4 装入模块装入内存2.5 装入的三种方式2.5.1 ——绝对装入2.5.2 ——…

VR的内容荒漠,字节救不了

文|智能相对论 作者|Kinki 去年以来&#xff0c;“元宇宙”概念大火&#xff0c;掀起了新一轮的产业布局和科技博弈&#xff0c;脸书Facebook更直接改名Meta&#xff0c;展示其看好元宇宙未来的决心&#xff0c;国内大厂如腾讯、字节、阿里等&#xff0c;也在游戏、社交、硬件…

Macos安装和卸载第三方软件的正确方法

Mac第三方软件通常指的是非MacApp Store渠道下载安装的应用程序。在Mac电脑中有很多Mac系统内置的软件&#xff0c;但有些用户也喜欢安装一些第三方的软件来提高工作效率&#xff0c;那么我们如何正确的安装和卸载第三方软件呢&#xff1f;教程都在下面哦~ mac第三方软件安装方…

Fabric.js 使用图片遮盖画布(前景图)

本文简介 点赞 关注 收藏 学会了 在 《Fabric.js 使用纯色遮挡画布》 中讲到使用纯色的方式遮盖画布。如果你的常见需要使用图片来遮盖的话&#xff0c;fabric.js 也提供了相应的属性来配置。 相比起使用纯色遮盖画布&#xff0c;使用图片会更复杂。 因为图片本身是有尺寸…

【科研工具】一款好用的科研插件-easyScholar

0.概述1.安装2.功能显示SCI分区&#xff1a;定位优质的文献【看分区排名靠前的1-2区】选中英文按下t翻译&#xff0c;按下y隐藏翻译点击文献网址的图标跳转sci-hub下载0.概述 easyScholar是一款很好用的科研插件&#xff0c;可以显示会议期刊登记&#xff0c;支持轻量翻译&…

SAP OData 服务关于本地文件作为附件上传的一些错误消息

错误消息&#xff1a; {"error": {"code": "005056A509B11EE3AEB5819C07C69E2F","message": {"lang": "en","value": "The server is refusing to process the request because the entity has a…

单机模拟主从复制(一主三从)

引言 操作系统环境&#xff1a;Ubuntu 20.04 Redis版本&#xff1a;6.2.8 准备工作 官网下载 当前最新版本是7.0&#xff0c;我这里用的是6.0&#xff0c;下载 redis-6.2.8.tar.gz&#xff0c;拷贝到自己的虚拟机或者云服务器。 tar -zxvf redis-6.2.8.tar.gz 解压 cd redi…

【HAL库】STM32CubeMX开发----STM32F407----SPI实验

前言 本次实验以 STM32F407VET6 芯片为MCU&#xff0c;使用 25MHz 外部时钟源。 SPI 通信引脚 与 MCU引脚 对应关系如下&#xff1a; SPI接口GPIO端口CS(片选)PA4SCLK(时钟)PA5MISO(数据输入)PA6MOSI(数据输出)PA7 一、使用STM32CubeMX ---- 新建SPI实验工程 步骤1&#xff…

crypto-music is frequency(INS‘hAck CTF 2018)

比较有趣的一题&#xff0c;记录下来。 Music is frequency Passionated by the sound of a nursery rhyme, we decided to build a new way to send private messages. Find a way to decrypt our rsa private key to get your reward. Because we are pretty bad musicians, …