容器被譽(yù)為是將應(yīng)用程序部署到服務(wù)器上的非常有效的手段。容器(例如基于Docker開源標(biāo)準(zhǔn)的容器)比虛擬機(jī)消耗更少的資源,并且容器的設(shè)計(jì)更容易,且實(shí)例化和提供更快。
然而,與虛擬機(jī)不同,容器并不是100%與底層主機(jī)操作系統(tǒng)(通常是Linux或Window Server)或服務(wù)器上的驅(qū)動(dòng)程序或其他應(yīng)用程序隔離的。
虛擬機(jī)是一個(gè)完整的虛擬化服務(wù)器,通過被稱為虛擬機(jī)管理程序的軟件分配磁盤空間、處理器周期和I/O資源。在虛擬機(jī)中可以找到真實(shí)服務(wù)器上的所有內(nèi)容:操作系統(tǒng)、設(shè)備驅(qū)動(dòng)程序、應(yīng)用程序、配置文件和網(wǎng)絡(luò)連接。
換句話說,從底層起,是裸機(jī)、服務(wù)器的主機(jī)操作系統(tǒng)、管理程序,然后是一個(gè)或多個(gè)虛擬機(jī),每個(gè)虛擬機(jī)都有自己的操作系統(tǒng)、驅(qū)動(dòng)程序和應(yīng)用程序。
相比之下,容器中的所有內(nèi)容都共享底層主機(jī)操作系統(tǒng)、設(shè)備驅(qū)動(dòng)程序和一些配置文件。例如Docker,它提供一個(gè)或多個(gè)容器,而不是管理程序。每個(gè)容器只保存應(yīng)用程序。這些應(yīng)用程序依賴于主機(jī)操作系統(tǒng)和驅(qū)動(dòng)程序,它也與在同一臺(tái)服務(wù)器上運(yùn)行的其他容器共享。
容器的好處是:開銷更小
如果在Linux服務(wù)器上有20臺(tái)Linux虛擬機(jī),則需要使用內(nèi)存和CPU資源運(yùn)行21個(gè)Linux實(shí)例,其中20個(gè)是虛擬機(jī),另一個(gè)運(yùn)行主機(jī)。啟動(dòng)所有這些Linux實(shí)例需要一定的時(shí)間,并且開銷很大。
另一方面,所有這些Linux虛擬機(jī)都是相互隔離的,事實(shí)上,它們甚至可能是不同版本的Linux.在VM模型中,這完全沒問題。
相反,如果在Linux服務(wù)器上有20個(gè)容器,則只需要一個(gè)Linux副本運(yùn)行。啟動(dòng)一個(gè)容器非???,并且消耗的資源要少得多,只有一個(gè)Linux內(nèi)核和一組共享庫。
但是,一個(gè)容器中的出現(xiàn)安全問題可能會(huì)泄漏并影響其他容器或其應(yīng)用程序。
虛擬機(jī)的好處:更強(qiáng)的隔離
現(xiàn)代微處理器、主機(jī)操作系統(tǒng)(Linux和Windows)以及虛擬機(jī)管理程序(VMware ESX,Citrix XenServer和Microsoft Hyper-V)中的技術(shù)可在每個(gè)虛擬機(jī)之間提供基于硬件的隔離。這種保護(hù)是同心環(huán):每個(gè)環(huán)都受到較高編號(hào)的環(huán)的保護(hù),其中0環(huán)位于中心,與應(yīng)用隔離。
在虛擬機(jī)系統(tǒng)中,主機(jī)操作系統(tǒng)的內(nèi)核在0環(huán)中運(yùn)行,這意味著什么都無法達(dá)到。管理程序在環(huán)1中運(yùn)行。而單個(gè)虛擬機(jī)在環(huán)2中運(yùn)行,因此無法訪問環(huán)1內(nèi)的管理程序或操作系統(tǒng)。
更重要的是,管理程序可以使用它的環(huán)1權(quán)限來執(zhí)行規(guī)則,防止一個(gè)VM訪問另一個(gè)VM的內(nèi)存、應(yīng)用程序或資源。
由于Docker Daemon不是環(huán)1管理程序,而是簡單的環(huán)2應(yīng)用程序,所以在容器中事物并不是同樣安全的。因此,硬件中沒有任何東西可以完全阻止一個(gè)容器對(duì)底層服務(wù)器進(jìn)行更改,或者訪問其他容器的內(nèi)存、存儲(chǔ)或設(shè)置。雖然有軟件保護(hù),但它們并非難以穿透。
如何保護(hù)容器
基于容器的服務(wù)器的安全性應(yīng)視為適合“friends and family”:我們應(yīng)該了解并信任在該服務(wù)器上運(yùn)行的所有應(yīng)用程序。
但是我們不需要知道或信任在服務(wù)器上運(yùn)行的其他虛擬機(jī)上的應(yīng)用程序,這就是為什么云托管公司使用虛擬機(jī)而不是容器來隔離客戶的軟件和數(shù)據(jù)的原因。
保護(hù)容器不易受到傷害,可以歸結(jié)為以下幾種常見方法。首先,最小化容器化軟件的攻擊面,以便在受到攻擊時(shí),將數(shù)據(jù)泄漏的危險(xiǎn)性降到最小。
另一個(gè)是嚴(yán)格控制對(duì)容器的訪問,并且如果有必要,需要在自己的服務(wù)器上隔離特別敏感的容器。
一定要研究使用的容器系統(tǒng)以及底層主機(jī)操作系統(tǒng)。例如,那些在Red Hat Linux上運(yùn)行的容器應(yīng)該查看公司的“十層容器安全”文檔。其他必讀內(nèi)容是Docker的“容器安全入門”和Microsoft的“在Azure容器服務(wù)中確保Docker容器安全”。
容器是將應(yīng)用程序部署到云中的最快、最有效的方式,并且比虛擬機(jī)的資源效率更高。目前的問題是容器不像虛擬機(jī)那樣安全。但只要在使用容器的時(shí)候考慮到這一點(diǎn),你將能夠得到更好的體驗(yàn)。
-
容器
+關(guān)注
關(guān)注
0文章
492瀏覽量
22027 -
虛擬機(jī)
+關(guān)注
關(guān)注
1文章
905瀏覽量
28022
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論