資安新聞

Nginx Ingress Controller 停止維護:影響分析與轉換建議

深入分析 Kubernetes Ingress NGINX Controller 於 2026 年 3 月停止維護的影響,並提供完整的 Gateway API 轉換策略與替代方案建議。

作者:Orson
#Kubernetes #Ingress #Gateway API #DevOps #Cloud Native #網路安全

前言

2025 年 11 月 11 日,Kubernetes SIG Network 與安全回應委員會正式宣布 Ingress NGINX Controller 將於 2026 年 3 月停止維護。這項決定對全球數以萬計的 Kubernetes 集群帶來重大影響,本文整理了此決策的背景、影響範圍,並提供轉換建議。

背景說明

Ingress NGINX 的歷史地位

Ingress NGINX Controller 是 Kubernetes 生態系統中最早期且最受歡迎的 Ingress 控制器之一。作為 Kubernetes 項目早期開發的示範實作,它憑藉以下特點成為業界標準選擇:

  • 卓越的靈活性:支援廣泛的配置選項和自訂功能
  • 豐富的功能集:涵蓋從基礎路由到進階流量管理的完整需求
  • 雲端中立性:不依賴特定雲端供應商或基礎設施平台
  • 成熟的生態系統:擁有完整的文件、社群支援和最佳實踐

停止維護的原因

Kubernetes 官方公告指出,Ingress NGINX 面臨以下核心挑戰:

1. 維護人力嚴重不足

長期以來,整個項目僅依賴一到兩位維護者在業餘時間進行開發維護工作。儘管使用者眾多,卻始終無法吸引足夠的貢獻者參與維護。

2. 技術債務累積

過去被視為優勢的靈活性,如今已成為沉重的技術負擔:

  • 安全性問題:例如允許透過 annotations 注入任意 NGINX 配置片段(snippets)的功能,已被視為嚴重的安全漏洞
  • 架構複雜度:廣泛的功能選項導致維護和測試的複雜度持續攀升
  • 現代化標準:難以滿足當代雲原生軟體對安全性和可維護性的要求

3. 替代方案失敗

2024 年,維護者曾宣布計劃開發 InGate 作為替代方案,但該項目未能獲得足夠支持,最終也將一併退役。

影響分析

時程規劃

  • 2025 年 11 月至 2026 年 3 月:維持盡力而為的維護(best-effort maintenance)
  • 2026 年 3 月後
    • 不再發布新版本
    • 不再修復任何錯誤
    • 不再處理任何安全漏洞
    • GitHub 儲存庫轉為唯讀狀態

受影響範圍

1. 直接技術影響

現有部署持續運作 停止維護不會立即影響現有部署,已安裝的 Ingress NGINX 將繼續運作,相關安裝檔案(Helm charts、容器映像)也將保持可用狀態。

安全風險顯著提升 最關鍵的影響在於安全性:2026 年 3 月後發現的任何安全漏洞都不會獲得修補,這將使持續使用的組織暴露於日益增加的安全風險中。

2. 維運層面影響

  • 無法獲得官方支援:遇到問題時無法依賴上游維護團隊
  • 相容性問題:未來 Kubernetes 版本可能出現相容性問題而無人修復
  • 功能凍結:無法期待新功能開發或現有功能改進

3. 合規性影響

對於必須符合資訊安全標準(如 ISO 27001、SOC 2、PCI DSS)的組織,使用不再維護的軟體可能導致稽核問題。特別是在金融、醫療等受嚴格監管的產業,這可能成為嚴重的合規風險。

檢測方法

您可以透過以下指令檢查集群是否使用 Ingress NGINX:

kubectl get pods --all-namespaces --selector app.kubernetes.io/name=ingress-nginx

如果返回結果,表示您的集群正在使用 Ingress NGINX Controller。

轉換策略建議

選項一:轉換至 Gateway API(強烈推薦)

為何選擇 Gateway API?

Gateway API 是 Kubernetes 官方開發的新一代流量管理 API,旨在取代傳統的 Ingress API。相較於 Ingress,Gateway API 提供:

架構優勢

  • 角色分離:清楚區分基礎設施管理者與應用開發者的職責
  • 更強的表達能力:支援更複雜的路由規則和流量管理場景
  • 原生支援:TCP、UDP 路由以及更細緻的流量控制

