47 | 绝不仅仅是安全:Kata Containers 与 gVisor
该思维导图由 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-1538 - 🐵老师,你好,能不能推荐下K8S可以通过哪些项目管理KVM虚拟机
作者回复: redhat 的 kubevirt
2019-01-0812 - extraterrestrial!!之前的留言不能编辑,还向请教个问题:gvisor拦截系统调用,但是系统调用是内核态才能执行,gvisor拦截下来除了直接执行系统调用还有啥操作空间么?
作者回复: 这个就很典型的用户态kernel技术啊,可以参考user mode linux
2018-12-155 - extraterrestrial!!问个初级问题:看下来觉得kata使用了qemu,和我自己在qemu上跑个正常的ubuntu啥的系统好像没啥区别,就是**做了了精剪**? 这样精剪以后是个什么内核,功能够用么,会不会性能和现在的container差很多之类的...
作者回复: linux内核,大部分够用,性能要看具体哪种情况,有没有开优化
2018-12-152 - starnop磊哥您好,有个疑问请教一下,kata结合了runv与clear container,那么runv与clear container之间的区别是什么呢?各有什么优势?kata相比于他们又做了哪些优化呢?
作者回复: 没啥大区别,所以才合并了
2018-12-101 - Alex回答最后的问题: 提供不了;因为gVisor是基于用户态内核的,无法真正做到与宿主机内核不一致的请求响应,因此满足不了对高版本内核请求的需求2018-12-1058
- 拉欧无法提供,gVisor说白了只是一层代理,不是真正的内核;但是这也是google的牛逼之处,把所有的系统调用和协议都代理出来,不是大神级的技术专家,这种活根本做不了2019-11-3025
- 混沌渺无极思考题理解: gvisor是宿主机kernel的"客户端",不管怎么拦截容器的调用,最终还是要转为对宿主机kernel的调用,因此低版本的宿主机kernel没有的能力返回容器想要的响应。这时候还是虚拟机管用,因为甚至能在Linux上虚拟出window。2018-12-1010
- ch_ortKata Container本质就是一个精简后的轻量级虚拟机,所以它的特点,就是“像虚拟机一样安全,像容器一样敏捷”。2018年,Google发布了gVisor,给容器进程配置了一个用Go语言实现的“极小独立内核”。 无论是Kata Container还是gVisor,实现安全的方式本质上都是让容器独立一个操作系统内核,避免共享宿主机内核。他们的主要区别是,Kata 通过硬件虚拟化出一台“小虚拟机”,在“小虚拟机”安装裁剪后的Linux内核,而gVisor则是“模拟”出了一个运行在用户态的操作系统内核,通过这个内核来限制容器进程向宿主机发起的调用。 gVisor虽然现在没有任何优势,但是这种通过在用户态运行一个操作系统内核,来为应用进程提供强隔离的思路,的确是未来安全容器进一步演化的一个非常有前途的方向。2020-12-233
- Heaven不能运行在gVisor中,gVisor本质上是委托给了实际的宿主机内核去执行,有些高版本的api,低版本再如何也无法实现2020-10-171