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 控制器的實現版本, 作好處理在上文中提到的差別. 至少, 你須要使用一個不一樣的部署清單.socket
本文翻譯至: Differences Between nginxinc/kubernetes-ingress and kubernetes/ingress-nginx Ingress Controllers, 有細節補充.ide
翻譯日期: 2020/06/07.