標準化與可移植性

  • 跨供應商標準:避免廠商鎖定,易於在不同實作間切換
  • 持續演進:由 Kubernetes SIG Network 積極維護和發展

進階功能

  • 流量分割與金絲雀部署:原生支援漸進式發布策略
  • 更細緻的路由控制:支援 header、query parameter 等多維度路由
  • 擴展性設計:透過標準化的擴展機制支援客製化需求

Gateway API 實作選擇

主流的 Gateway API 實作包括:

實作方案特色適用場景
Envoy GatewayCNCF 畢業項目 Envoy 的官方 Gateway 實作需要企業級穩定性與豐富功能
Istio Gateway整合服務網格功能需要完整的服務網格能力
Cilium Gateway基於 eBPF 技術,高效能追求極致效能與可觀測性
Kong Gateway商業支援,豐富的插件生態需要 API 管理與商業支援
Traefik輕量級,易於配置中小型部署與快速上手

使用 ingress2gateway 工具進行轉換

Kubernetes SIG Network 提供了 ingress2gateway 工具來協助自動化轉換過程。

安裝方式

# 使用 Go 安裝
go install github.com/kubernetes-sigs/ingress2gateway@v0.4.0

# 使用 Homebrew (macOS/Linux)
brew install ingress2gateway

# 或從 GitHub Releases 下載二進位檔案
# https://github.com/kubernetes-sigs/ingress2gateway/releases

基本使用

# 轉換當前命名空間的所有 Ingress NGINX 資源
./ingress2gateway print --providers=ingress-nginx

# 轉換所有命名空間的資源
./ingress2gateway print --providers=ingress-nginx --all-namespaces

# 指定特定命名空間
./ingress2gateway print --providers=ingress-nginx --namespace=production

# 從檔案讀取並轉換
./ingress2gateway print --providers=ingress-nginx --input-file=ingress.yaml

# 輸出為 JSON 格式
./ingress2gateway print --providers=ingress-nginx --output=json

轉換對應關係

Ingress 欄位Gateway API 對應
ingressClassName轉換為 gatewayClassName
defaultBackend生成無 hostname 的 Gateway Listener 與 catchall HTTPRoute
tls[].hosts為每個 host 生成 HTTPS Listener(port 443)
tls[].secretName對應到 Listener 的 certificateRefs
rules[].host生成對應的 Gateway HTTP Listener 與 HTTPRoute
rules[].http.paths[].path對應到 HTTPRoute matches[].path.value
rules[].http.paths[].pathType對應到 HTTPRoute matches[].path.type
rules[].http.paths[].backend對應到 HTTPRoute backendRefs[]

衝突解決機制

ingress2gateway 採用確定性的處理順序:

  1. 依照 Ingress 資源的建立時間戳排序(越舊越優先)
  2. 時間戳相同時,依照 namespace/name 排序
  3. 發生衝突時(如相同 path 但不同 backend),較晚的資源會回報錯誤

轉換步驟

階段一:評估與準備

  1. 盤點現有配置

    # 匯出所有 Ingress 資源
    kubectl get ingress --all-namespaces -o yaml > current-ingress.yaml
    
    # 檢查使用的 annotations
    kubectl get ingress --all-namespaces -o jsonpath='{range .items[*]}{.metadata.annotations}{"\n"}{end}' | grep nginx
  2. 評估客製化功能

    • 列出所有使用的 NGINX annotations
    • 識別 snippets 或自訂配置
    • 確認是否有依賴特定 NGINX 模組的功能
  3. 選擇 Gateway API 實作

    • 根據組織需求選擇合適的 Gateway Controller
    • 建立測試環境進行概念驗證

階段二:測試環境驗證

  1. 建立測試環境

    # 安裝選定的 Gateway Controller(以 Envoy Gateway 為例)
    kubectl apply -f https://github.com/envoyproxy/gateway/releases/download/latest/install.yaml
  2. 轉換與部署測試

    # 轉換現有配置
    ingress2gateway print --providers=ingress-nginx \
      --input-file=current-ingress.yaml \
      --output=yaml > gateway-api-config.yaml
    
    # 檢視轉換結果
    cat gateway-api-config.yaml
    
    # 部署到測試環境
    kubectl apply -f gateway-api-config.yaml
  3. 功能驗證

    • 測試所有路由規則是否正確運作
    • 驗證 TLS/SSL 憑證配置
    • 確認 health checks 與探測
    • 測試效能與資源使用情況
  4. 處理不相容功能

    • 針對無法直接轉換的 annotations,尋找 Gateway API 的對應實作方式
    • 必要時使用 Gateway Controller 特定的擴展功能

