Kubernetes v1.36:Mixed Version Proxy 升級 Beta,預設啟用
Kubernetes Blog · 2026-05-15
Kubernetes v1.36 將 Mixed Version Proxy(MVP)從 Alpha(v1.28 引入)提升至 Beta,預設啟用(feature gate UnknownVersionInteroperabilityProxy)。MVP 解決的是滾動升級期間,混合版本控制平面中較舊 API server 對新版本資源返回錯誤 404 的問題。
問題背景
高可用控制平面升級時,多個 API server 可能同時運行不同版本。舊版 API server 對它不認識的資源返回 404 Not Found,即使該資源存在於其他 API server 上。這會導致垃圾回收誤刪、命名空間刪除阻塞、以及應用程式錯誤行為等副作用。
Alpha 到 Beta 的核心演進
Alpha 版本依賴 StorageVersion API 追蹤各 API server 的能力,對 CRD 與聚合 API 支援有限。Beta 版本改用 Aggregated Discovery 動態理解 peer 能力,並新增「Peer-Aggregated Discovery」:客戶端的 discovery 請求現在返回所有 peer API server 的合併視圖,而非單一 API server 的本地知識。
請求路由的工作方式如下:
客戶端請求 → API Server A(舊版本)
↓ 若 A 無法處理
查詢 Discovery Cache 找到有能力的 peer
↓
代理到 API Server B,附加 x-kubernetes-peer-proxied header
↓
B 處理後回應,A 轉發給客戶端設定與停用
Peer-aggregated discovery 在設定 --peer-ca-file flag 時自動啟用;未設定時退回到本地 API 視圖。如需停用 MVP(例如測試或相容性需求):
--feature-gates=UnknownVersionInteroperabilityProxy=false影響範圍
對使用 HA 控制平面的叢集升級影響最顯著:不再需要在升級完成後才開始部署新 API 版本的資源。對單副本控制平面環境,MVP 透明運作,無額外開銷。
原始來源:Kubernetes Blog
Kubernetes v1.36 CCM 新增路由同步計數指標
Kubernetes Blog · 2026-05-15
Kubernetes v1.36 在 Cloud Controller Manager(CCM)的 route controller 新增了 Alpha 計數器指標 route_controller_route_sync_total,記錄路由控制器與雲端供應商進行同步的次數。這個指標的主要用途是讓運維人員驗證 CloudControllerManagerWatchBasedRoutesReconciliation feature gate 的效果。
使用場景
v1.35 引入的 watch-based 路由協調機制(KEP-5237)只在 Node 發生實際變化時才觸發同步,取代原本的固定間隔輪詢。使用這個指標可以 A/B 測試兩種模式的差異:
- Feature gate 停用(預設):10 分鐘內無 Node 變化,計數器仍穩定遞增(約 60 次/10 分鐘)
- Feature gate 啟用:無 Node 變化期間計數器停止遞增,有 Node 加入或移除時才遞增一次
影響範圍
Watch-based 模式的主要效益是降低對雲端供應商 API 的呼叫速率,減少觸發 rate limit 的風險,在 Node 數量大或雲端 API 成本敏感的環境尤為重要。指標目前為 Alpha 狀態,後續版本可能調整標籤或語意。
Kubernetes v1.36 正式棄用 Service ExternalIPs 欄位
Kubernetes Blog · 2026-05-14
Kubernetes v1.36 對 Service 的 .spec.externalIPs 欄位發出正式棄用聲明,未來某個 minor 版本中 kube-proxy 將停止實作此行為,並更新一致性標準要求實作不提供 externalIPs 支援。
棄用原因
問題根源是 CVE-2020-8554:externalIPs 的設計假設所有叢集使用者完全受信任,允許非特權使用者宣告任意 IP 作為 Service 的外部 IP,在多租戶環境中可用於流量攔截攻擊。Kubernetes 1.21 起即建議禁用此欄位,但未進行正式棄用流程;v1.36 完成這個收尾。
緩解與替代方案
自 v1.21 起即可啟用 DenyServiceExternalIPs admission controller 阻擋所有 externalIPs 使用:
plugins:
- name: DenyServiceExternalIPs
configuration:
kind: DenyServiceExternalIPsAdmissionOptions
apiVersion: apiserver.config.k8s.io/v1alpha1注意:受影響的僅是 .spec.externalIPs 欄位;Node 的 .status.addresses 中類型為 ExternalIP 的條目,以及 kubectl 顯示 LoadBalancer Service IP 的 EXTERNAL-IP 欄均不受影響。
原始來源:Kubernetes Blog