Docker支持用户名称空间重映射,使用户名称空间与主机完全分离。
当前默认行为确保容器获得自己的用户和组管理,即/etc/passwd
和/etc/group
的自己版本,但容器进程在主机系统上的相同UID下运行。这意味着,如果您的容器以UID 1(root(运行,它也将以root身份在主机上运行。同样,如果您的容器具有用户";约翰;在安装了UID1001并与该用户一起启动其主进程的情况下,在主机上,它也将与UID1001一起运行,该UID1001可能属于用户";Will"并且还可以拥有管理权限。
要完成用户命名空间隔离,需要启用重映射,它将容器中的UID映射到主机上的不同UID。因此,容器上的UID 1将被映射到"0";非特权";主机上的UID。
Kubernetes是否支持在底层Container Runtime上启用此功能?它能开箱即用吗?
因此,根据this(如注释中所暗示的(和this,它还没有像Docker那样得到支持。
然而,如果你正在考虑隔离你的工作负载,还有其他选择(这不一样,但选项很好(:
您可以使用Pod安全策略,特别是可以使用RunAsUser和AllowPrivilegeEscalation=false。Pod安全策略可以绑定到RBAC,这样你就可以限制用户如何运行他们的Pod。
换句话说,您可以强制用户仅以"youruser"的身份运行pod,并禁用pod中的privileged
标志securityContext
。您还可以在容器映像中禁用sudo
和。
此外,您可以删除Linux功能,特别是CAP_SETUID
。更高级的是使用seccomp配置文件,使用SElinux或Apparmor配置文件。
运行不可信工作负载的其他替代方案(截至本文撰写之时为alpha(:
- Kata Containers
- Nabla集装箱
- gVisor