為什麼 Kata 容器不會取代kubernets:關於 Kata 容器的自述
Kata 容器項目於2017年12月開始啟動,用於構建與容器生態系統無縫對接的輕量級虛擬機。Kata容器結合了來自Intel Clear Containers 和Hyper runV 的技術,使得容器擁有虛擬機般的安全性。
Kata 容器解決了傳統容器的安全缺陷
Kata 容器縮短了與傳統VM的安全性和傳統Linux容器的輕量級優點之間的差距。傳統的容器們共享同一個底層linux內核。已知的漏洞允許惡意用戶「逃離」容器並訪問內核和共享的容器。尤其在多租戶環境中,針對這種情況需要做出大量努力才能保障系統安全。
傳統的容器使用 Linux control groups,又稱cgroups,用來管理和分配資源與namespaces,以提供容器間的隔離。更進一步的安全隔離是通過棄用linux功能,使用read-only掛載方式,強制訪問控制(MAC)策略有如像SELinux和 AppArmor*,
放棄系統調用轉而使用SECCOMP。這是很困難的,如果有可能的話,應該將這些安全策略應用到更加複雜的應用中去。
註:Seccomp(secure computing)是Linux kernel (自從2.6.23版本之後)所支持的一種簡潔的sandboxing機制
如你所見,大多數情況下,容器們都是在同一個VM中,這使得容器的性能無法得到保障。保障這些環境中的安全是Kata容器項目背後的驅動因素之一
Kata 通過使用硬體虛擬化來提供容器間隔離。就Docker*而言,kata-runtime在容器級別提供VM隔離;像Kubernetes,是在pod級別提供VM隔離;在後面的內容中,當我們提到container/pod時,意思是: container指docker,pod指kubernetes
對於Kata 容器而言,每個container/pod都是作為一個輕量級VM啟動的,有自己獨有的內核。由於每個container/pod現在都使用自己的VM運行,因此它們不能夠訪問主機內核,並且能夠獲得VM的所有安全方面的優勢。這簡化了為保護主機內核和容器漏洞所做的安全策略。
Kata 容器還使得container-as-a-service (CaaS)能在裸金屬上運行容器。由於容器之間的硬體隔離,Kata容器允許互不信息的用戶使用相同的集群,前提是有網路安全策略來提供群集內租戶之間的網路隔離。
Kata 容器如何與容器生態系統相適應
container中的runtime是處理容器生命周期的組件,它實現了諸如創建、啟動、停止、和刪除容器等workload。在Open Container Initiative (OCI)中,有一個runtime的規範,詳細說明了面向OCI-compatible runtime的API。
runC是OCI runtime的標準解決方案,它被描述為「根據OCI規範來生成和運行容器的CLI工具」。runC使用linux cgroups和namesapces來提供隔離。
Kata 容器是OCI的成員,而Kata 容器的runtime (Kata -runtime)將與OCI兼容
在Kubernetes中,runtime稱之為Container Runtime Interface (CRI),它處於一個更高的抽象級別,不應該與OCI-compatible runtime混淆
與docker引擎交互
對於Docker來說,kata-runtime是另一個可以使用的OCI-compatible runtime選項
在默認配置中,如果你安裝並運行Docker,那Docker引擎會:
1. 創建一個容器配置
2. 將此配置傳遞給runC
3. runC將根據Docker引擎提供的配置和workload創建一個容器
如果你安裝了Kata Container』s runtime, 即kata-runtime,您可以給Docker配置兩個container runtimes,讓用戶可以在每個容器的粒度上選擇使用哪一個;kata-runtime補充了runC並增強了Docker提供的解決方案。
有關更多細節,請參見Docker runtime文檔
https://docs.docker.com/engine/reference/commandline/dockerd/#docker-runtime-execution-options
在使用kata-runtime時,每個Docker容器將在它自己的輕量級VM中運行
Kata 容器與Kubernetes
Kubernetes 1.5引入了CRI (Container Runtime Interface),使得各種容器runtimes很容易接入。在此之前,Kubernetes只使用默認的Docker映像庫和它的默認OCI-compatible runtime :runC。由於runtime經常使用,在接下來討論中,我們管CRI runtime稱之為:CRI shim,runtime描述為 OCI-compatible runtime
自引進CRI後,一些CRI shims被引進,像cri-containerd, CRI-o, dockershim, and frakti。其中一些是調用OCI-based runtime,另外一些則是整體的解決方案。下圖展示了通過CRI實現解決方案的高級概覽。請注意,dockershim目前只支持runC,不支持kata-runtim。
Kata 容器為CRI shims提供了兩個介面,以管理基於Kubernetes pod的硬體虛擬化:
1. OCI-compatible runtime, 即kata-runtime。這是當前可用的CRI解決方案:cri-containerd 和 CRI-O。
2. 一個硬體虛擬化runtime API庫供CRI shims使用, 並提供了一些CRI-native implementations,Frakti就是一個樣例。
雖然安全沙箱的概念仍在工作在Kubernetes級別,但一些CRI implementations已經支持在單個節點上運行多個runtimes。例如,CRI-O支持受信任和不信任的沙箱。基於pod註解和默認的CRI-O配置,您可以混合運行VM和namespace-based pods。
下面這篇文章深入探討了在今天如何使用CRI-O實現這一點。
https://medium.com/cri-o/intel-clear-containers-and-cri-o-70824fb51811
VM隔離是在pod級別為kata-runtime提供的。在Kata容器內運行的容器通過命名空間和cgroups進行隔離和管理,類似於runC所做的工作。
你可以試試Kata 容器
Kata 容器1.0尚未發布,參與者正忙於完成kata-runtime特性;但是您可以使用runV或Clear Containers runtimes嘗試預覽Kata容器。
看看這個開發者指南:
https://github.com/kata-containers/documentation/wiki/Developer-Guide
Kata 容器是一個完全開源的項目——期待你的加入:Kata Containers on GitHub
katacontainers.io
GitHub:https://github.com/kata-containers
Slack: link: https://katacontainers.slack.com ; invite: http://bit.ly/KataSlack
IRC: #kata-dev on Freenode
Mailing list: http://lists.katacontainers.io/cgi-bin/mailman/listinfo
https://katacontainers.io/posts/why-kata-containers-doesnt-replace-kubernetes/
譯者介紹:
劉福,目前就職北京海雲捷迅,呆萌運維一枚
※趣圖:BUG改不完的程序猿
※無伺服器計算將改變關係資料庫的遊戲規則!
TAG:雲技術之家 |