gVisor新型沙箱容器運行時環(huán)境
gVisor 是一款新型沙箱解決方案,其能夠為容器提供安全的隔離措施,同時繼續(xù)保持遠優(yōu)于虛擬機的輕量化特性。gVisor能夠與Docker及Kubernetes實現(xiàn)集成,從而在生產(chǎn)環(huán)境中更輕松地建立起沙箱化容器系統(tǒng)。
gVisor能夠在保證輕量化優(yōu)勢的同時,提供與虛擬機類似的隔離效果。gVisor的核心為一套運行非特權(quán)普通進程的內(nèi)核,且支持大多數(shù)Linux系統(tǒng)調(diào)用。該內(nèi)核使用Go編寫,這主要是考慮到Go語言擁有良好的內(nèi)存管理機制與類型安全性。與在虛擬機當中一樣,gVisor沙箱中運行的應用程序也將獲得自己的內(nèi)核與一組虛擬設(shè)備——這一點與主機及其它沙箱方案有所區(qū)別。

gVisor通過在用戶空間內(nèi)攔截應用程序系統(tǒng)調(diào)用并充當訪客內(nèi)核,gVisor能夠提供強大的隔離邊界。而與需要一組固定資源的虛擬機不同,gVisor能夠隨時適應不斷變化的資源條件,這一點更像是普通Linux進程。gVisor很像是一種超虛擬化操作系統(tǒng),其與完整虛擬機相比擁有更靈活的資源利用方式與更低的固定成本,但這種靈活性的代價是其系統(tǒng)調(diào)用成本更高且應用程序兼容性略差。
gVisor運行時能夠與Docker及Kubernetes實現(xiàn)無縫化集成,這一集成效果通過匹配OCI運行時API的runsc(即‘run Sandboxed Container’的縮寫)實現(xiàn)。
runsc運行時可與Docker的默認容器運行時runc進行互換。其安裝非常簡單; 在安裝完成后,只需要一個額外標記即可在Docker內(nèi)運行沙箱化容器:
$ docker run --runtime=runsc hello-world $ docker run --runtime=runsc -p 3306:3306 mysql
在Kubenetes當中,大多數(shù)資源隔離在pod層面實現(xiàn),而這意味著pod能夠天然充當gVisor的沙箱邊界。Kubernetes社區(qū)目前正在對沙箱pod API進行標準化調(diào)整,但目前已經(jīng)開放實驗性支持供用戶體驗。
runsc運行時能夠在Kubernetes集群當中通過cri-o或cri-containerd等項目運行沙箱化pod——此類項目負責將Kubelet中的消息轉(zhuǎn)換為OCI運行時命令。
gVisor能夠?qū)崿F(xiàn)大部分Linux系統(tǒng)API(總計200項系統(tǒng)調(diào)用與計數(shù)),但仍有一部分無法支持。部分系統(tǒng)調(diào)用與參數(shù)目前尚無法使用,/proc與/sys文件系統(tǒng)中的某些特定部分同樣如此。因此,還有少數(shù)應用程序不能在gVisor當中運行。但除此之外,包括Node.js、Java 8、MySQL、Jenkins、Apache、Redis以及MongoDB等在內(nèi)的大多數(shù)應用程序皆可順利運作。
