K8S Ingress控制器兩個實現版本(kubernetes-ingress 和 ingress-nginx)的區別

K8s 有2個基於 Nginx 的 Ingress 控制器實現版本: 一個是 nginx實現版本 nginxinc/kubernetes-ingress, 另外一個是 k8s實現版本 kubernetes/ingress-nginx. 在這篇文章裏, 咱們將介紹二者實現的核心差別. 這些信息能夠幫助你根據須要選擇恰當的實現, 或者從其中一個遷移至另一個.nginx

我當前用的哪一個?

若是你不肯定你當前在使用的是哪一個實現版本, 能夠檢查當前在運行的 Ingress 控制器的容器鏡像來查看. 其中 nginxinc/kubernetes-ingress 實現版本的 Docker 鏡像是發佈在 DockerHub 的 nginx/nginx-ingress.git

[譯者補充] 咱們能夠經過以下命令查看:github

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

上面的輸出顯示咱們當前使用的 nginx/nginx-ingress 實現.docker

核心差別

下面的表格總結了兩個 Ingress 控制器實現的核心差別. 注意這個表格右邊兩列都是關於nginx實現版本的控制器, 他們是分別針對 Nginx 和 Nginx Plus的. 有關更多 Nginx Plus 相關的 Nginx實現版本的信息, 能夠查看這裏.cookie

特性 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的行爲也可能不同.less

*2 -- 由於命令行參數是不同的, 因此也就沒法使用同一個部署清單來部署 Ingress 控制器.運維

如何切換 Ingress 控制器

若是你決定切換 Ingress 控制器的實現版本, 作好處理在上文中提到的差別. 至少, 你須要使用一個不一樣的部署清單.socket

翻譯說明

本文翻譯至: Differences Between nginxinc/kubernetes-ingress and kubernetes/ingress-nginx Ingress Controllers, 有細節補充.ide

翻譯日期: 2020/06/07.

相關文章
相關標籤/搜索