AICon 深圳站聚焦 Agent 技术、应用与生态,大咖分享实战干货 了解详情
写点什么

gVisor:谷歌发布的一个用于提供安全隔离的轻量级容器运行时沙箱

  • 2018-05-21
  • 本文字数:2060 字

    阅读完需:约 7 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

谷歌发布了一种新型沙箱 gVisor ,可以用于为资源占用较少、不需要运行完整 VM 的容器提供安全隔离。gVisor 的核心是一个使用 Go 编写的开源用户空间内核,与现有的容器技术相比,其设计做了不同的权衡,它实现了 Linux 系统表面的主要部分。该项目包含集成了 Docker 和 Kubernetes 的 OCI 运行时“runsc”。

据 gVisor 项目的 GitHub README 介绍,gVisor 是一个作为普通非特权进程运行的内核,支持大多数的 Linux 系统调用。就像在 VM 中一样,在 gVisor 沙箱中运行的应用程序有自己的内核和虚拟设备,与主机和其它沙箱区分开来。通过拦截应用程序系统调用并作为客户内核运行,gVisor 提供了强隔离边界,可以将其视为极致半虚拟化的操作系统,“与完整的VM 相比,资源占用更灵活,固定成本更低”。不过,这种灵活性牺牲了性能和兼容性:对于频繁进行系统调用的工作负载,gVisor 的性能可能会差一些;虽然gVisor 实现了Linux 系统API 的一大部分(目前200 个系统调用),但有几个系统调用和参数还不支持(/proc 和/sys 文件系统的某些部分),也就是说,并不是所有的应用程序都可以在gVisor 内运行

