0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

APISIX Ingress VS Ingress NGINX详细对比

OSC开源社区 来源:OSC开源社区 2023-01-11 15:31 次阅读

Kubernetes 中的服务可以通过 Ingress 暴露出来,流量路由由 Ingress 资源上定义的规则控制,通常需要 Ingress controller 负责实现。本文将会对比两个比较流行的 Ingress controller 实现,希望能对读者进行 Ingress controller 选型中有所帮助。
Ingress NGINX 是 Kubernetes 社区实现的 Ingress controller,在社区中被广泛使用。Apache APISIX Ingress 则是 Apache 软件基金会下的开源项目,使用 APISIX 作为数据面的 Kubernetes Ingress controller。
Ingress NGINX vs APISIX Ingress功能对比下列表格中,对比了 Ingress NGINX 和 APISIX Ingress 基本功能,包括协议支持、鉴权方式、上游探针/策略、负载均衡策略、Kubenertes 集成等。以下表格数据取自learnk8s.io。

Product/Project

Ingress NGINX

Apache APISIX Ingress

1. General info

Based on

nginx

nginx

2. Protocols

HTTP/HTTPS

HTTP2

gRPC

TCP

Partial

TCP+TLS

UDP

Partial

Websockets

Proxy Protocol

QUIC/HTTP3

Preview

Preview

3. Clients

Rate limiting (L7)

WAF

Partial

Timeouts

Safe-list/Block-list

Authentication

Authorisation

4. Traffic routing

Host

Path

Headers

Querystring

Method

ClientIP

5. Upstream probes/resiliency

Healthchecks

Retries

Circuit Breaker

6.Load balancer strategies

Round robin

Sticky sessions

Least connections

Ring hash

Custom load balancing

7. Authentication

Basic auth

External Auth

Client certificate - mTLS

OAuth

OpenID

JWT

LDAP

HMAC

8. Observability

Logging

Metrics

Tracing

9. Kubernetes Integration

State

Kubernetes

Kubernetes

CRD

Scope

Clusterwide

namespace

namespace

Support for the Gateway API

Preview

Integrates with service meshes

10. Traffic shaping

Canary

Session Affinity

Traffic Mirroring

11. Other

Hot reloading

LetsEncrypt Integration

Wildcard certificate support

Configure hot reloading

Preview

Service Discovery

功能差异通过下图,可以粗略看到 APISIX Ingress 内置的功能和特性相比 Ingress NGINX 更加丰富,其中包括服务发现、协议支持、认证鉴权等等。ed08e3cc-90e8-11ed-bfe3-dac502259ad0.png服务发现在微服务架构中,应用被拆分为很多微服务,无论是微服务故障,还是对应用服务进行扩缩容,都需要尽快的通知到调用方,以免调用失败。因此,在微服务架构中,服务注册和发现机制就显得很重要了,通常这会通过注册中心来完成。

Service Discovery

Ingress NGINX

Apache APISIX Ingress

Kubernetes

DNS

nacos

exureka

consul_kv

协议支持两者都对 HTTP/HTTPS 协议提供完整支持,APISIX Ingress 在协议支持上更丰富一些,能够的使用 TLS 来加密 TCP 流量,还支持 MQTT,Dubbo、Kafka 等协议进行代理。服务治理能力健康检查在后端节点故障或者迁移时,不可避免会出现节点不可用的情况。如果大量请求访问到了这些不可用的节点时,将会造成流量损失,导致业务中断。因此,需要对节点进行健康检查,通过探针的形式探测后端节点的可用性,将请求代理到健康的节点,从而减少或避免流量损失。健康检查的能力在 Ingress NGINX 中尚未支持,而 APISIX Ingress 提供了该能力,其中包括:l主动健康检查:确保后端服务中的 Pod 处于可用的状态。在应用服务进行滚动更新时,会牵扯大量的节点进行更新,不健康的节点将会被负载均衡器忽略,开启健康检查能够有效的挑选出可用的 Pod,避免流量损失。l被动健康检查:被动的方式无需发起额外的探针,每个请求就是探针,若一个健康节点连续 N 个请求都被判定为失败(取决于如何配置),则该节点将被标记为不健康。由于无法提前感知节点的状态,可能会有一定量的失败请求,在滚动更新时这种情况会相对常见,可以通过服务降级来避免失败的请求量。如下是 APISIX Ingress 为 httpbin 服务配置健康检查示例:

apiVersion: apisix.apache.org/v2

kind: ApisixUpstream

metadata:

name: httpbin

spec:

healthCheck:

passive:

unhealthy:

httpCodes:

- 500

httpFailures: 3

active:

type: http

httpPath: /healthz

healthy:

successes: 3

interval: 2s

httpCodes:

