免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

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:0010354
用户头像

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

关注

评论

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

互联网寒冬之际,凭借这份10w字大厂Java面试真题汇总,半月斩获7个Offer!

Java永远的神

spring 程序员 JVM 多线程 Java 面试

Android技术分享| Bugly 应用升级自定义UI

anyRTC开发者

android 音视频 UI 移动开发 Bugly

KubeEdge 1.12版本发布,稳定性、安全性、可扩展性均带来大幅提升

华为云开发者联盟

云计算 云原生 华为云 kubeedge 企业号十月PK榜

线下学习web前端培训可以吗

小谷哥

大数据开发培训学习费用多少呢

小谷哥

大数据ELK(二十三):Kibana简介

Lansonli

Kibana 10月月更

Go WEB进阶实战:基于GoFrame搭建的电商前后台API系统

王中阳Go

电商 Go web #go #开源 10月月更

mmmbsc互助系统开发3M智能合约技术

薇電13242772558

智能合约

最后一块石头的重量

掘金安东尼

算法 10月月更

java线下培训哪家比较适合小白学习

小谷哥

划重点!2022面试必刷461道大厂架构面试真题汇总+面经+简历模板

Geek_0c76c3

Java 数据库 程序员 架构 面试

OA是什么意思?

优秀

OA oa办公系统 OA是什么意思

实例分析Scheduled Thread Pool Executor与Timer的区别

华为云开发者联盟

线程 开发 华为云 企业号十月PK榜

等保测评机构是什么意思?是什么性质的单位?

行云管家

公司 机构 等级保护 等保测评 等级测评

首次公开!阿里巴巴最新高并发架构设计实录被我从Github扒下来了

Geek_0c76c3

Java 数据库 开源 程序员 开发

开源浪潮下,Apache APISIX 如何成为全球最活跃 API 网关

API7.ai 技术团队

API网关 APISIX 网关 OpenSergo

CDR2023最新版本有什么新功能?

茶色酒

imazing2023免费版iOS管理工具

茶色酒

imazing2023

追求性能极致:Redis客户端缓存带来的革命

程序员小毕

Java 数据库 redis 面试 后端

参加前端培训学习还值得吗

小谷哥

手把手教你入门Vue,猴子都能看懂的教程

知心宝贝

JavaScript 云原生 Vue 前端 可视化

两种方式修复谷歌翻译无法使用问题

echeverra

MobTech短信验证常见问题

MobTech袤博科技

sdk 短信验证

OpenHarmony应用HAP包签名

OpenHarmony开发者

OpenHarmony

后CNN探索,如何用RNN进行图像分类

华为云开发者联盟

人工智能 华为云 CNN 企业号十月PK榜

全新出品!Github总榜排行第七的SpringCloud生态全栈笔记我粉了

Geek_0c76c3

Java 数据库 程序员 架构 面经

特权账号管理系统是什么?是堡垒机吗?

行云管家

网络安全 堡垒机 账号安全 特权账号管理 特权账号

拿捏了!阿里2022最新JDK源码深度解析小册,Github全站热榜第二

Geek_0c76c3

Java 数据库 开源 程序员 开发

Java开发培训机构怎样选择靠谱的

小谷哥

优秀!阿里甩出GC面试小册,仅7天Github获赞96.9K

Geek_0c76c3

Java 数据库 程序员 JVM 规划

easyrecovery2023数据恢复软件功能介绍

茶色酒

EasyRecovery easyrecovery2023

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