在openshift上在docker中运行docker是否安全?

时间:2018-11-11 21:38:27

标签: docker kubernetes openshift docker-in-docker

我在服务器上构建了docker映像,该映像可以为Jenkins运行CI-CD。由于某些构建使用泊坞窗,因此我在映像中安装了泊坞窗,并且为了允许内部泊坞窗运行,我必须赋予它--privilege。

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

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

2 个答案:

答案 0 :(得分:0)

特权容器可以重新引导主机,替换主机的内核,访问任意主机设备(例如原始磁盘设备)以及重新配置主机的网络堆栈among other things。我认为这非常危险,没有比在主机上以root用户身份运行进程更安全的方法了。

我建议完全使用--privileged可能是一个错误。如果确实需要管理主机的过程,则应直接(作为根用户)在主机上运行它,而不要在隔离层内部运行,该隔离层会阻止其尝试执行的操作。有一些有限的升级特权很有用,但是如果 eg 您的容器需要 mlock (2),则应--cap-add IPC_LOCK以获得所需的特定特权,而不是开放整个世界。

(我的理解仍然是,generally considered a mistake是尝试在Docker内部运行Docker的首选,并且最好使用主机的Docker守护程序。当然,此 也可以对主机进行无限制的控制。 )

答案 1 :(得分:0)

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

尤其是 Buildah 是 Red Hat 自己的用于在容器内部构建的工具,但截至目前,我相信它们仍然无法完全无特权地运行。

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