平台與維運 2026 年 5 月 17 日

2026-05-17 — K8s Mixed Version Proxy Beta、CCM 路由指標、Service ExternalIPs 棄用

primary=https://kubernetes.io/blog/2026/05/15/kubernetes-1-36-feature-mixed-version-proxy-beta/ primary=https://kubernetes.io/blog/2026/05/15/ccm-new-metric-route-sync-total/ primary=https://kubernetes.io/blog/2026/05/14/kubernetes-v1-36-deprecation-and-removal-of-service-externalips/

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 Blog — CCM Route Sync MetricKEP-5237


Kubernetes v1.36 正式棄用 Service ExternalIPs 欄位

Kubernetes Blog · 2026-05-14

Kubernetes v1.36 對 Service 的 .spec.externalIPs 欄位發出正式棄用聲明,未來某個 minor 版本中 kube-proxy 將停止實作此行為,並更新一致性標準要求實作不提供 externalIPs 支援。

棄用原因

問題根源是 CVE-2020-8554externalIPs 的設計假設所有叢集使用者完全受信任,允許非特權使用者宣告任意 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


End of article
0
Would love your thoughts, please comment.x
()
x