本文发布已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已不正确。
Kubernetes 1.25:alpha 支持使用用户命名空间运行 Pod
Kubernetes v1.25 引入了对用户命名空间的支持。
这是在 Kubernetes 中运行安全工作负载的重大改进。每个 Pod 将仅有权访问系统上可用的 UID 和 GID 的有限子集,从而增加了一个新的安全层来防止同一系统上运行的其他 Pod 的攻击。
它是如何工作的?
在 Linux 上运行的进程可以使用最多 4294967296 个不同的 UID 和 GID。
用户命名空间是一项 Linux 功能,允许将容器中的一组用户映射到主机中不同的用户,从而限制进程可以有效使用的 ID。此外,在新用户命名空间中授予的功能不适用于主机初始命名空间。
为什么它很重要?
用户命名空间之所以重要,主要有两个原因
提高安全性,因为它们限制了 Pod 可以使用的 ID,因此每个 Pod 可以在其自己单独的具有唯一 ID 的环境中运行。
能够以更安全的方式以 root 身份运行工作负载。
在用户命名空间中,我们可以将 Pod 内部的 root 用户映射到容器外部的非零 ID,容器认为自己以 root 身份运行,而从主机的角度来看,它们只是一个普通的非特权 ID。
该进程可以保留通常仅限于特权 Pod 的功能,并且可以以安全的方式执行此操作,因为在新用户命名空间中授予的功能不适用于主机初始命名空间。
如何启用用户命名空间?
目前,用户命名空间支持是选择性加入的,因此您必须在 Pod 规范节下将 hostUsers
设置为 false
来为 Pod 启用它
apiVersion: v1
kind: Pod
spec:
hostUsers: false
containers:
- name: nginx
image: docker.io/nginx
此功能位于功能门后,因此请确保在可以使用新功能之前启用 UserNamespacesStatelessPodsSupport
门。
运行时还必须支持用户命名空间
containerd:计划在 1.7 版本中支持。有关更多详细信息,请参阅 containerd 问题 #7063。
CRI-O:v1.25 支持用户命名空间。
在 cri-dockerd
中对此的支持 尚未计划。
如何参与?
您可以通过多种方式联系 SIG Node
您也可以直接联系我们
- GitHub / Slack:@rata @giuseppe