编程 Kubernetes v1.37:Rootless 模式(KubeletInUserNamespace)升级至 Beta

2026-09-06 15:14:57

Kubernetes v1.37:Rootless 模式(KubeletInUserNamespace)升级至 Beta

Kubernetes 官方博客宣布,Kubernetes v1.37 中 KubeletInUserNamespace 特性(即 Rootless mode)正式从 Alpha 升级至 Beta。这一特性允许 kubelet 在非特权用户命名空间中运行,无需 root 权限,从而显著提升 Kubernetes 节点的安全性。这是 Kubernetes 在多租户和安全隔离方向的重要进展。

什么是 Rootless 模式

传统 Kubernetes 的安全问题

传统 Kubernetes 部署中,kubelet 需要以 root 权限运行,因为它需要:

  • 创建和管理网络命名空间
  • 挂载文件系统
  • 配置 cgroup
  • 管理容器生命周期

这带来了安全风险:如果 kubelet 被攻破,攻击者可能获得节点的 root 权限,进而影响整个集群。

Rootless 模式的解决方案

KubeletInUserNamespace 特性允许 kubelet 在用户命名空间(user namespace)中运行。用户命名空间是 Linux 内核提供的安全隔离机制,它将容器内的 root 用户映射到宿主机上的非特权用户。

这意味着:

  • kubelet 在其命名空间内看起来是 root,但在宿主机上是非特权用户
  • 即使 kubelet 被攻破,攻击者也无法获得宿主机的 root 权限
  • 显著降低了容器逃逸的风险

技术实现

用户命名空间映射

Rootless 模式的核心是用户命名空间映射。kubelet 在启动时创建一个用户命名空间,并将宿主机上的非特权 UID/GID 范围映射到命名空间内的 root(UID 0)。

这需要:

  • 宿主机上配置 /etc/subuid/etc/subgid,为用户分配可映射的 UID/GID 范围
  • kubelet 以非 root 用户启动
  • kubelet 在用户命名空间内创建容器

与 Rootless Docker/Podman 的关系

Rootless 模式与 Rootless Docker 和 Podman 的 rootless 模式概念类似,但有重要区别:

  • Rootless Docker/Podman 是单容器引擎的 rootless 运行
  • Kubernetes Rootless 模式是整个 kubelet 的 rootless 运行,包括 Pod 管理、网络、存储等

Beta 阶段的改进

从 Alpha 升级到 Beta,Kubernetes 团队做了大量改进:

1. 稳定性提升

  • 修复了多个与用户命名空间相关的 bug
  • 改进了 cgroup v2 的支持
  • 优化了网络插件的兼容性

2. 功能完善

  • 支持更多存储插件
  • 改进了设备插件的支持
  • 增强了与 CNI 插件的集成

3. 文档和测试

  • 完善了官方文档
  • 增加了端到端测试覆盖率
  • 提供了更详细的部署指南

适用场景

1. 多租户环境

在多租户 Kubernetes 集群中,Rootless 模式可以:

  • 降低单个租户被攻破后的影响范围
  • 满足金融、政府等行业的严格安全要求
  • 支持在共享基础设施上运行不可信工作负载

2. 边缘计算

边缘设备通常资源有限且物理安全难以保证:

  • Rootless 模式降低了边缘节点被物理攻破后的风险
  • 可以在受限环境中更安全地运行 Kubernetes

3. 开发环境

开发者可以在自己的机器上:

  • 无需 root 权限运行完整的 Kubernetes 集群
  • 更安全地测试集群级别的功能
  • 与生产环境更一致的开发体验

限制和注意事项

1. 内核要求

Rootless 模式需要较新的 Linux 内核,支持:

  • 用户命名空间(user namespaces)
  • cgroup v2
  • 网络命名空间

建议使用 Linux 5.4 或更高版本内核。

2. 存储插件兼容性

某些存储插件可能需要 root 权限才能正常工作,特别是:

  • 需要挂载特定文件系统的插件
  • 需要直接访问块设备的插件
  • 某些 CSI 驱动

在使用 Rootless 模式前,需要验证存储插件的兼容性。

3. 网络插件兼容性

网络插件也可能需要特殊配置:

  • 某些 CNI 插件可能需要修改以支持 rootless 运行
  • 网络策略的实现可能受限
  • Service 类型 LoadBalancer 可能需要额外配置

4. 性能开销

用户命名空间引入了一定的性能开销:

  • UID/GID 映射的额外计算
  • 某些系统调用的间接层
  • 文件系统权限检查的额外步骤

在大多数场景下,这个开销是可以接受的,但在高性能场景下需要评估。

如何启用

在 Kubernetes v1.37 中,KubeletInUserNamespace 特性默认在 Beta 阶段启用。要使用 Rootless 模式,需要:

  1. 确保宿主机内核支持用户命名空间和 cgroup v2
  2. 配置 /etc/subuid/etc/subgid
  3. 以非 root 用户启动 kubelet
  4. 在 kubelet 配置中启用相关选项
  5. 配置兼容的 CNI 和 CSI 插件

详细的部署步骤请参考 Kubernetes 官方文档。

总结

Kubernetes v1.37 中 Rootless 模式升级至 Beta 是 Kubernetes 安全演进的重要里程碑。通过允许 kubelet 在非特权用户命名空间中运行,Rootless 模式显著降低了容器逃逸和节点被攻破的风险,特别适用于多租户环境、边缘计算和安全敏感场景。虽然在存储插件、网络插件和性能方面仍有一些限制,但随着社区的持续改进,Rootless 模式有望成为 Kubernetes 部署的标准安全选项。对于关注集群安全的运维团队来说,现在是开始评估和测试 Rootless 模式的好时机。

来源:https://kubernetes.io/blog/2026/09/04/kubernetes-v1-37-rootless-beta/

推荐文章

程序员茄子在线接单