深入剖析 Kubernetes
张磊
Kubernetes 社区资深成员与项目维护者
116709 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 57 讲
再谈开源与社区 (1讲)
结束语 (1讲)
深入剖析 Kubernetes
15
15
1.0x
00:00/00:00
登录|注册

47 | 绝不仅仅是安全:Kata Containers 与 gVisor

思考题
Firecracker
gVisor
Kata Containers
安全容器项目

该思维导图由 AI 生成,仅供参考

你好,我是张磊。今天我和你分享的主题是:绝不仅仅是安全之 Kata Containers 与 gVisor。
在上一篇文章中,我为你详细地讲解了 kubelet 和 CRI 的设计和具体的工作原理。而在讲解 CRI 的诞生背景时,我也提到过,这其中的一个重要推动力,就是基于虚拟化或者独立内核的安全容器项目的逐渐成熟。
使用虚拟化技术来做一个像 Docker 一样的容器项目,并不是一个新鲜的主意。早在 Docker 项目发布之后,Google 公司就开源了一个实验性的项目,叫作 novm。这,可以算是试图使用常规的虚拟化技术来运行 Docker 镜像的第一次尝试。不过,novm 在开源后不久,就被放弃了,这对于 Google 公司来说或许不算是什么新鲜事,但是 novm 的昙花一现,还是激发出了很多内核开发者的灵感。
所以在 2015 年,几乎在同一个星期,Intel OTC (Open Source Technology Center) 和国内的 HyperHQ 团队同时开源了两个基于虚拟化技术的容器实现,分别叫做 Intel Clear Container 和 runV 项目。
而在 2017 年,借着 Kubernetes 的东风,这两个相似的容器运行时项目在中立基金会的撮合下最终合并,就成了现在大家耳熟能详的 Kata Containers 项目。 由于 Kata Containers 的本质就是一个精简后的轻量级虚拟机,所以它的特点,就是“像虚拟机一样安全,像容器一样敏捷”。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kata Containers 和 gVisor 是两种安全容器实现,它们的设计原理都是为容器进程分配一个独立的操作系统内核,从而避免容器共享宿主机的内核,有效解决了容器进程发生“逃逸”或夺取整个宿主机控制权的问题。Kata Containers 使用传统的虚拟化技术,通过虚拟硬件模拟出一台“小虚拟机”,在其中安装裁剪后的 Linux 内核来实现强隔离。而 gVisor 则使用 Go 语言“模拟”出一个运行在用户态的操作系统内核,通过这个模拟的内核来代替容器进程向宿主机发起有限的、可控的系统调用。Kata Containers 的虚拟机里有一个特殊的 Init 进程负责管理用户容器,并且只为这些容器开启 Mount Namespace,而 gVisor 则为应用进程启动了一个名叫 Sentry 的进程,提供传统的操作系统内核的能力。Kata Containers 通过 vhost 技术和 PCI Passthrough 来优化虚拟机的 I/O 性能,而 gVisor 则使用 KVM 进行系统调用的拦截。尽管 gVisor 的实现还不够完善,但随着后续的发展,这些工程问题一定会逐渐解决。另外,AWS 也发布了一个叫做 Firecracker 的安全容器项目,其核心是一个用 Rust 语言重新编写的 VMM,与 Kata Containers 的本质原理相似。 Kata Containers 默认使用的 VMM 是 Qemu,而 Firecracker,则使用自己编写的 VMM。所以,理论上,Kata Containers 也可以使用 Firecracker 运行起来。 在性能上,KataContainers 和 KVM 实现的 gVisor 基本不分伯仲,在启动速度和占用资源上,基于用户态内核的 gVisor 还略胜一筹。但是,对于系统调用密集的应用,比如重 I/O 或者重网络的应用,gVisor 就会因为需要频繁拦截系统调用而出现性能急剧下降的情况。此外,gVisor 由于要自己使用 Sentry 去模拟一个Linux 内核,所以它能支持的系统调用是有限的,只是 Linux 系统调用的一个子集。 不过,gVisor 虽然现在没有任何优势,但是这种通过在用户态运行一个操作系统内核,来为应用进程提供强隔离的思路,的确是未来安全容器进一步演化的一个非常有前途的方向。 值得一提的是,Kata Containers 团

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入剖析 Kubernetes》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(14)

  • 最新
  • 精选
  • 勇敢的心
    get到了重点:“gVisor 虽然现在没有任何优势,但是这种通过在用户态运行一个操作系统内核,来为应用进程提供强隔离的思路,的确是未来安全容器进一步演化的一个非常有前途的方向。”

    作者回复: 聪明

    2018-12-15
    38
  • 🐵
    老师,你好,能不能推荐下K8S可以通过哪些项目管理KVM虚拟机

    作者回复: redhat 的 kubevirt

    2019-01-08
    12
  • extraterrestrial!!
    之前的留言不能编辑,还向请教个问题:gvisor拦截系统调用,但是系统调用是内核态才能执行,gvisor拦截下来除了直接执行系统调用还有啥操作空间么?

    作者回复: 这个就很典型的用户态kernel技术啊,可以参考user mode linux

    2018-12-15
    5
  • extraterrestrial!!
    问个初级问题:看下来觉得kata使用了qemu,和我自己在qemu上跑个正常的ubuntu啥的系统好像没啥区别,就是**做了了精剪**? 这样精剪以后是个什么内核,功能够用么,会不会性能和现在的container差很多之类的...

    作者回复: linux内核,大部分够用,性能要看具体哪种情况,有没有开优化

    2018-12-15
    2
  • starnop
    磊哥您好,有个疑问请教一下,kata结合了runv与clear container,那么runv与clear container之间的区别是什么呢?各有什么优势?kata相比于他们又做了哪些优化呢?

    作者回复: 没啥大区别,所以才合并了

    2018-12-10
    1
  • Alex
    回答最后的问题: 提供不了;因为gVisor是基于用户态内核的,无法真正做到与宿主机内核不一致的请求响应,因此满足不了对高版本内核请求的需求
    2018-12-10
    58
  • 拉欧
    无法提供,gVisor说白了只是一层代理,不是真正的内核;但是这也是google的牛逼之处,把所有的系统调用和协议都代理出来,不是大神级的技术专家,这种活根本做不了
    2019-11-30
    25
  • 混沌渺无极
    思考题理解: gvisor是宿主机kernel的"客户端",不管怎么拦截容器的调用,最终还是要转为对宿主机kernel的调用,因此低版本的宿主机kernel没有的能力返回容器想要的响应。这时候还是虚拟机管用,因为甚至能在Linux上虚拟出window。
    2018-12-10
    10
  • ch_ort
    Kata Container本质就是一个精简后的轻量级虚拟机,所以它的特点,就是“像虚拟机一样安全,像容器一样敏捷”。2018年,Google发布了gVisor,给容器进程配置了一个用Go语言实现的“极小独立内核”。 无论是Kata Container还是gVisor,实现安全的方式本质上都是让容器独立一个操作系统内核,避免共享宿主机内核。他们的主要区别是,Kata 通过硬件虚拟化出一台“小虚拟机”,在“小虚拟机”安装裁剪后的Linux内核,而gVisor则是“模拟”出了一个运行在用户态的操作系统内核,通过这个内核来限制容器进程向宿主机发起的调用。 gVisor虽然现在没有任何优势,但是这种通过在用户态运行一个操作系统内核,来为应用进程提供强隔离的思路,的确是未来安全容器进一步演化的一个非常有前途的方向。
    2020-12-23
    3
  • Heaven
    不能运行在gVisor中,gVisor本质上是委托给了实际的宿主机内核去执行,有些高版本的api,低版本再如何也无法实现
    2020-10-17
    1
收起评论
显示
设置
留言
14
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部