Docker提高容器的安全和管理
Docker無疑是時下最熱門的IT技術,據測試,同等配置的機器上,運行Docker容器的數量是運行虛擬機數量的4-6倍。不過這里我要講兩個小問題:安全性和管理。
很多企業或者開發人員都會忽略安全和管理,如果要簡單的玩弄一下docker是很簡單的,但是要在企業環境或生產環境使用docker卻需要考慮這兩方面的隱私。如果不清楚安全性或管理問題,這很可能是在引火燒身。
Kernel namespace
Docker初期是基于lxc,后來逐漸過渡到libcontainer,所以容器和傳統linux container使用的是同一種安全機制。當你啟動一個容器的時候,背后實際調用的是lxc或libcontainer在啟動容器。這個命令會創建一系列的namespace和control groups。(注:namespace是用來創建一系列隔離用的,比如pid,網絡,掛載點等;Control groups主要用來限定容器的CPU和內存)。
這里要插一句lxc和libcontainer有什么區別呢?lxc和libcontainer都是操作系統級的虛擬化實現技術,應該來說是Docker的核心,初期的版本Docker使用的是lxc,很多都不受其控制。后來Docker公司決定用Go來重寫這一部分,不出意外的話libcontainer會成為日后的默認linux conainer。不過不管是lxc還是libcontainer,其都是依賴于linux 的namespace 功能。Namespace提供了最直接的進程級的隔離。每一個容器擁有自己的網絡棧,也就是說一個容器不能訪問另一個容器的socket和網卡,當然相互之間是可以通過TCP/IP來進行訪問的。
從網絡架構來說,所有的容器都掛載到一個橋接之上。這就是說容器類似于一個物理的機器鏈接到了交換機之上。有時候我們會問,Namespace到底穩定成熟不?實際上從linux內核的2.6.15開始,就支持了Namespace,具體時間是2008年。而且這項功能也已經廣泛運用于生產環境中。Namespace實際是OpenVZ的替代品,OpenVZ是2005年Release的。因此,無論是設計和實現都是非常穩定的。
Control Groups
Control Groups是另一個linux容器的關鍵組件。它主要實現容器資源的限定,比如內存,CPU, Disk IO等等,有了這項功能,容器就不可能耗盡某一項系統資源。因此,通過合理的配置,可以有效的防御注入DDOS攻擊。特別是當你的應用運行在PaaS或IaaS上時,必須防范資源的過渡消耗。而CGroup是在2006年就發布了,并被合并到了linux內核的2.6.24版本。
User Namespace
為提高安全性,Docker最新發布的Docker1.10使用一個叫做User Namespace的功能,容器可以在沒有root權限的時候運行應用程序。通過user namespace,即使docker daemon以root運行,但是容器里面可以映射成不同的用戶。同時,在新的鏡像里面也引入了簽名機制,每一個鏡像都會有一個獨有的簽名,避免出現串改的可能性。
使用情況
基于容器的CaaS平臺已經在世界500強企業使用。據Docker官方介紹,一些對安全性要求極高的公司,也開始使用CaaS平臺。因為容器云平臺在開發,運營和基礎設施建設方面提供了很高的靈活性。 CaaS能夠帶動企業轉變現有的應用開發模式,縮短開發周期。比如,一些涉密的公司,他們會要求只有簽名通過的鏡像可以部署到用戶的環境中。這樣既可以滿足應用的可移植性,又可以做到安全。這對于使用公有云和混合云的企業尤為重要。
“Docker愛好者群”入群學習請加微信:18780216673。
來自: http://dockone.io/article/1332