本文介紹安全沙箱運行時的核心優勢、適用場景,并對比容器服務Kubernetes版(ACK)安全沙箱和社區Kata Containers的性能,幫助您了解為什么選擇安全沙箱運行時。
背景信息
相比原有Docker運行時,安全沙箱為您提供了一種新的容器運行時選項,具備以下特點:
它可以讓您的應用運行在一個輕量虛擬機沙箱環境中,擁有獨立的內核,具備更好的安全隔離能力。
相比社區方案(Kata Containers),安全沙箱在存儲、網絡和穩定性方面都有優化和提升。
安全沙箱特別適合于不可信應用隔離、故障隔離、性能隔離、多用戶間負載隔離等場景,在提升安全性的同時,對性能影響非常小,并且具備與Docker容器一樣的用戶體驗,例如日志、監控、彈性等。
安全沙箱核心優勢
對比Docker運行時,安全沙箱核心優勢如下:
基于輕量虛擬機沙箱超強隔離。
NAS、直掛沙箱,直掛后的存儲性能與宿主機掛載模式性能一致。
媲美傳統runC容器的應用兼容性。
極高的應用綜合性能(相當于90% runC容器應用性能)。
在監控、日志、存儲等方面有著與runC一樣的使用體感。
支持RuntimeClass。
技能門檻要求低、簡單易用,您無需理解虛擬機技術原理,也不需要在虛擬機上操作。
相對社區Kata Containers,有著更強的穩定性。
ACK安全沙箱和社區Kata Containers對比
ACK安全沙箱相比社區Kata Containers,在性能上面具有較大優勢,如下表所示。
性能 | 性能分類 | ACK安全沙箱v2 | 社區Kata Containers |
沙箱啟動速度 | 約150ms | 約500ms | |
沙箱額外開銷 | 低 | 高 | |
容器RootFS | virtio-fs,性能:☆☆☆☆ | 9pfs,性能:☆ | |
容器存儲卷 | HostPath/EmptyDir | virtio-fs,性能:☆☆☆☆ | |
云盤塊存儲 | virtio-fs,性能:☆☆☆☆ | ||
NAS文件存儲 |
| ||
OSS對象存儲 | virtio-fs,性能:☆☆☆☆ | ||
網絡插件 |
| Flannel | |
監控告警 |
| 缺失安全沙箱Pod的磁盤和網絡監控指標。 | |
穩定性 | ☆☆☆☆☆ | ☆☆ |
ACK安全沙箱三大適用場景
以下是安全沙箱的三大適用場景。
場景一:相對于runC容器,安全沙箱(runV)容器可以強隔離不可信應用。
runC容器的安全風險
通過Namespace和Cgroups技術隔離的容器攻擊面大。
節點上所有容器共享Host Kernel,一旦內核出現漏洞,惡意代碼會逃逸到Host上,滲透到后端內網,執行惡意特權代碼,破壞系統服務和其他應用,竊取重要數據等。
應用本身的漏洞同樣會造成攻擊者滲透到內網。
您可以通過以下措施降低runC容器的安全風險:
Seccomp:系統調用過濾。
SElinux:限制容器進程、文件和用戶的權限。
Capability:限制容器進程Capability。
Rootless模式:禁止用戶以root身份運行容器Runtime和容器。
雖然以上措施可以在一定程度上強化runC容器的安全性,降低惡意容器應用攻擊Host Kernel的幾率,但是仍然無法解決容器逃逸利用Host Kernel漏洞的安全問題。
安全沙箱(runV)容器隔離潛在安全風險
通過把存在潛在安全風險的應用放置到成熟的輕量級虛擬機沙箱中,應用運行在獨立的GuestOS Kernel上,即便GuestOS Kernel出現安全漏洞,那么攻擊破壞面僅限于一個沙箱內,不會對Host Kernel以及其他容器有任何影響。安全沙箱(runV)容器配合Terway的NetworkPolicy能力,可以靈活地配置Pod的網絡訪問策略,真正做到系統隔離、數據隔離以及網絡隔離。
場景二:解決runC容器在故障放大、資源爭搶、性能干擾方面的問題。
Kubernetes使得我們很容易在一個節點上混合部署不同的應用容器,由于Cgroups并不能很好解決資源爭搶問題,導致同一節點上相同資源密集型(如CPU密集型、IO密集型等)的不同應用相互爭搶資源,導致應用的響應時間出現了嚴重的波動,總體響應時間偏長。當節點上某一應用異常和故障,如內存泄露、頻繁CoreDump等等導致節點整體負載升高,單容器觸發Host Kernel Bug導致系統宕機,單應用的故障延展到了整個節點,甚至進一步導致整個集群的不響應。安全沙箱(runV)容器通過獨立的GuestOS Kernel和Hypervisor,可以很好地解決runC容器在故障放大、資源爭搶、性能干擾方面的問題。
場景三:多租戶服務
通常一個企業內有多個業務線或部門部署自己的應用,不同的業務線或部門(多個租戶)之間有著較強的隔離訴求,如金融類業務不期望自己的物理環境運行著其他非安全敏感應用,傳統runC容器是無法有效避免不可信應用帶來的潛在安全風險。這種情況下,通常會選擇:
多個單租戶集群,如金融業務集群和其他非安全敏感業務分隔到多個獨立集群。
單個多租戶集群,需把不同業務線應用分隔到不同的Namespace中,每個節點只可被某個業務線獨占,配合資源配額、網絡策略等實現多租戶隔離。相對于多個單租戶集群,管控面較少,管理成本較低,但仍然沒有解決因某些租戶資源利用率低導致節點資源閑置浪費問題。
有了安全沙箱(runV)容器后,可以把集群內不可信應用通過虛擬機沙箱隔離起來,而不用擔心不可信應用容器逃逸造成的安全風險,這樣所有節點都可以混合各類應用容器,這樣做的好處是:
減少了資源調度的復雜度。
節點不再被單個業務獨占,減少資源碎片,提高節點資源利用率,節省集群整體資源成本。
安全沙箱(runV)容器使用輕量級虛擬機,性能媲美runC容器。