K8S Ingress控制器两个实现版本(kubernetes-ingress 和 ingress-nginx)的区别

继承根系
• 阅读 7326

K8s 有2个基于 Nginx 的 Ingress 控制器实现版本: 一个是 nginx实现版本 nginxinc/kubernetes-ingress, 另一个是 k8s实现版本 kubernetes/ingress-nginx. 在这篇文章里, 我们将介绍两者实现的核心差异. 这些信息可以帮助你根据需要选择恰当的实现, 或者从其中一个迁移至另外一个.

我当前用的哪个?

如果你不确定你当前在使用的是哪个实现版本, 可以检查当前在运行的 Ingress 控制器的容器镜像来查看. 其中 nginxinc/kubernetes-ingress 实现版本的 Docker 镜像是发布在 DockerHub 的 nginx/nginx-ingress.

[译者补充] 我们可以通过如下命令查看:

$ sudo docker images | grep ingress
[sudo] password for faceless:
nginx/nginx-ingress                                                        1.5.5               1e674eebb1af        9 months ago        161MB

上面的输出显示我们当前使用的 nginx/nginx-ingress 实现.

核心差异

下面的表格总结了两个 Ingress 控制器实现的核心差异. 注意这个表格右边两列都是关于nginx实现版本的控制器, 他们是分别针对 Nginx 和 Nginx Plus的. 有关更多 Nginx Plus 相关的 Nginx实现版本的信息, 可以查看这里.

特性 K8S 实现版本 Nginx 实现版本 (NGINX) Nginx 实现版本 (NGINX Plus)
基础 -- -- --
作者 K8S 社区 Nginx 公司和社区 Nginx 公司和社区
Nginx版本 包含一些三方模块的定制的 Nginx 版本 Nginx 官方版本 Nginx Plus
商业支持 N/A N/A 包含
通过Ingress资源配置负载均衡 -- -- --
合并同一host的Ingress规则 支持 通过 Mergeable Ingresses 支持 通过 Mergeable Ingresses 支持
HTTP负载均衡扩展 -- 注解方式 K8S 支持的注解 Nginx 支持的注解 Nginx 支持的注解
HTTP负载均衡扩展 -- ConfigMap 方式 K8S 支持的 ConfigMap 主键 Nginx 支持的 ConfigMap 主键 Nginx 支持的 ConfigMap 主键
TCP/UDP 通过 ConfigMap 支持 通过 ConfigMap (原生 NGINX 配置) 支持 通过 ConfigMap (原生 NGINX 配置) 支持
Websocket 支持 通过注解支持 通过注解支持
TCP SSL Passthrough 通过 ConfigMap 支持 不支持 不支持
JWT 验证 不支持 不支持 支持
Session 持久化 通过三方库支持 不支持 支持
金丝雀测试 (通过 header, cookie, weight) 通过注解支持 通过定制的资源支持 通过定制的资源支持
配置模板 *1 模板 模板 模板
通过定制化资源配置负载均衡配置 -- -- --
HTTP负载均衡 不支持 VirtualServer 和 VirtualServerRoute 资源 VirtualServer 和 VirtualServerRoute 资源
部署 -- -- --
命令行参数 *2 K8S 版 参数列表 Nginx 版 参数列表 同左
默认 Server 的 TLS 证书和秘钥 必需(命令行参数) / 自动生成 必需(命令行参数) 必需(命令行参数)
Helm Chart 支持 支持 支持
运维 -- -- --
上报 Ingress 控制器的 IP地址到Ingress资源 支持 支持 支持
扩展的状态 通过三方模块支持 不支持 支持
Prometheus 整合 支持 支持 支持
动态配置 endpoints (无需重新加载配置) 通过三方模块支持 不支持 支持

注释:

*1 -- 用于 Ingress 控制器生成 Nginx 配置的配置模板是不同的. 造成的结果是, 对与同样的 Ingress 资源, 不同的控制器生成的配置文件是不同的. 这就意味着在某种情况下, Nginx的行为也可能不一样.

*2 -- 因为命令行参数是不一样的, 所以也就无法使用同一个部署清单来部署 Ingress 控制器.

如何切换 Ingress 控制器

如果你决定切换 Ingress 控制器的实现版本, 做好处理在上文中提到的差异. 至少, 你需要使用一个不同的部署清单.

翻译说明

本文翻译至: Differences Between nginxinc/kubernetes-ingress and kubernetes/ingress-nginx Ingress Controllers, 有细节补充.

翻译日期: 2020/06/07.

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Stella981 Stella981
3年前
K8S的Ingress实现:K8S学习篇1
本系列将会包含多篇文章,敬请期待。大魏在笔记本上安装了双节点的K8S集群,K8S版本为1.20.2:!(https://oscimg.oschina.net/oscnet/c46c218d4dd24fc08fd27650e23b0f75.png)SDN使用Calico、Ingress使用NGINX:!(https:
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(