现代云虚拟化的重点是利用硬件虚拟化支持来提高性能和安全性。几乎没有人再使用软件虚拟化。在这里,对比下几个流行的云虚拟化技术。

基本知识

虚拟化解决方案包括管理程序内核、虚拟机监控器(VMM)和设备驱动程序。

裸机管理程序以特权模式作为主机操作系统的一部分运行,可以访问底层硬件。VMM 也在主机操作系统上运行,但通常处于非特权模式。虚拟机管理层程序和 VMM 共同为虚拟机分配资源。

img

虚拟机(VM)用于相互隔离工作负载。工作负载隔离有两种类型: 1.运行隔离 可确保虚拟机不会导致另一个虚拟机运行更慢。

2.安全隔离 可确保一个虚拟机无法访问或推断属于另一个虚拟机的数据。这包括防止权限升级,使客户无法访问其虚拟机边界之外的任何信息。还能防止信息泄露。

Red Hat 参考架构

img

Linux KVM、QEMU 和 libvirt 是 Red Hat 虚拟化解决方案的基础。

KVM(Kernel-based VM):内核中的虚拟化基础架构。也是硬件与 QEMU 之间的接口。 QEMU(Quick EMUlator):运行在用户空间。既是设备仿真器,也是虚拟机监控器(VMM)。 libvirt:更加具有 Red Hat 特色。传统意义上用于帮助管理各种虚拟化技术中的虚拟机。Red Hat 扩展了这一用途,用作监狱。在这个架构下,QEMU 进程处理来自客户机的输入,并暴露于潜在的攻击下。访客看不到 Libvirt 进程,因此它是限制 QEMU 进程的最佳场所。配合 SELinux 及文件系统的权限,可以确保 QEMU 进程无法访问其他虚拟机的资源。

cgroups 和 nftables 用于工作负载的隔离。

cgroups:限制一组进程的资源使用。可以限制 CPU、内存、磁盘和网络带宽。 nftables:Linux 内核的新型防火墙。可以限制进出虚拟机的流量。可以看作是一种实现安全隔离的方法,是针对外部资源而不是主机上运行的内部虚拟机。

AWS Firecracker

专为无服务器负载设计的轻量级虚拟化技术。

img

AWS Firecracker 旨在提供虚拟机级隔离保证,并解决与虚拟化的三大挑战:1)VMM 和内核对虚拟机的CPU和内存开销很高;2)虚拟机启动需要几秒钟;3)虚拟机管理程序和VMM过于复杂,攻击面很大。

AWS 通过保留 KVM,但将 QEMU 替换为用 Rust 便携的超轻量级替代品 Firecracker 来解决这些问题。Firecracker 仅支持 KVM 的最小子集,以减少内核和 VMM 的开销。Firecracker 通过使用 KVM 的 API 与 KVM 交互,以便在虚拟机启动时快速启动。

总之,架构遵循2个原则:

  1. 尽可能重复使用 Linux 组件;
  2. 如果资源利用率或攻击面很重要,则选择超轻量级的替代方案。

References: