第一种方法是最简单和直接的,就是把容器放在虚拟机里运行,这种方式不 需要对软件栈做改动,只是让同一个用户的容器运行在自己的虚拟机里,但 这样除了有额外的开销和不够高效,还有两层的维护复杂度。
第二种方法是 MicroVM,仍然使用虚拟化技术来实现安全隔离,但是它的 出发点是针对容器场景实现轻量化的虚拟机,并且实现运行时无缝对接容器 生态,在保证兼容性的前提下尽量降低运行时和维护开销,并保证原生容器 的用户体验。Kata Containers 就是一个 MicroVM 方案。首先,对应用来说, 这是一个兼容 runC 的容器运行时引擎,可以被 Kubernetes 通过 containerd/ CRI-O 调用,可以直接运行任何 Docker 镜像或 OCI 镜像。但与 runC 不同的 是,它使用了硬件虚拟化技术,直接面对用户应用的不再是宿主机的独立内 核,而是一个装在轻量级虚拟机里的内核,即使有未知的安全漏洞导致这个 内核被攻击,攻击者仍然无法轻易突破虚拟化技术构建的沙箱。Kata 的思路 很不错,但是目前还在迭代完善中。
第三种方法基于进程虚拟化,使用一个特定的内核来提供 Linux ABI,直接虚 拟化进程的运行环境。Google 的 gVisor 就是这样的进程虚拟化方案,实现了 一个新的内核并努力去补齐和兼容 Linux 的系统调用。这种方法的问题是很 难做到 Linux 的全兼容,无法支持部分应用。
第四种方法基于 Unikernel/LibOS, 让应用带上自己的内核,好处在于简化的 LibOS 有更小的开销和攻击面,但是妨碍它被更广泛应用的问题在于它往往 需要修改应用,只适合比较特定的应用场景。
《弹性计算:无处不在的算力》电子书可以通过以下链接下载:https://developer.aliyun.com/topic/download?id=7996"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。