容器技術是操做系統層面的一種虛擬化技術。在Linux系統下,容器可以利用Namespaces、AppArmor、SELinux配置、Chroot以及CGroups等內核功能,交付一套相似於虛擬機的隔離性環境。通過不斷的發展,容器技術所帶來的輕量級、隔離性、標準化以及可大規模部署的特性促生了微服務和雲原生應用的普及和發展。html
Docker容器安全
毫無疑問,Docker是目前最具人氣且應用最爲普遍的容器技術。爲何呢?做者總結了如下主要的兩個緣由。性能優化
一、和早期容器技術不一樣,Docker不僅是針對了應用對主機資源的共享和隔離,它更加關注應用的微服務化,大規模部署和管理自動化。微服務和雲原生應用的發展極大的提升了Docker技術的大衆接受程度。服務器
Docker所採用的分層鏡像模型讓Docker對應用環境的封裝更加輕量級和標準化,讓鏡像更加容易的共享和分發,極大的簡化了大規模部署和運維的難度。網絡
Docker鏡像模型的Copyon Write機制和Volume機制合理的知足和促進了應用的無狀態化和微服務化。負載均衡
Docker提倡一個應用(進程)一個容器,符合微服務的理念。框架
二、Docker不僅是一個工具包,圍繞它的是一整套生態系統。包括鏡像庫、容器管理調度、網絡、存儲、安全。這一整套生態系統讓應用採用容器技術進行大規模的封裝,部署,運維,管理成爲可能。運維
容器的特性如何在生產環境中發揮所長,還須要其生態圈中一系列的工具、產品和方案做以支撐。如下咱們會對Docker以及它表明的容器技術生態系統作進一步的介紹。分佈式
容器生態圈微服務
下圖中的內容就是容器生態圈中的各個組件,咱們將會從下至上逐一分層解析。
一、容器OS
容器OS並非運行容器的必要條件,容器也能夠運行在通用Linux中。大部分的容器OS即爲Linux OS的精簡版。相比大而全的Linux OS,容器OS如RancherOS、CoreOS、Redhat Atomic、Ubuntu Core、VMware Photon具備更加輕量,佔有資源更少的特徵,適合於更加標準化的數據中心和IOT的一些領域。同時,Microsoft也於2015年推出Windows Nano Server,並將其做爲Windows2016的安裝選項,其大小相比完整的Windows2016部署縮小了90%以上。
二、容器引擎
容器引擎負責容器應用的隔離和資源共享。它驅動和管理主機上全部的容器,而且包括了容器卷管理、容器網絡管理、容器配置、鏡像管理以及容器日誌。容器生態圈中容器引擎主要有兩個標準OCI和AppC,兩個引擎Docker和RKT。 如下是一張對比表:
三、容器存儲
容器中通常運行是無狀態應用。對於有狀態應用,應用的數據持久化就須要容器存儲的支持。Docker爲了支持第三方存儲方案,在1.8版本引入Volume Plugin機制。Flocker做爲Volume Plugin,須要和第三方外部存儲結合使用爲容器提供持久化存儲,同時也屏蔽掉第三方存儲系統的差別,相似Cinder在OpenStack中的位置。而Torus (項目已於2017年2月中止開發,「Developmenton Torus at CoreOS stopped as of Feb 2017」引用自Github Torus項目說明)和Comet(有容雲)做爲獨立的分佈式存儲系統,可直接爲容器提供完整的數據存儲服務。
Comet存儲系統做爲國內少有的自主研發分佈式系統,除了針對容器特性進行性能優化外,也提供了多級數據保護,應用感知等企業級存儲特性。
四、容器網絡
容器網絡解決容器在大規模部署後的互聯互通的問題。主要有Docker原生的CNM容器網絡模型和CoreOS支持的CNI容器網絡模型。除了Docker原生的Libnetwork網絡方案,在容器網絡生態圈中,有如下幾種商業容器網絡方案。
Flannel是CoreOS爲Kubernetes設計的基於CNI模型的網絡方案。它讓各個容器採用UDP Overlay或者Vxlan的方式互聯,而且讓集羣中的不一樣節點主機建立的容器都具備全集羣惟一的虛擬IP地址。
Weaver和Flannel在不少方面比較相似。可是Weaver採用Name Service的方式來進行IP分配管理,不須要一個全局的Kv Store。
Calico是一個純三層網絡,採用BGP的技術來進行路由交換。因爲不像其餘幾個網絡模型同樣須要封包,它的性能相對最優。
五、鏡像倉庫
鏡像倉庫提供了鏡像的存儲、及pull/push的服務。倉庫分爲公有倉庫(如Docker Hub、Quay)和私有倉庫(如AppHouse、Harbor)兩種形式。最大的公有倉庫是Docker Hub,即Docker官方的鏡像倉庫。因爲網絡訪問限制的緣由,或企業用戶對數據安全性考慮的緣由,也能夠在企業私有數據中心創建私有鏡像倉庫,可經過部署AppHouse(有容雲)或者Harbor來實現。
部署鏡像倉庫須要考慮的是鏡像存儲的安全性和系統的容錯性。可分別經過搭建企業級存儲系統或分佈式存儲系統來保障鏡像數據的完整性,並選擇具備高可用特性的鏡像倉庫進行實施和部署。
六、容器安全
容器缺乏一個像虛擬機所擁有的安全邊界。容器的快速遷移,升級和部署的特性也帶來了新的安全隱患。容器安全可分爲鏡像安全和容器運行時安全。
鏡像安全:使用互聯網來歷不明的鏡像、或是從互聯網下載不明鏡像做爲基礎鏡像、或是製做鏡像時對端口和服務開啓沒有嚴格的限制和把控、DockerFile中惡意程序等,都將會致使生成高危漏洞的鏡像。對於鏡像的安全建議在兩階段進行控制,一是鏡像提交到鏡像倉庫時;一是進行週期的鏡像掃描;同時,對於已發佈或發現的漏洞風險,進行及時更新。
容器運行時風險:容器運行時風險來自於多方面,對外提供服務的容器會收到DDOS攻擊,從而致使主機上的全部容器出現資源不足;容器使用不當會致使主機Root權限泄漏;使用者權限太高會經過容器對主機文件修改致使系統崩潰;數據卷共享致使主機上容器對數據篡改等。目前已有用戶開始關注容器安全的問題,同時也有很多廠商也推出了針對容器運行時安全的商業化方案。
Clair是CoreOS開源的容器鏡像安全分析器,具備鏡像安全掃描和提供修復建議的功能,目前也已有多個廠家將其集成在自身的容器平臺中。
TwistLock在鏡像掃描和容器運行時都有防禦方案。Aqua的CSP在2017年2月也發佈了2.0版本,官方表示將和Kubernetes會有更好的結合。
AppSafe是國內容器廠家有容雲推出的容器安全產品,針對容器進行智能安全策略配置,並可根據配置策略進行實時防禦。
七、容器編排
容器平臺是容器應用大規模部署,升級和運維的管理平臺。容器的編排和資源調度是容器平臺的核心功能。容器平臺也提供服務發現、運行監控、擴容縮容、負載均衡、灰度升級、故障冗餘等功能。
Swarm是Docker的原生集羣工具,Swarm使用標準的Docker API來管理容器集羣。
Kubernetes 是一個以Google Borg 爲原型的開源項目。可實現大規模、分佈式、高可用的容器集羣。目前國內大部分容器廠家產品都是基於Kubernetes進行二次開發和方案封裝,這裏暫不贅述。
Mesos是Apache下的開源分佈式資源管理框架。基於Mesos之上能夠運行不一樣的分佈式計算平臺,如Spark、Storm、Hadoop、Marathon。Mesos+Marathon能夠用來管理大規模的容器集羣。
八、運維
容器平臺運行和管理着成千上萬的容器及應用。如何能從資源(主機、容器)緯度和應用的緯度來及時監控和日誌收集,也成爲容器進入生產環境繞不開的話題。目前容器的監控和日誌方案分爲開源方案和SaaS服務兩種:
在之後的文章裏咱們會對容器調度和編排作重點的介紹,容器生態還有哪些組件和專一於某一領域的廠家、技術或產品,歡迎小夥伴們回覆和討論。
附: 容器歷史發展:http://www.youruncloud.com/blog/114.html