K8s v1.36:externalIPs 进入三阶段弃用,gitRepo 卷已永久禁用
v1.36 于 2026-04-22 发布,这一版的重点落在弃用与移除上。下面把升级前需要提前处理的部分按影响面排一下。
项目信息:
- 发布公告:
- 细粒度 kubelet 鉴权 GA:
一、Service .spec.externalIPs 弃用
这个字段是为非云集群提供类似云负载均衡器能力的早期尝试,前提假设是集群里每个用户都完全可信;在不满足该条件时会带来安全问题(CVE-2020-8554,流量面临中间人攻击风险)。从 1.21 起官方就建议禁用,并提供了准入控制器 DenyServiceExternalIPs 来阻止使用。
时间表:
- v1.36 起字段被弃用,使用时
kube-*组件会发出弃用警告; - 最早 v1.40,kube-proxy 中对该字段的支持将被禁用,但可以选择重新启用;
- 最早 v1.43,支持被完全禁用,无法再选择重新启用。
如果你没有在任何 Service 里设置 externalIPs,这不适用。作为预防措施,可以启用 DenyServiceExternalIPs 准入控制器,阻止将来使用该字段。
替代方案:
- 云托管入口:用 LoadBalancer 服务;
- 简单端口暴露:用 NodePort;
- 更灵活的方案:用 Gateway API。
二、gitRepo 卷驱动移除
gitRepo 卷类型自 v1.11 起已弃用。v1.36 中,gitRepo 卷插件被永久禁用且无法重新启用。使用 gitRepo 可能让攻击者以 root 在节点上运行代码。
依赖 gitRepo 的现有工作负载需要迁移到受支持方案,例如 init 容器或外部 git-sync 风格工具。
三、其他值得注意的变化
- SELinux 卷挂载改进 GA:用
mount -o context=XYZ在挂载时为整个卷应用 SELinux 标签,替代递归文件重标记,减少启用 SELinux 强制模式系统上的 Pod 启动延迟。 - 细粒度 kubelet API 鉴权 GA(
KubeletFineGrainedAuthz,v1.32 Alpha、v1.33 Beta):kubelet 会先对/pods、/runningPods/、/healthz、/configz等端点做细粒度 SubjectAccessReview,失败再回退到粗粒度nodes/proxy,保持向后兼容。启用 RBAC 时,内置system:kubelet-api-adminClusterRole 会自动包含新子资源权限,API server 通信不受影响。
动机是 nodes/proxy 的 GET 可通过 WebSocket 被滥用,实现无日志 RCE,而不少 Helm Chart 的默认 RBAC 授予了 nodes/proxy。建议监控/可观测性工作负载改用 nodes/metrics、nodes/stats、nodes/pods。
- ServiceAccount Token 外部签名预期 GA:kube-apiserver 可以把令牌签名委托给外部系统(云 KMS 或 HSM)。
- DRA 继续成熟:节点可分配资源(把 CPU/内存纳入 DRA,Alpha)、资源池状态可见性(
ResourcePoolStatusRequest)等。