Docker提高容器的安全和管理
arafat
8年前
<p>Docker无疑是时下最热门的IT技术,据测试,同等配置的机器上,运行Docker容器的数量是运行虚拟机数量的4-6倍。不过这里我要讲两个小问题:安全性和管理。</p> <p>很多企业或者开发人员都会忽略安全和管理,如果要简单的玩弄一下docker是很简单的,但是要在企业环境或生产环境使用docker却需要考虑这两方面的隐私。如果不清楚安全性或管理问题,这很可能是在引火烧身。</p> <h2>Kernel namespace</h2> <p>Docker初期是基于lxc,后来逐渐过渡到libcontainer,所以容器和传统linux container使用的是同一种安全机制。当你启动一个容器的时候,背后实际调用的是lxc或libcontainer在启动容器。这个命令会创建一系列的namespace和control groups。(注:namespace是用来创建一系列隔离用的,比如pid,网络,挂载点等;Control groups主要用来限定容器的CPU和内存)。</p> <p>这里要插一句lxc和libcontainer有什么区别呢?lxc和libcontainer都是操作系统级的虚拟化实现技术,应该来说是Docker的核心,初期的版本Docker使用的是lxc,很多都不受其控制。后来Docker公司决定用Go来重写这一部分,不出意外的话libcontainer会成为日后的默认linux conainer。不过不管是lxc还是libcontainer,其都是依赖于linux 的namespace 功能。Namespace提供了最直接的进程级的隔离。每一个容器拥有自己的网络栈,也就是说一个容器不能访问另一个容器的socket和网卡,当然相互之间是可以通过TCP/IP来进行访问的。</p> <p>从网络架构来说,所有的容器都挂载到一个桥接之上。这就是说容器类似于一个物理的机器链接到了交换机之上。有时候我们会问,Namespace到底稳定成熟不?实际上从linux内核的2.6.15开始,就支持了Namespace,具体时间是2008年。而且这项功能也已经广泛运用于生产环境中。Namespace实际是OpenVZ的替代品,OpenVZ是2005年Release的。因此,无论是设计和实现都是非常稳定的。</p> <h2>Control Groups</h2> <p>Control Groups是另一个linux容器的关键组件。它主要实现容器资源的限定,比如内存,CPU, Disk IO等等,有了这项功能,容器就不可能耗尽某一项系统资源。因此,通过合理的配置,可以有效的防御注入DDOS攻击。特别是当你的应用运行在PaaS或IaaS上时,必须防范资源的过渡消耗。而CGroup是在2006年就发布了,并被合并到了linux内核的2.6.24版本。</p> <h2>User Namespace</h2> <p>为提高安全性,Docker最新发布的Docker1.10使用一个叫做User Namespace的功能,容器可以在没有root权限的时候运行应用程序。通过user namespace,即使docker daemon以root运行,但是容器里面可以映射成不同的用户。同时,在新的镜像里面也引入了签名机制,每一个镜像都会有一个独有的签名,避免出现串改的可能性。</p> <h2>使用情况</h2> <p>基于容器的CaaS平台已经在世界500强企业使用。据Docker官方介绍,一些对安全性要求极高的公司,也开始使用CaaS平台。因为容器云平台在开发,运营和基础设施建设方面提供了很高的灵活性。 CaaS能够带动企业转变现有的应用开发模式,缩短开发周期。比如,一些涉密的公司,他们会要求只有签名通过的镜像可以部署到用户的环境中。这样既可以满足应用的可移植性,又可以做到安全。这对于使用公有云和混合云的企业尤为重要。</p> <p>“Docker爱好者群”入群学习请加微信:18780216673。</p> <p> </p> <p>来自: <a href="/misc/goto?guid=4959673600991984409" rel="nofollow">http://dockone.io/article/1332</a></p> <p> </p>