- 200服务熔断流量高峰时,网关作为流量入口向后端服务发起调用,后端服务有可能会产生调用失败(超时或者异常),失败时不能让请求堆积在网关上,需要快速失败并返回回去,这就需要在网关上进行熔断。服务熔断的功能在 Ingress NGINX 中尚未支持。在 APISIX Ingress 中则可以通过 api-breaker熔断插件来实现。具体使用配置示例如下:

apiVersion: apisix.apache.org/v2

kind: ApisixRoute

metadata:

name: httpbin-route

spec:

http:

- name: rule1

match:

hosts:

- httpbin.org

paths:

- /status/*

backends:

- serviceName: httpbin

servicePort: 80

plugins:

- name: api-breaker

enable: true

config:

break_response_code: 502

unhealthy:

http_statuses:

- 505

failures: 2

healthy:

http_statuses:

- 200

successes: 2插件和鉴权方式目前 Ingress NGINX 主要通过AnnotationsConfigMap 等方式进行配置,支持的插件功能比较有限。如果想要使用 JWT、HAMC 等鉴权方式,只能自行开发。而 APISIX Ingress 得益于 APISIX 的丰富功能,原生支持 APISIX 内置的 80+ 插件,能够覆盖大部分使用场景,还支持 JWT、HMAC、wolf-rbac 等多种鉴权方式。以下仅展示 APISIX Ingress 使用 HMAC 认证并在路由上的应用示例:

apiVersion: apisix.apache.org/v2

kind: ApisixConsumer

metadata:

name: hmac-value

spec:

authParameter:

hmacAuth:

value:

access_key: papa

secret_key: fatpa

algorithm: "hmac-sha256"

clock_skew: 0

---

apiVersion: apisix.apache.org/v2

kind: ApisixRoute

metadata:

name: httpbin-route

spec:

http:

- name: rule1

match:

hosts:

- httpbin.org

paths:

- /ip

backends:

- serviceName: httpbin

servicePort: 80

authentication:

enable: true

type: hmacAuthIngress NGINX 和 APISIX Ingress 扩展方式除了以上这些细节对比外,两者对于额外功能的扩展也有所不同。当 Ingress controller 的基础功能无法满足企业用户的需求时,只能通过扩展的方式进行定制开发。接下来将具体介绍 Ingress NGINX 和 APISIX Ingress 如何进行功能扩展。Ingress NGINX 如何进行功能扩展Ingress NGINX 在扩展方式上比较单一,只能通过嵌入 Lua 程序的方式来扩展功能。我们以 Ingress NGINX 插件开发为例,大概需要以下步骤:1.编写 Lua 程序 example-plugin2.将插件安装到 ingress-nginx pod 中的 /etc/nginx/lua/plugins/→ /etc/nginx/lua/plugins/example-plugin3.在 ConfigMap 中启用 example-plugin 插件,需要在安装 Ingress NGINX 时引用此 ConfigMap 对象

apiVersion: v1

kind: ConfigMap

metadata:

name: ingress-nginx-controller

namespace: ingress-nginx

data:

plugins: "example-plugin"APISIX Ingress 如何进行功能扩展APISIX Ingress 提供了多种扩展方式,企业用户可以根据自身情况自由选择或组合,当前支持如下拓展方式:l过 Lua 进行插件开发:这种方式相对简单,并且几乎没有性能损耗;l通过 plugin-runner 开发:这种模式下支持 Java/Python/Go 等语言进行开发,这可以方便用户利用一些现有的业务逻辑,并且无需学习新语言;l通过 WASM 进行插件插件:这种模式下,可以使用任何支持构建出 WASM 的语言进行插件开发;此外还可以通过 Serverless 插件来直接编写 Lua 代码,快速满足业务需求。为什么 APISIX Ingress 选择维护 CRD目前 APISIX Ingress 支持三种声明式配置:Ingress 、CRD 和 Gateway API。这里主要对比 Ingress 和 CRD,Gateway API 将在后续展开。Ingress 比较适合从 Ingress NGINX 迁移的企业用户,其转换成本较低。但缺点也较明显,比如语义化能力弱、没有细致规范等,同时也只能通过 Annotations 方式扩展,且 Annotations 无法支撑复杂配置场景。相对的使用 CRD 主要有以下好处:l更契合数据面的设计语义,更加简单易用;l一些重要配置能够被复用,而不会存在冗余庞大的单个配置;l功能性和可扩展能力有了巨大提升;l数据面 APISIX 有着活跃的社区,更新和发布版本快,CRD 的方式能够轻易支持数据面的更多能力;Ingress NGXIN 的痛点:不支持配置热加载静态配置带来的问题Ingress NGINX 主要基于 NGINX 配置文件的方式,尽管使用 NGINX + Lua 来实现功能扩展,但没有彻底解决静态配置文件的问题。在路由能力和加载模式上稍显不足,并且存在一些明显劣势。比如添加、修改任何新的规则时,需要重新加载 NGINX 配置。随着越来越多的路由规则和证书,在触发变更时,reload 操作将会更耗时,甚至需要几秒到十几秒的时间,对线上流量的影响将会非常大的,会导致流量短暂中断、影响响应延迟、负载均衡质量(每次重新加载 NGINX 都会重置负载均衡状态)等。触发 NGINX 重新加载的情况以下这些情况,涵盖了 Ingress controller 大量的使用场景:l创建新的 Inresss 资源;l将 TLS 部分添加到现有 Ingress;lIngress Annotations 的变化可能影响上游配置(例如 load-balance 注释不需要重新加载);l在 Ingress 中添加或删除 path;lIngress、Service、Secret 资源被删除;lSecret 发生更新;在上述场景下,具有频繁部署应用程序的集群环境中,会不断触发 Ingress、Secret 等资源的操作(创建、更新、删除等),导致 NGINX 重新加载次数剧增,给生产环境带来了极大的影响。小结Ingress NGINX 的架构决定了它必须生成 NGINX 配置然后通过 reload 方式完成配置更新,架构不调整是无法解决这些已知问题。比如路由的实现,APISIX Ingress 则不再依赖 NGINX 配置改为了纯内存结构,通过热更新方式实现动态路由,不再需要重启 NGINX。云原生新一代网关规范 Gateway APIGateway API 优势Gateway API 相比 Ingress 的功能性更强,旨在通过由许多供应商实现并具有广泛行业支持的富有表现力、可扩展和面向角色的接口来发展 Kubernetes 服务网络。当下 Gateway API 具有如下的优势:l面向角色:Gateway 是由一组 API 资源组成的。不同的 API 资源代表了使用与配置 Kubernetes 网络资源的不同角色;l表现力强:Gateway API 的核心功能就包含诸如基于头的匹配、流量加权以及其他在 Ingress 中只能通过各实现者自定义的非标准化 Annotations 等方式实现的功能;l可扩展:Gateway API 允许不同资源在不同层级一同使用。这使得能够对 API 结构进行更精细化的控制。支持情况Gateway API 作为一种扩展 Kubernetes 服务网络的标准,其 Gateway 资源能够实现作为 Kubernetes API 来管理网关的生命周期,功能十分强大。目前许多 Ingress controller 都在积极支持它,包括 Istio、Kong、Traefik 等。在目前 Gateway API 实现情况中,很遗憾的是,Ingress NGXIN 尚未计划支持 Gateway API 。而 APISIX Ingress 已经支持了 Gateway API 的大部分特性:包括 HTTPRoute、TCPRoute、TLSRoute、UDPRoute 等。总结经过 APISIX Ingress 与 Ingress NGINX 的完整对比,我们可以看到两者基础功能差异不大,也都具备扩展能力。但在微服务的架构中,APISIX Ingress 对服务治理和服务发现的支持更具优势。总体来看,两款开源软件均非常优秀,Ingress NGINX 主要特点是简单、易接入,但缺点也十分明显;APISIX Ingress 作为后来者解决了 NGINX 不支持热加载的痛点,在扩展能力和功能上相比 Ingress NGINX 也具有很大的优势。从项目发展角度而言,支持 Gateway API 和 CRD 能够扩展和丰富 Ingress controller 基础能力。如果读者正在进行 Ingress controller 选型,倾向于功能丰富和更强的扩展能力,推荐使用 APISIX Ingress 。如果只是刚接触 Ingress controller,没有更多的功能需求,Ingress NGINX 也是一个比较好的选择。

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源软件
    +关注

    关注

    0

    文章

    209

    浏览量

    15884
  • 网关
    +关注

    关注

    9

    文章

    4301

    浏览量

    50927

原文标题:APISIX Ingress VS Ingress NGINX,详细对比让你一目了然

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    nginx负载均衡配置介绍

    目录 nginx负载均衡 nginx负载均衡介绍 反向代理与负载均衡 nginx负载均衡配置 Keepalived高可用nginx负载均衡器 修改Web服务器的默认主页 开启
    的头像 发表于 11-10 13:39 167次阅读
    <b class='flag-5'>nginx</b>负载均衡配置介绍

    nginx中的正则表达式和location路径匹配指南

    前言,我这里验证的nginx-v1.23.2单机环境下的nginx中的正则表达式、location路径匹配规则和优先级。
    的头像 发表于 09-29 16:02 455次阅读
    <b class='flag-5'>nginx</b>中的正则表达式和location路径匹配指南

    Jtti:美国VPS开启nginx状态监控,查看web服务器的并发连接数

    Nginx的ngx_http_stub_status_module提供能够获取Nginx自上次启动以来的工作状态的功能。如果需要启用此功能的话,需要在编译的过程中添加如下参数
    的头像 发表于 08-26 15:42 224次阅读

    nginx重启命令linux步骤是什么?

      1、验证nginx配置文件是否正确   方法一:进入nginx安装目录sbin下,输入命令./nginx -t   看到如下显示nginx.conf syntax is ok
    发表于 07-11 17:13

    nginx重启命令linux步骤是什么?

      1、验证nginx配置文件是否正确   方法一:进入nginx安装目录sbin下,输入命令./nginx -t   看到如下显示nginx.conf syntax is ok
    发表于 07-10 16:40

    VS Code和VS Codium之间的区别有哪些?你选哪个?

    VS Codium 是一个 VS Code 的克隆版本,百分之百免费且开源。
    的头像 发表于 02-23 15:28 1541次阅读
    <b class='flag-5'>VS</b> Code和<b class='flag-5'>VS</b> Codium之间的区别有哪些?你选哪个?

    核心开发者因安全策略分歧离队,Nginx分叉出freenginx项目

    值得注意的是,Nginx是一款由俄罗斯人伊戈尔•赛索耶夫(Igor Sysoev)创作,并于2004年起向公众公开的异步网页服务器平台,广泛用于反向代理、负载均衡和HTTP缓存等功能。据官方公布的2021年6月数据,Nginx已经超越Apache成为全球最受欢迎的网页服务
    的头像 发表于 02-19 15:51 390次阅读

    Apache服务器和Nginx服务器

    Apache和Nginx都是常见的开源Web服务器软件,它们用于处理HTTP请求并提供网站和应用程序的服务。下面是对Apache和Nginx的一些基本特点的比较: 一、Apache HTTP
    的头像 发表于 01-22 16:48 514次阅读

    如何构建APISIX基于DeepFlow的统一可观测性能力呢?

    随着应用组件的可观测性逐渐受到重视,Apache APISIX 引入插件机制丰富了可观测数据源。
    的头像 发表于 01-18 10:11 905次阅读
    如何构建<b class='flag-5'>APISIX</b>基于DeepFlow的统一可观测性能力呢?

    腾讯云和华为云的ingress路径匹配规则把我绕晕了

    本文主要调研了Tke的两类ingress,分别是应用型CLB和Nginx ingress Controller,这两类ingress在页面创建时均不支持选择路径匹配规则,而二者关于路径
    的头像 发表于 01-08 15:59 844次阅读
    腾讯云和华为云的<b class='flag-5'>ingress</b>路径匹配规则把我绕晕了

    vs1053模块怎么接喇叭

    VS1053模块是一种音频解码芯片,可用于播放音频文件。它具有多种接口选项,包括I2S,SPI和UART。要连接喇叭到VS1053模块,你需要以下几个步骤。 第一步是选择合适的喇叭。喇叭有多种
    的头像 发表于 01-03 17:45 2135次阅读

    Nginx在Windows/docker中的使用

    nginx 是一个高性能的开源反向代理服务器和 web 服务器,一般用来搭建静态资源服务器、负载均衡器、反向代理,本文将分享其在 Windows/docker 中的使用,使用 nssm 部署成服务的方案脚本,局域网中自定义域名解决https提示不安全的解决方案,以及一路踩过的坑。
    的头像 发表于 01-03 10:20 1746次阅读
    <b class='flag-5'>Nginx</b>在Windows/docker中的使用

    如何通过Nginx实现禁止国外IP访问网站

    最近不少小伙伴反馈自己维护的项目中,经常在后台可以看到来自国外IP的攻击,令人头疼。今天浩道跟大家分享如何通过Nginx来实现禁止国外IP访问网站,确保你网站免遭国外IP攻击了!
    的头像 发表于 12-01 11:12 1372次阅读
    如何通过<b class='flag-5'>Nginx</b>实现禁止国外IP访问网站

    Nginx的配置文件如何设置头信息保留真实IP不丢失

    Nginx 配置中设置头信息以保留客户端的真实 IP 地址通常是在使用反向代理的场景中需要的。当 Nginx 作为反向代理时,客户端的真实 IP 地址可能会在转发请求时丢失,因为到达应用服务器
    的头像 发表于 11-30 10:54 1865次阅读

    codeblocks相比vs有什么优势

    的优势。在本文中,我们将详细讨论Code::Blocks相比VS的优势,并提供最少1500字的详尽、详实和细致信息。 Code::Blocks是一个自由开源的C++ IDE,它支持多种编程语言和平台,包括
    的头像 发表于 11-26 09:52 2952次阅读