综合 K8s v1.36:externalIPs 进入三阶段弃用,gitRepo 卷已永久禁用

2026-09-29 21:02:08

K8s v1.36:externalIPs 进入三阶段弃用,gitRepo 卷已永久禁用

v1.36 于 2026-04-22 发布,这一版的重点落在弃用与移除上。下面把升级前需要提前处理的部分按影响面排一下。

项目信息:

  • 发布公告:
  • 细粒度 kubelet 鉴权 GA:

一、Service .spec.externalIPs 弃用

这个字段是为非云集群提供类似云负载均衡器能力的早期尝试,前提假设是集群里每个用户都完全可信;在不满足该条件时会带来安全问题(CVE-2020-8554,流量面临中间人攻击风险)。从 1.21 起官方就建议禁用,并提供了准入控制器 DenyServiceExternalIPs 来阻止使用。

时间表:

  1. v1.36 起字段被弃用,使用时 kube-* 组件会发出弃用警告;
  2. 最早 v1.40,kube-proxy 中对该字段的支持将被禁用,但可以选择重新启用;
  3. 最早 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-admin ClusterRole 会自动包含新子资源权限,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)等。

推荐文章

程序员茄子在线接单