gVisor 分层(图片来自项目的GitHub 库

谷歌云平台(GCP)博客关于gVisor 的公告指出,容器已经彻底改变了组织开发、打包和部署应用程序的方式,但是同时,暴露给容器的系统表面很宽,许多安全专家“不建议在容器中运行不受信任的应用程序或者潜在的恶意应用程序”。为了佐证这种说法,该博文引用了opensource.com 的一篇文章“ Docker 容器真的安全吗?”,不过,需要注意的是,这篇文章是 2014 年发表的,从那时到现在,容器安全领域的许多东西都发生了变化,尤其是和Docker 相关的

不过,目前的容器技术仍然有许多广为人知的安全挑战,我们之前发表在InfoQ 的文章“ Docker 与高安全性的微服务:总结 Aaron Grattafiori 于 DockerCon 2016 的发言”中罗列过。其中一个主要的问题是,从单一共享内核获得效率和性能意味着容器逃逸可能成为一个漏洞。相应地,谷歌认为,人们越来越希望运行异构性更高、信任度更低的工作负载,这就引发了人们对于沙盒容器的兴趣,“容器可以帮助我们在主机操作系统和在容器中运行的应用程序之间提供一个安全的隔离边界”。

gVisor 限制了应用程序可访问的主机内核表面,同时又让应用程序可以访问它们希望访问的所有特性。和大多数内核不同,gVisor 并没不假定或需要一套固定的硬件资源;相反,它利用已有的主机内核功能,作为一个普通的用户空间进程运行。gVisor 会拦截应用程序的所有系统调用,并做必要的工作为它们提供服务。与其他容器技术相比,一个关键的区别是,gVisor 不是简单地把应用程序系统调用重定向给主机内核,而是实现了大多数内核原语(信号量、文件系统、Futex、管道、mm 等),并基于这些原语实现了系统调用处理程序。

为了提供纵深防御,限制主机系统表面,gVisor 运行时被分成了两个独立的进程。第一个是Sentry 进程,它包含内核,负责执行用户代码,处理系统调用。第二个是 Gofer ,它是一个文件系统操作代理,超出沙箱(非内部 proc 或 tmp 文件、管道等)的文件系统操作会通过 9P 连接发送给它。

gVisor Sentry 和 Gofer 架构(图片来自项目的GitHub 库

Sentry 需要一个平台来实现基本的上下文切换和内存映射功能。现在,gVisor支持两个平台 Ptrace 平台,使用 SYSEMU 功能执行用户代码,不需要执行主机系统调用;KVM 平台(试验性),使 Sentry 充当客户 OS 和虚拟机监视器(VMM),并在两者之间无缝地来回切换。

gVisor 运行时通过“ runsc ”(“run Sandboxed Container”的缩写)集成了 Docker 和 Kubernetes,遵循 OCI 运行时 API 标准。runsc 运行时可以和 runc 互换,后者是 Docker 的默认容器运行时。在 Kubernetes 中,大多数资源隔离发生在 pod 层,这让 pod 特别适合作为 gVisor 沙箱的边界。Kubernetes 社区目前正在规范化沙箱pod API ,但是,现在已经提供了试验性支持。runsc 运行时可以通过 cri-o 或者 cri-containerd 项目在 Kubernetes 集群中运行沙箱化的 pod。这两个工具会把 Kubelet 的消息转换成 OCI 运行时命令。

至于相关项目, Kata 容器是一个开源项目,使用“非常轻量级的”VM 来保证容器隔离的资源占用最小化。和 gVisor 类似,Kata 包含一个兼容 Docker 和 Kubernetes 的 OCI 运行时。在 HackerNews 上,有许多关于在这些技术之间进行取舍的讨论,其中有个用户表示“在[这些不同的沙箱技术] 之间进行取舍主要考虑的是兼容性、安全边界健壮性和性能”。

gVisor 使用 Go 语言编写,选择它是考虑到它的内存和类型安全性。需要注意的是,gVisor 目前只能在 x86_64 Linux 3.17+ 上构建和运行,而且在沙箱内只支持 x86_64 二进制文件(即不能运行 32 位二进制文件)。

gVisor 的 GitHub 库提供了更多信息,希望参与讨论的工程师也可以加入谷歌讨论组

查看英文原文 Google Release “gVisor”, a Lightweight Container Runtime Sandbox Used to Provide Secure Isolation

2018-05-21 19:0011888
用户头像

发布了 1008 篇内容, 共 429.3 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

「产品经理训练营」第五周 作业记录

周玲

2021金三银四必备:Java后端开发面试总结【25个技术专题】

比伯

Java 编程 架构 面试 计算机

极客大学·产品经理训练营·第四章作业(第五周)

二大爷

极客大学产品经理训练营

框架效应如何影响人的决策?「Day 4」

道伟

心理 决策 28天写作

将上周写的用例画成流程图-第四章,第三讲

mas

得不到的永远在骚动——蔡格尼克效应

Justin

心理学 习惯养成 28天写作 游戏设计

(28DW-S8-Day4) 区块链里面2个核心问题

mtfelix

28天写作

2021MWC上海召开丨5G与千行百业“和合共生”

云计算

翻译:《实用的Python编程》02_04_Sequences

codists

Python 人工智能 面试 数据结构与算法 序列

Elasticsearch Validate API

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 二月春节不断更

第十三周命题作业

cc

现在与以前的你相遇在此刻,让二种不同的风格,创造未来你自己的手艺吧。

叶小鍵

产品经理训练营-第五周学习总结

月亮 😝

地表建筑物识别 Dayo2

IT蜗壳-Tango

七日更 28天写作 2月春节不断更

保持前进

Nydia

关于MVCC,我之前写错了,这次我改好了!

艾小仙

Java MySQL 数据库 面试 MVCC

设计模式【2.2】-- 工厂模式怎么演变成抽象工厂模式?

秦怀杂货店

设计模式 工厂模式 23种设计模式 工厂方法模式

用例画成流程图 - 第四章,第三讲总结

mas

jupyter在加载pkl文件时报错ModuleNotFoundError: No module named 'pandas.core.internals.managers'; '的解决方法

无极限

Python Jupyter Notebook jupyter

产品经理训练营-第五周作业

月亮 😝

程序员的职业生涯与赛道选择

刘旭东

职业规划 码农 职业生涯

第十三周学习心得

cc

索引失效的场景

new life

MySQL 索引性能

日记 2021年2月24日(周三)

Changing Lin

2月春节不断更

28天瞎写的第二百四十二天:正念冥想,我要想什么?

树上

冥想 28天写作 正念

面试中经常问到的动态代理到底是什么

废材姑娘

Java

圈子创业

张老蔫

28天写作

工作中当你感觉焦虑的时候,该怎么办?

一笑

28天写作

改变认知,到写作方式的改变

数列科技杨德华

28天写作

电商平台:收货地址

worry

电商平台

Kafka.06 - 数据持久化介绍

insight

kafka 2月春节不断更

gVisor:谷歌发布的一个用于提供安全隔离的轻量级容器运行时沙箱_DevOps & 平台工程_Daniel Bryant_InfoQ精选文章