Kubernetes 支持 docker 用户命名空间重新映射
Kubernetes support for docker user namespace remapping
Docker支持user namespace remapping,使用户命名空间与宿主完全分离
当前的默认行为确保容器获得自己的用户和组管理,即它们自己的 /etc/passwd
和 /etc/group
版本,但容器进程在 运行 下相同主机系统上的 UID。这意味着如果您的容器 运行 具有 UID 1(根),它也会 运行 作为主机上的根。出于同样的原因,如果您的容器安装了 UID 1001 的用户“john”并使用该用户启动其主进程,则在主机上它也会 运行 具有 UID 1001,这可能属于用户“Will”并且也可以有管理员权限。
要完成用户命名空间隔离,需要启用重新映射,它将容器中的 UID 映射到主机上的不同 UID。因此,容器上的 UID 1 将映射到主机上的“非特权”UID。
Kubernetes 是否支持在底层容器运行时启用此功能?它可以开箱即用吗?
因此,它还不支持 Docker as per this (as alluded in the comments) and this。
但是,如果您正在考虑隔离您的工作负载,还有其他选择(虽然不一样,但选项都很好):
您可以使用 Pod Security Policies and specifically you can use RunAsUser, together with AllowPrivilegeEscalation=false。 Pod 安全策略可以绑定到 RBAC,因此您可以限制用户 运行 他们 pods.
的方式
换句话说,您可以强制您的用户 运行 pods 仅作为 'youruser' 并禁用 pod securityContext
中的 privileged
标志。您还可以在容器映像中禁用 sudo
和
此外,您可以删除 Linux Capabilities, specifically CAP_SETUID
. And even more advanced use a seccomp profile, use SElinux or an Apparmor 配置文件。
运行 不受信任工作负载的其他替代方案(撰写本文时处于 alpha 阶段):
Docker支持user namespace remapping,使用户命名空间与宿主完全分离
当前的默认行为确保容器获得自己的用户和组管理,即它们自己的 /etc/passwd
和 /etc/group
版本,但容器进程在 运行 下相同主机系统上的 UID。这意味着如果您的容器 运行 具有 UID 1(根),它也会 运行 作为主机上的根。出于同样的原因,如果您的容器安装了 UID 1001 的用户“john”并使用该用户启动其主进程,则在主机上它也会 运行 具有 UID 1001,这可能属于用户“Will”并且也可以有管理员权限。
要完成用户命名空间隔离,需要启用重新映射,它将容器中的 UID 映射到主机上的不同 UID。因此,容器上的 UID 1 将映射到主机上的“非特权”UID。
Kubernetes 是否支持在底层容器运行时启用此功能?它可以开箱即用吗?
因此,它还不支持 Docker as per this (as alluded in the comments) and this。
但是,如果您正在考虑隔离您的工作负载,还有其他选择(虽然不一样,但选项都很好):
您可以使用 Pod Security Policies and specifically you can use RunAsUser, together with AllowPrivilegeEscalation=false。 Pod 安全策略可以绑定到 RBAC,因此您可以限制用户 运行 他们 pods.
的方式换句话说,您可以强制您的用户 运行 pods 仅作为 'youruser' 并禁用 pod securityContext
中的 privileged
标志。您还可以在容器映像中禁用 sudo
和
此外,您可以删除 Linux Capabilities, specifically CAP_SETUID
. And even more advanced use a seccomp profile, use SElinux or an Apparmor 配置文件。
运行 不受信任工作负载的其他替代方案(撰写本文时处于 alpha 阶段):