0

我在可以为 Jenkins 运行 CI-CD 的服务器上构建了 Docker 映像。因为有些构建使用 Docker,所以我在我的镜像中安装了 Docker,为了让内部 Docker 运行,我不得不给它--privilege.

一切正常,但我想在 Openshift(或 Kubernetes)上的 docker 中运行 docker。问题在于获取--privilege权限。

在 Openshift 上运行特权容器是否危险,如果是,为什么以及多少?

4

2 回答 2

1

特权容器可以重新启动主机、替换主机的内核、访问任意主机设备(如原始磁盘设备)以及重新配置主机的网络堆栈等等。我认为这非常危险,而且并不比在主机上以 root 身份运行进程更安全。

我建议--privileged根本使用可能是一个错误。如果你真的需要一个进程来管理主机,你应该在主机上直接(以 root 身份)运行它,而不是在阻止它试图做的事情的隔离层内。有一些有限的提升权限的东西很有用,但是如果你的容器需要mlock (2) 你应该获得--cap-add IPC_LOCK你需要的特定权限,而不是打开整个世界。

(我的理解仍然是尝试在 Docker 中运行 Docker通常被认为是错误的,最好使用主机的 Docker 守护进程。当然,这也可以无限控制主机...)

于 2018-11-11T21:58:37.970 回答
0

简而言之,答案是否定的,它不安全。由于潜在的内存和文件系统损坏,Docker-in-Docker 远非安全,甚至挂载主机的 docker 套接字在任何环境中都是不安全的,因为它有效地赋予构建管道 root 权限。这就是制作BuildahKaniko等工具以及构建 S2I 等镜像的原因。

特别是 Buildah 是 Red Hat 自己的用于在容器内构建的工具,但到目前为止,我相信它们仍然不能完全无特权运行。

此外,在 Openshift 4 上,您根本无法运行 Docker-in-Docker,因为运行时已更改为 CRI-O。

于 2021-03-25T20:20:53.033 回答