2019独角兽企业重金招聘Python工程师标准>>>

谷歌发布了一种新型沙箱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内运行。

谷歌云平台(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连接发送给它。

entry需要一个平台来实现基本的上下文切换和内存映射功能。现在,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库提供了更多信息,希望参与讨论的工程师也可以加入谷歌讨论组。

原文来自:https://www.linuxprobe.com/google-gvisor-sandbox.html

转载于:https://my.oschina.net/ssdlinux/blog/1821108

谷歌黑科技:gVisor轻量级容器运行时沙箱相关推荐

  1. 浅析容器运行时奥秘——OCI标准

    导语 容器技术火起来了以后,Docker的容器镜像和容器运行时已然成为行业的标准.此后,为了推进容器生态的健康发展.在Linux基金会的主导下,Docker和各大云厂商Google, Amazon, ...

  2. 云原生钻石课程 | 第1课:容器运行时技术深度剖析

    点击上方"程序猿技术大咖",关注并选择"设为星标" 回复"加群"获取入群讨论资格! 本篇文章来自<华为云云原生王者之路训练营>钻 ...

  3. RunC 轻量级 容器运行工具 简介

    RunC 是什么? RunC 是一个轻量级的工具,它是用来运行容器的,只用来做这一件事,并且这一件事要做好.我们可以认为它就是个命令行小工具,可以不用通过 docker 引擎,直接运行容器.事实上,r ...

  4. 课时 30:理解 RuntimeClass 与使用多容器运行时(贾之光)

    本文将主要分享以下三方面的内容: RuntimeClass 需求来源 RuntimeClass 功能介绍 多容器运行时示例 RuntimeClass 需求来源 容器运行时的演进过程 我们首先了解一下容 ...

  5. 关于容器和容器运行时的那些事

    转载本文需注明出处:微信公众号EAWorld,违者必究. 前言: 容器,容器编排,微服务,云原生,这些无疑都是当下软件开发领域里面最热门的术语.容器技术的出现并迅速的广泛应用于软件开发的各个领域里,主 ...

  6. 3.Containerd容器运行时的配置浅析与知识扩充实践

    公众号关注「WeiyiGeek」 设为「特别关注」,每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x00 Containerd 容器运行时配置指南 如何配置 Container ...

  7. 【容器运行时】一文理解 OCI、runc、containerd、docker、shim进程、cri、kubelet 之间的关系

    参考 docker,containerd,runc,docker-shim 之间的关系 Containerd shim 进程 PPID 之谜 内核大神教你从 Linux 进程的角度看 Docker R ...

  8. 【容器运行时-转载】RunC 是什么?

    转载自:RunC 简介 RunC 是什么? RunC 是一个轻量级的工具,它是用来运行容器的,只用来做这一件事,并且这一件事要做好.我们可以认为它就是个命令行小工具,可以不用通过 docker 引擎, ...

  9. 课时 28:理解容器运行时接口 CRI(知谨)

    CRI 是 Kubernetes 体系中跟容器打交道的一个非常重要的部分.本文将主要分享以下三方面的内容: CRI 介绍 CRI 实现 相关工具 CRI 介绍 在 CRI 出现之前(也就是 Kuber ...

最新文章

  1. iOS进阶之页面性能优化
  2. iis7.5 php 404.17,win2008 r2中IIS7.5及以上设置404错误页面的正确方法
  3. MapReduce编程基础
  4. 再见Jenkins,从Gitlab代码提交到k8s服务持续交付只需七毛三
  5. Win XP文件夹拒绝访问的解决方法 - 年轻无极限 - 51CTO技术博客
  6. Git笔记(25) 选择修订版本
  7. URI is not registered (Settings | Languages Frameworks | Schemas and DTDs)怎么解决?
  8. python 线性回归 约束_python – Tensorflow:具有非负约束的线性回归
  9. 关于bootstrap--排版(标题、强调、背景、插入符等)
  10. 队列(链式存储结构)
  11. 使用eclipse开发可视化界面windowsbuilder
  12. sqlalchemy 8 会话 与 异常
  13. 高德AR驾车导航解决方案
  14. 从win10体验到重装win8
  15. “为了买台手机,研究大半个月后仍然无从选择”
  16. 由左右相机图像点重建三维点
  17. 【python】批量获取企业公司的统一社会代码
  18. 笔记本电脑网络图标丢失解决流程
  19. 2021-6-3-今日收获
  20. mysql插入成功返回主键_MyBatis + MySQL返回插入成功后的主键id

热门文章

  1. 回顾Google IO 2016 -Keynote【图解】
  2. [物理学与PDEs]第1章习题6 无限长载流直线的磁场
  3. JavaScript基础知识【内置对象】(六)
  4. 原生JavaScript对CSS进行格式化和压缩
  5. http请求消息体和响应消息体
  6. [转载]高性能托管应用程序设计入门
  7. 接口测试时,输入所有参数的参数值后,接口返回“参数错误:所有参数都不能为空”
  8. mock方法常用框架_什么是Mock测试?
  9. centos mysql php tomcat_CentOS 6.x使用yum快速安装Apache+PHP+Tomcat(JSP)+MySQL
  10. 非科班出身,如何成为程序员?