階段三:金絲雀部署

  1. 並行運作

    • 在生產環境同時運作 Ingress NGINX 與新的 Gateway Controller
    • 使用流量鏡像或藍綠部署策略
  2. 漸進式流量切換

    # 先切換非關鍵服務
    kubectl label service app-service gateway-enabled=true
    
    # 監控指標與日誌
    kubectl logs -n gateway-system -l app=gateway-controller
  3. 監控與調整

    • 持續監控錯誤率、延遲、資源使用
    • 根據觀察結果調整配置

階段四:完整轉換

  1. 移除舊配置

    # 備份現有配置
    kubectl get ingress --all-namespaces -o yaml > backup-ingress.yaml
    
    # 逐步刪除 Ingress 資源
    kubectl delete ingress -n production app-ingress
  2. 解除安裝 Ingress NGINX

    # 使用 Helm 解除安裝
    helm uninstall ingress-nginx -n ingress-nginx
    
    # 或使用 kubectl 刪除
    kubectl delete namespace ingress-nginx
  3. 文件更新

    • 更新部署文件與運維手冊
    • 教育訓練團隊成員熟悉 Gateway API

選項二:轉換至其他 Ingress Controller

若組織暫時無法轉換至 Gateway API,可以考慮切換到其他持續維護的 Ingress Controller。

主流替代方案

HAProxy Ingress

  • 穩定性佳,效能優異
  • 豐富的負載平衡演算法
  • 適合對效能要求高的場景

Traefik

  • 現代化設計,支援自動服務發現
  • 原生支援 Let’s Encrypt
  • 優秀的可視化介面
  • 同時支援 Ingress 與 Gateway API

NGINX Inc. Ingress Controller

  • NGINX 官方商業版本
  • 提供商業支援與進階功能
  • 付費授權但有完整保障

Kong Ingress Controller

  • 強大的 API 管理功能
  • 豐富的插件生態系統
  • 企業級功能與支援

Contour

  • 基於 Envoy,VMware 支援
  • 簡潔的設計哲學
  • 良好的社群支援

轉換考量因素

選擇替代 Ingress Controller 時,應評估:

  1. 功能相容性:是否支援您目前使用的 Ingress 功能與 annotations
  2. 維護狀態:項目的活躍度與維護團隊規模
  3. 效能需求:是否滿足您的流量處理需求
  4. 學習曲線:團隊上手的難易度
  5. 商業支援:是否需要付費的技術支援
  6. 生態系統整合:與現有監控、日誌系統的整合能力

轉換步驟(以 Traefik 為例)

# 1. 安裝 Traefik
helm repo add traefik https://traefik.github.io/charts
helm install traefik traefik/traefik -n traefik --create-namespace

# 2. 更新 Ingress 資源的 ingressClassName
kubectl patch ingress app-ingress -n production \
  --type='json' \
  -p='[{"op": "replace", "path": "/spec/ingressClassName", "value":"traefik"}]'

# 3. 轉換 NGINX 特定的 annotations 為 Traefik annotations
# 需要根據實際使用的功能進行調整

# 4. 驗證與測試
kubectl describe ingress app-ingress -n production

# 5. 移除 Ingress NGINX(確認一切正常後)
helm uninstall ingress-nginx -n ingress-nginx

轉換時程建議

基於安全性考量,建議採取以下時程:

高優先級(立即開始,2026 年 Q1 完成)

適用於以下情境:

  • 處理敏感資料或高價值資產的系統
  • 受嚴格監管的產業(金融、醫療、政府)
  • 面向公眾的生產服務
  • 使用了已知存在安全風險的功能(如 snippets)

中優先級(2026 年 Q2 前完成)

適用於:

  • 內部服務與開發環境
  • 風險承受度較高的組織
  • 已有完善的安全監控與防護機制

