關于Kata容器的那些事
譯文【51CTO.com快譯】我們開始努力將Oracle Linux云原生環(huán)境與Kata容器(Kata Containers)整合起來時,Kata容器對容器的安全邊界帶來的變化立即給我留下了印象深刻,我只想知道它是如何工作的。
本文試圖簡要介紹關于Kata容器的那些事。
深入介紹Kata容器之前,你可能需要了解Linux容器的簡要歷史。
1.Kata容器是什么?
Kata容器是一個開源項目,社區(qū)致力于使用輕量級虛擬機來構建安全的容器運行時環(huán)境,這些虛擬機的感覺和性能如同容器,但是使用硬件虛擬化技術作為第二層防御,提供更強大的工作負載隔離。
Kata容器源自英特爾Clear Containers和Hyper RunV項目。Kata容器使用現(xiàn)有的CPU功能(比如英特爾VT-X和AMD-V™),以便多個容器在同一個主機上運行時,將它們更有效地隔離開來。每個容器可以在自己的虛擬機中運行,并有自己的Linux內核。由于虛擬機之間的邊界,一個容器應該無法訪問另一個容器的內存(虛擬機管理程序+EPT/RVI)。
runc是Linux上的運行時規(guī)范參考實現(xiàn);它生成容器時,使用標準的Linux內核功能,比如AppArmour、capabilities(7)、控制組、seccomp、SELinux和命名空間(7),以控制權限和進出容器的數(shù)據(jù)流動。Kata容器通過將容器包裝在虛擬機中對此進行了擴展。
2.我何時應使用Kata容器?
runc是最常見的容器運行時環(huán)境,是Docker™、CRI-O和Kubernetes®的默認系統(tǒng)。Kata 容器為你提供了另一種選擇,它為混合使用或多租戶環(huán)境提供了更強大的隔離。 Kubernetes worker節(jié)點能夠同時使用runc和Kata容器,因此不需要專用硬件。
為了提高容器內的通信效率并減少資源使用開銷,Kata容器在一個虛擬機中執(zhí)行Kubernetes pod的所有容器。
決定何時使用runc、何時使用Kata容器取決于你自身的安全策略和狀況。影響何時需要更高級別的隔離的一些因素包括如下:
- 映像的來源———受信任vs不受信任。
- 該映像是內部生成還是從公共注冊中心下載?
- 容器中的內容
- 帶來競爭優(yōu)勢的內部軟件
- 容器處理的數(shù)據(jù)集(公共vs機密)
在虛擬環(huán)境中工作可能會影響性能,因此建議進行針對工作負載的測試,以評估對環(huán)境的影響程度(如果有的話)。
3.Kata容器如何工作?
安裝Oracle Linux云原生環(huán)境的Kubernetes模塊時,runc和Kata容器都與CRI-O一同部署,CRI-O為Kubernetes和容器運行時環(huán)境之間提供了必要的支持。
Kata容器使用一種經(jīng)過高度優(yōu)化、專門調整的Linux內核來引導虛擬機,并結合最小化的用戶空間,以支持容器操作,它們共同提供快速初始化機制。
為了創(chuàng)建Kata容器,Kubernetes用戶必須先創(chuàng)建一個RuntimeClass對象。之后,Pods或Deployment可以引用RuntimeClass表明要使用的運行時環(huán)境。Using Container Runtimes說明文檔(https://docs.oracle.com/en/operating-systems/olcne/runtimes/kata-pod-create.html)中附有示例。
Kata容器旨在提供“感覺和性能如同容器的輕量級虛擬機”;你的開發(fā)人員無需知道其代碼在虛擬機中執(zhí)行,也無需更改工作流程即可收到成效。
原文標題:Kata Containers: What, When and How,作者:Mark Cram
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】