在隔离的实例上安全地使用同一主机上的多个docker容器

时间:2017-11-01 04:33:55

标签: security docker docker-container

我知道,多个Docker容器可以在同一主机中使用,但是它们可以像隔离的实例一样安全地使用吗?我想运行多个安全和沙盒容器,这样容器就不会影响或访问其他容器。

例如,我是否可以提供监听不同端口的nginx和apache容器,完全相信每个容器只能访问自己的文件,资源等?

2 个答案:

答案 0 :(得分:2)

从某种意义上说,你问的是带有容器的百万美元问题,并且要清楚,恕我直言,问题没有黑白答案,而且平台/技术足够安全。"这是一个很大(而且很重要)的问题,创业公司的名单 - 更不用说他们已经收到的资金数量 - 围绕集装箱安全是一个可观的数字!

正如另一个答案中所提到的,容器的隔离是通过各种Linux内核功能(命名空间和cgroup)实现的,并且为这些功能添加更多安全性是另一种技术,如seccomp, apparmor(或SELinux),用户名称空间,或容器运行时的一般强化&安装它的节点(例如通过CIS benchmark guidelines)。开箱即用的默认安装和默认运行时参数可能足以完全信任Linux的内核隔离原语。但是,这很大程度上取决于您在容器工作负载中运行的内容信任级别。例如,这一切都在一个组织内部吗?可以从外部来源提交工作量吗?显然,可能性的范围可能会极大地影响您的信任程度。

如果您的用例可能很窄(例如,您提到来自nginx或apache的Web服务内容),并且您愿意做一些工作来处理基本映像创建,最小化和强化;添加一个--readonly根文件系统和一个功能限制apparmor和seccomp配置文件,绑定mount在内容服务+可写区域,没有可执行文件和非特权用户的所有权 - 所有这些东西可能是足够用于特定用例。

但是,无法保证当前未知的安全逃脱成为" 0day"对于未来的Linux容器,这导致推广轻量级虚拟化,通过来自hyper.shIntel Clear Containers的填充程序将容器隔离与实际硬件级虚拟化结合在一起例子。在使用另一个容器运行时运行完整虚拟化操作系统和在单个节点上使用单个守护程序信任内核隔离之间,这是一个愉快的媒介。添加这一层隔离层仍然存在性能成本和内存开销,但它远远低于完全虚拟化的操作系统,并且工作继续使性能影响降低。

有关所有"旋钮的更深层次的信息"可用于调整容器安全性,我在去年多次提供的演示文稿slideshare以及Skillsmatter的via video

令人难以置信的彻底" Understanding and Hardening Linux Containers"作者:Aaron Grattafiori也是一个很好的资源,在很多相同的主题上都有详尽的细节。

答案 1 :(得分:1)

文件系统隔离(以及内存和进程隔离)是docker容器的核心功能,基于Linux Kernel abilities

但是如果你想完全确定,你可以将容器部署在不同的节点上(每个节点由他们自己的docker守护进程管理),每个节点都是主机上的VM(虚拟机),确保完整的沙箱。 /> 然后,docker swarmKubernetes将能够协调这些节点及其容器,并使它们进行通信。

当您只有几个链接容器时,通常不需要这样做:它们应该能够由一个docker守护程序隔离管理。您可以使用user namespace进行额外隔离。

另外,使用节点分隔容器意味着同一台机器中的不同机器或不同的VM 与VM和容器的一个重要区别是VM将抢占资源(分配最小量的磁盘/内存/ CPU),这意味着您无法启动一百个VM,每个容器一个。与单个docker实例相反,如果容器不执行任何操作,则根本不会消耗太多磁盘空间/内存/ CPU。