Nginx-Ingress和traefik区别

红米4个月前技术文章280

Nginx-Ingress和traefik区别

1. Ingress Controller

k8s 是通过一个又一个的 controller 来负责监控、维护集群状态。Ingress Controller 就是监控 Ingress 路由规则的一个变化,然后跟 k8s 的资源操作入口 api-server 进行通信交互。K8s 并没有自带 Ingress Controller,它只是一种标准,具体实现有多种,需要自己单独安装,常用的是 Nginx Ingress Controller 和 Traefik Ingress Controller。
Ingress Controller 收到请求,匹配 Ingress 转发规则,匹配到了就转发到后端 Service,而 Service 可能代表的后端 Pod 有多个,选出一个转发到那个 Pod,最终由那个 Pod 处理请求。

下载.jpeg

2. Nginx-ingress:

由于微服务架构以及 Docker 技术和 kubernetes 编排工具最近几年才开始逐渐流行,所以一开始的反向代理服务器比如 nginx、apache 并未提供其支持,所以才会出现 Ingress Controller 这种东西来做 kubernetes 和前端负载均衡器如 nginx 之间做衔接;即 Ingress Controller 的存在就是为了能跟 kubernetes 交互,然后写入nginx 配置,最后reload。
使用nginx作为前端负载均衡,通过ingress controller不断的和kubernetes api交互,实时获取后端service,pod等的变化,然后动态更新nginx配置,并刷新使配置生效,达到服务发现的目的。

3. Traefik

traefik本身设计的就能够实时跟kubernetes api交互,感知后端service,pod等的变化,自动更新配置并重载。

4. Traefik优点:

  • 速度快

  • 不需要安装其他依赖,使用 GO 语言编译可执行文件

  • 支持最小化官方 Docker 镜像

  • 支持多种后台,如 Docker, Swarm mode, Kubernetes, Marathon, Consul, Etcd, Rancher, Amazon ECS 等等

  • 支持 REST API

  • 配置文件热重载,不需要重启进程

  • 支持自动熔断功能

  • 支持轮训、负载均衡

  • 提供简洁的 UI 界面

  • 支持 Websocket, HTTP/2, GRPC

  • 自动更新 HTTPS 证书

  • 支持高可用集群模式

5. Nginx和Traefik横向对比


Nginx IngressTraefik ingress
协议http/https、http2、grpc、tcp/udphttp/https、http2、grpc、tcp、tcp+tls
路由匹配host、pathhost、path、headers、query、path prefix、method
命名空间支持-共用或指定命名空间
部署策略-金丝雀部署、蓝绿部署、灰度部署
upstream探测重试、超时、心跳探测重试、超时、心跳探测、熔断
负载均衡算法RR、会话保持、最小连接、最短时间、一致性hashWRR、动态RR、会话保持
优点简单易用,易接入Golang编写,部署容易,支持众多的后端,内置WebUI
缺点没有解决nginx reload,插件多,但是扩展性能查差没啥缺点


相关文章

MySQL 异常:max key length is 767 bytes

MySQL 异常:max key length is 767 bytes

前言最近迁移几张表,又遇到 767 异常,迁移前只检查了 sql_mode 忽略对比了这个参数,导致几张表创建失败,其实解决方法也很简单,开启 innodb_large_prefix 参数重新导入即可...

ES运维(一)底层数据存储原理

ES运维(一)底层数据存储原理

1、ES底层数据存储原理架构图Segment工作流程:A、 新的文档在内存中组织B、 每隔一段时间,buffer将会被提交:生成一个新的segment(一个额外的新的倒序索引)并被写到磁盘,同时一个新...

sparksql集成ranger权限测试

sparksql集成ranger权限测试

##启动thriftserver cd /opt/dtstack/spark/spark_pkg/sbin ./start-thriftserver.sh \ --master yarn \...

Python 查询字符串转字典

Python 标准库中的 urllib.parse.parse_qs() 函数可以将查询字符串解析为一个字典,这个函数会将查询字符串中的键值对解析为字典的键和值。实例:from urllib.pars...

Prometheus基于Alertmanager实现钉钉告警

Prometheus基于Alertmanager实现钉钉告警

一、安装prometheus-webhook-dingtalk插件wget https://github.com/timonwong/prometheus-webhook-dingtalk/relea...

Ansible部署和使用(sshpass)

Ansible部署和使用(sshpass)

简介Ansible默认通过 SSH 协议管理机器。安装Ansible之后,不需要启动或运行一个后台进程,或是添加一个数据库。只要在一台电脑(可以是一台笔记本)上安装好,就可以通过这台电脑管理一组远程的...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。