博客 / 詳情

返回

應對 Nginx Ingress 退役,是時候理清這些易混淆的概念了

作者:望宸

本文希望提供一種更簡單的方式,來理解這些容易混淆的技術概念:Nginx、Ingress、Ingress Controller、Ingress API、Nginx Ingress、Higress、Gateway API。

Nginx 和 Kubernetes

我們先按和 Kubernetes 是否有關,分為兩類:

Nginx 是在沒有 Kubernetes 的年代,流量入口上的事實標準,是獨立運行在任何 Linux/Windows 服務器上的 Web 服務器。提供以下主要功能:

  • 接收請求;
  • 轉發請求;
  • 負載均衡;
  • 簡單的流量治理,例如限流、緩存、重寫。

image

而 Ingress API、Ingress Controller、Nginx Ingress、Higress、Gateway API 都依賴 Kubernetes,Kubernetes 出現後,才有了這些概念。其中,Ingress API 是 Kubernetes 管理流量的規範,Ingress Controller 是規範的實現組件,Nginx Ingress 和 Higress 都是規範的完整實現和功能擴展,Gateway API 則是 Ingress API 的升級和下一代。

image

需要注意的是,Ingress 經常單獨出現,需要基於語境來判斷,有可能是指 Ingress API,也有可能是指 Ingress 資源,即用户編寫的具體配置對象(YAML),遵循 Ingress API。

Ingress API 和 Ingress Controller

Ingress API 和 Ingress Controller 分別是 Kubernetes 流量管理的規範和執行器。

image

Ingress API:用聲明式的方式,描述外部流量如何進入集羣裏的 Service,包括:

  • 如何通過域名訪問服務;
  • 如何根據 URL 路徑路由到不同後端服務;
  • 後端服務是誰;
  • 是否啓用 HTTPS 加密。

形象地説,Ingress API 可以理解位 Kubernetes 中管理流量的説明書。

Ingress Controller:是 Ingress API 的實現組件,即執行者,包括:

  • 監聽 Ingress 資源變化;
  • 將 Ingress 規則轉換為實際的反向代理配置;
  • 接收外部流量並按規則路由;
  • 處理 TLS 終止(HTTPS 解密);
  • 提供健康檢查、負載均衡、重試等流量治理能力。

通過以上能力,Ingress Controller 就實現了 Kubernetes 入口流量的管理。

Nginx Ingress 和 Higress

Nginx Ingress 和 Higress 都是 Ingress API 的完整實現和功能擴展。

image

Nginx Ingress:用 Nginx 作為底層實現的 Ingress API,控制面和數據面耦合在同一個進程/容器中。優點是簡單、易用、社區廣泛。

缺點是:

  • 不是原生的 Ingress API,Ingress API 語義偏弱;
  • 擴展靠 Annotation(工程噩夢);
  • 生成 nginx.conf + reload,動態配置能力弱(頻繁 reload 影響性能)。

適用於簡單、穩定、小規模的場景。

Higress:數據面是基於 Enovy,控制面給基於 istio,是原生的 Ingress API。

優點是:

  • 控制面與數據面解耦,可獨立擴縮容;
  • 基於 xDS 協議,實現真正的動態配置(無 reload,零中斷);
  • 原生支持插件擴展:Wasm、Lua、Go 插件由控制面統一管理並下發;
  • 兼容多協議 & 多標準:同時支持 Ingress API 和 Gateway API。

缺點是,相比 Nginx 廣泛的社區基礎,Higress 為代表的原生 Ingress API,部署和維護存在學習成本。

適用於高性能、高擴展、企業級的場景。

Nginx Ingress 退役

11月,Kubernetes SIG Network 和安全響應委員會宣佈 Ingress NGINX 退役。(⚠️ NGINX 並未退役。)

image

意味着:

  • Ingress NGINX 盡力維護服務至 2026 年 3 月;
  • 不再發布任何新版本;
  • 不再修復任何漏洞;
  • 也不會更新任何可能發現的安全漏洞;
  • GitHub 代碼庫將設置為只讀,僅供參考;
  • 現有的 Ingress NGINX 部署將繼續運行,安裝文件也將繼續可用。

引發退役的根本原因::

  • 多年來,該項目只有一兩個人利用業餘時間,在工作之餘進行開發工作;
  • 嘗試和 Gateway API 社區合作開發一個替代控制器,但未能激發更多人蔘與 Ingress NGINX 的維護。

Higress:Nginx Ingress 退役的替代優先方案

image

  • Kubernetes 官方推薦,即官方社區文檔中進行了説明;
  • 對 Nginx Ingress 的 Annotation 兼容度最高,支持 51 種,覆蓋 90% 的用户場景,這意味着現有的 K8s Ingress YAML 文件無需大量修改即可完成遷移;
  • 長期投入,並提供企業版服務,即阿里雲 API 網關;
  • 提供監聽 K8s Ingress(Ingress 模式),適用於希望保持 K8s 原生工作流(如GitOps)的團隊;和控制枱配置 API(API 管理模式),適用於需要集中治理和精細化管理的場景。

Gateway API 和 Ingress API

Gateway API 是 Ingress API 規範的超集和下一代。他的出現,是為了解決 Ingress API 自身無法搞定的問題。其中,Higress 已經支持 Gateway API 標準,用户可從 Ingress API 平滑遷移至 Gateway API。

image

Ingress API 存在的問題,Gateway API 這樣去解決:

職責不清,後果是 Ingress 是“一人寫全”,沒有權限邊界。-> Gateway API 通過角色分離解決,定義基礎設施提供者、集羣管理員、應用開發者。

功能表達能力弱,依賴 Controller 特有擴展,後果是不標準、不同實現之間遷移成本高。-> Gateway API 通過 Wasm、插件、服務網格集成解決擴展的標準化。

僅支持 HTTP/HTTPS,無法處理 TCP/UDP/gRPC 等協議。-> 雲原生應用早已不只是 Web 服務,Gateway API 通過統一的 API,管理所有南北向流量。

無法表達複雜路由邏輯,微服務治理需求遠超 Ingress 能力。-> Gateway API 支持 Wasm、插件、服務網格集成,通過標準化的高級路由解決。

一個 Ingress Controller 全局共享,缺乏多租户隔離,多租户場景下存在安全和配置衝突風險。-> Gateway API 提供了獨立 Gateway 的實例。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.