低優先級(2026 年底前完成)

適用於:

  • 隔離的測試環境
  • 個人學習與實驗環境
  • 計劃短期內下線的服務

重要提醒:即使是低優先級場景,也不建議在 2026 年後繼續長期使用 Ingress NGINX。

風險管理建議

1. 建立轉換專案團隊

指派專人負責轉換工作,明確角色與職責:

  • 專案經理:協調與時程管理
  • 技術負責人:架構設計與技術決策
  • DevOps 工程師:執行轉換與測試
  • 安全專家:風險評估與安全驗證

2. 詳細記錄與備份

在轉換過程中:

  • 完整備份現有配置
  • 記錄所有變更與決策
  • 建立退版計劃
  • 保留測試證據

3. 漸進式部署策略

避免一次全部升級:

  • 從非關鍵服務開始
  • 分批次進行轉換
  • 保持退版能力
  • 持續監控與調整

4. 建立監控與告警

確保能及時發現問題:

# 範例:監控 Gateway 健康狀態
apiVersion: v1
kind: Service
metadata:
  name: gateway-metrics
  namespace: gateway-system
spec:
  selector:
    app: gateway
  ports:
  - name: metrics
    port: 9090
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: gateway-monitor
  namespace: gateway-system
spec:
  selector:
    matchLabels:
      app: gateway
  endpoints:
  - port: metrics

5. 知識轉移與訓練

  • 組織團隊教育訓練課程
  • 建立新的維運手冊
  • 分享最佳實踐
  • 建立內部問答知識庫

常見問題解答

Q1: 我可以繼續使用 Ingress NGINX 到什麼時候?

技術上可以持續使用,但強烈不建議在 2026 年 3 月後繼續使用於生產環境。主要風險是安全漏洞不會獲得修補。

Q2: Gateway API 是否已經生產就緒?

是的。Gateway API 已於 2023 年達到 GA(Generally Available)狀態,多個主流實作(如 Istio、Envoy Gateway、Cilium)都已在大規模生產環境中使用。

Q3: 轉換會造成服務中斷嗎?

採用適當的策略(如藍綠部署或金絲雀發布),可以做到零停機轉換。關鍵是充分的測試與漸進式切換。

Q4: 小型團隊是否有資源完成轉換?

ingress2gateway 工具可以自動化大部分轉換工作。對於簡單的配置,轉換過程可以在數天內完成。建議優先選擇易於上手的 Gateway 實作,如 Traefik。

Q5: 如果我的雲端供應商還在使用 Ingress NGINX 怎麼辦?

聯繫您的雲端供應商了解他們的轉換計劃。主流雲端供應商(AWS、GCP、Azure)都已提供或正在開發 Gateway API 支援。

Q6: 是否有工具可以幫助評估轉換複雜度?

除了 ingress2gateway,還可以使用 kubectl 搭配腳本分析:

# 統計使用的 annotations
kubectl get ingress --all-namespaces -o json | \
  jq '[.items[].metadata.annotations | keys[]] | unique'

# 找出使用 snippets 的 Ingress
kubectl get ingress --all-namespaces -o json | \
  jq '.items[] | select(.metadata.annotations | 
  to_entries[] | .key | contains("snippet"))'

結論

Ingress NGINX Controller 的退役標誌著 Kubernetes 流量管理進入新階段。雖然這項變更為現有用戶帶來額外的轉換負擔,但同時也是升級至更現代、更安全的架構的契機。

核心建議

  • 立即行動:不要等到 2026 年 3 月才開始規劃
  • 優先選擇 Gateway API:作為官方推薦的長期方案
  • 充分測試:確保轉換不影響業務運作
  • 記錄與分享:協助社群共同度過轉換期

Gateway API 代表著 Kubernetes 流量管理的未來,提供更強大的功能、更好的安全性與更清晰的架構設計。雖然轉換需要投入時間與資源,但長遠來看,這將為組織帶來更穩定、更靈活的基礎設施。

感謝 Ingress NGINX 維護者多年來的辛勤付出,他們的貢獻讓 Kubernetes 生態系統得以蓬勃發展。現在,是時候擁抱下一代技術,延續這份精神,建構更美好的雲原生未來。

參考資源

官方文件

Gateway API 實作

社群資源