Kubernetes v1.37:节点组件 Rootless 模式进入 Beta



Kubernetes v1.37:节点组件 Rootless 模式进入 Beta

Kubernetes v1.37:节点组件 Rootless 模式进入 Beta

原文作者:Akihiro Suda(NTT)。原文发表于 Kubernetes 官方博客,2026 年 9 月 4 日。本文按 CC BY 4.0 许可整理,并注明编辑改动。

Kubernetes v1.37 将 KubeletInUserNamespace 功能门控提升到 Beta。启用后,kubelet、CRI/OCI 运行时、CNI 插件和 kube-proxy 等节点组件可以在 Linux 用户命名空间内,以宿主机普通用户身份运行。这项设计通常称为节点 Rootless。

它不同于 Pod 用户命名空间:Pod 用户命名空间让工作负载以映射身份运行,但节点组件仍由宿主机 root 运行。两种机制可以叠加,用于更严格的嵌套集群隔离。

宿主普通用户 UID 1000 映射为用户命名空间内 UID 0;节点组件与 Pod 在映射边界内,但仍共享宿主内核
权限映射示意图,编译者自绘;不是运行截图。

它改变哪一层风险

容器运行时、kubelet 等节点组件的漏洞曾可能让攻击者越过容器边界,取得宿主机 root 权限。用户命名空间把这类突破的潜在影响限制在宿主机普通账户权限内;攻击者无法借此改写宿主机内核、引导程序或固件。

  • CVE-2022-0811:CRI-O 的 sysctl 处理可导致宿主机命令执行。
  • CVE-2023-27561:runc 挂载竞态可绕过容器路径屏蔽。
  • CVE-2024-10220:kubelet 的 gitRepo 卷处理可导致 root 命令执行。
  • CVE-2025-31133:runc 挂载路径问题可能写入宿主机 procfs。
  • CVE-2026-53488:containerd 镜像标签处理可能导致宿主机命令执行。

用户命名空间不防护内核本身的漏洞,也不能替代 seccomp 等系统调用限制。不同 CNI/CSI 驱动、内核配置和存储实现可能不兼容,部署前必须逐项确认。

适用场景与映射原理

原文列出的使用场景包括:生产集群的容器逃逸缓解、HPC 等共享机器上的普通用户集群、保护笔记本宿主网络配置、为 AI 编码代理建立隔离的本地测试集群、Kubernetes-in-Kubernetes,以及用无 root 临时集群引导实际集群。

映射关系示例是宿主 UID 1000 在用户命名空间内看到 UID 0。这个“root”只在命名空间映射范围内拥有相应能力,并不等于宿主机 root。该命名空间需在 Kubernetes 外部创建,例如由 Rootless Docker 准备。KubeletInUserNamespace 本身会忽略若干权限错误,例如设置 vm.overcommit_memory、kernel.panic 或读取 /dev/kmsg 时出现的错误;它不会替代宿主命名空间准备工作。

Beta 状态带来的变化

  • KubeletInUserNamespace 在 v1.37 中默认启用,但这不会自动把现有节点移入用户命名空间;既有 rootful 集群不会因此改变。
  • kubectl get nodes -o yaml 可显示 runningInUserNamespace 状态。管理员可据此标记或污点节点,避免需要真实宿主 root 的工作负载被调度到 Rootless 节点。
  • Kubernetes 自身的节点一致性端到端测试已在 Rootless 集群上运行。

相关生态变化包括:Linux v6.3 加入 idmapped tmpfs 支持;Kubernetes v1.33 默认启用 UserNamespacesSupport,使 hostUsers: false 的 Pod 无需额外配置即可创建;containerd v2.1 加入可写 cgroup 支持。这些变化使嵌套集群更可行,但不代表所有组合都兼容。

本地尝试入口

原文给出 kind 和 minikube 配合 Rootless Docker 的示例。下列命令会安装用户级 Docker 服务并创建集群,具有主机和集群副作用;本文只作静态阅读,没有执行。运行前应按目标操作系统的官方指南确认内核模块、systemd、sysctl、容器运行时版本和回滚步骤。

# Docker Rootless 的示例;执行会修改当前用户的服务配置
dockerd-rootless-setuptool.sh install
kind create cluster
# minikube 示例
dockerd-rootless-setuptool.sh install
minikube start --driver=docker

Usernetes 是作者维护的第三方 Rootless Kubernetes 发行版,支持多节点 Docker、Podman 或 nerdctl,通过 Flannel CNI 的 VXLAN 连接,也实验性支持 Kubernetes-in-Kubernetes。k3s 也支持 Rootless 模式,且当前代际不依赖外部 Rootless 容器运行时。部署命令和支持状态会随各项目版本变化,本文不对特定组合背书。

后续方向与核验范围

项目计划视采用情况与反馈,在未来版本考虑推进至 GA。原文还提到 KEP-5474(非特权容器可写 cgroup)和 KEP-5714(指定是否取消共享 cgroup 命名空间)作为简化嵌套集群的讨论方向。

本文静态核对了 Beta 语义、权限映射、生态条件、示例命令和 CVE 描述。没有安装软件、创建集群、运行命令或复现 CVE;没有验证任何具体 CNI/CSI 或宿主环境。静态审阅不构成安全审计,也不代表目标环境已兼容。

来源与署名:Akihiro Suda(NTT),《Kubernetes v1.37: KubeletInUserNamespace (aka Rootless mode) Graduates to Beta》,Kubernetes 官方博客,2026-09-04。原文与本图按 CC BY 4.0 标注,翻译与编辑改动已说明。


© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容