Kata Containers 的第二层隔离及其虚拟机管理程序支持
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
引言
Kata Containers 在传统容器技术之上引入了第二层隔离,通过结合硬件虚拟化接口,提供更强的安全性和隔离性。本文将详细介绍 Kata Containers 如何将容器技术映射到虚拟机技术,并探讨其在多个虚拟机管理程序(VMM)和虚拟化监视器(VMM)上的支持与实现。
Kata Containers 的架构概述
第二层隔离的实现
Kata Containers 在传统命名空间容器提供的隔离层之上,进一步创建了第二层隔离。这一层依赖于硬件虚拟化接口,利用轻量级虚拟机(VM)来运行容器工作负载。具体来说,Kata Containers 会使用客户机的 Linux 内核,在多容器 Pod 的情况下创建工作负载,并在 Kubernetes 中以 Pod 级别执行沙箱。每个沙箱都是通过虚拟机创建的,确保容器之间具有更强的隔离性和安全性。
容器与虚拟机的映射
Kata Containers 将容器概念映射到虚拟机技术,具体过程如下:
-
容器运行时接口(CRI):Kata Containers 通过 CRI 在 Kubernetes 中实现容器的部署和管理。Kubelet 与 CRI 实现者(如 containerd 或 CRI-O)交互,后者与 Kata Containers 作为基于 OCI 的运行时进行通信。
-
API 构建:为了支持完整的 CRI API,Kata Containers 必须提供相应的构建结构。这些结构进一步映射到与虚拟机连接所需的设备。
-
虚拟机概念的底层技术映射:每个虚拟机管理程序或 VMM 都有自己处理这些映射的方式,具体取决于其设计和实现。
支持的虚拟机管理程序和 VMM
Kata Containers 支持多种虚拟机管理程序,每种方案都有其独特的特点和优势。以下是主要支持的 VMM 及其功能概述:
QEMU/KVM
-
兼容性:带有 QEMU 的 Kata Containers 与 Kubernetes 完全兼容,支持多种主机架构,包括 x86、ARM 和 IBM Power 系统。
-
设备与功能:
- Virtio VSOCK 或 Virtio 串行:用于虚拟机与宿主机或其他虚拟机之间的通信。
- Virtio 块或 Virtio SCSI:提供高性能的块设备支持。
- Virtio 网络:实现高效的网络接口。
- Virtio FS 或 Virtio 9P:推荐使用 Virtio FS 进行文件系统共享。
- VFIO:支持设备直通,允许虚拟机直接访问宿主机的硬件设备。
- 热插拔:支持在运行时添加或移除设备。
- 机器加速器:优化虚拟机的性能和资源管理。
-
机器加速器:
- NVDIMM:特定于 x86 架构,用于将根文件系统作为持久内存设备提供给虚拟机。
-
热插拔设备:
- Kata Containers 的虚拟机会从最少的资源量开始,随着容器启动过程的进行,动态热插拔设备,如 virtio 块、virtio SCSI 和 VFIO 等,以优化资源使用和启动时间。
Firecracker/KVM
-
架构:Firecracker 建立在 Rust-VMM 的基础上,拥有极简的设备模型,显著减少了代码量和攻击面,适用于功能即服务(FaaS)的使用场景。
-
功能限制:
- 不支持文件系统共享:仅支持基于块存储的驱动程序。
- 不支持设备热插拔和 VFIO:无法在虚拟机启动后更新容器资源或进行设备直通。
-
支持的设备:
- Virtio VSOCK
- Virtio 块
- Virtio 网络
Cloud Hypervisor/KVM
-
设计目标:基于 Rust-VMM,旨在实现更小的占用空间和攻击面,适合运行现代云工作负载。
-
兼容性:与 QEMU 配置相当,提供与 Kubernetes 的大部分兼容性。
-
版本支持:自 Kata Containers 1.12 和 2.0.0 版本起,支持包括 CPU 和内存大小调整、设备热插拔、Virtio-fs 文件系统共享、基于块的卷支持等功能。
-
支持的设备与功能:
- Virtio VSOCK 或 Virtio 串行
- Virtio 块
- Virtio 网络
- Virtio FS 软件
- Virtio PMEM
- VFIO
- 热插拔
- Seccomp 过滤器:为每个 VMM 线程提供精细的系统调用过滤,增强安全性。
- HTTP 开放 API
StratoVirt/KVM
-
概述:StratoVirt 是面向云数据中心的企业级开源 VMM,旨在支持标准虚拟机、容器和无服务器(Micro-VM)工作负载。
-
优势:
- 轻量级和低资源开销:优化性能,减少资源消耗。
- 快速启动:支持微虚拟机机器类型,适应快速变化的工作负载需求。
- 硬件加速:提升虚拟化性能。
- 语言级安全性:基于 Rust 语言,提高代码安全性。
-
功能支持:
- Micro-VM 机器类型:主要针对 FaaS 场景,支持 virtio mmio 总线驱动程序。
- 设备热插拔:支持 virtio 块热插拔。
- Virtio FS 共享文件系统
- Virtio RNG:提供熵源支持。
- QMP API:支持 QEMU 管理协议接口。
-
功能限制:
- 不支持 CPU/内存大小调整
- 不支持 VFIO
支持的 Hypervisor 和 VMM 功能总结
解决方案 | 版本介绍 | 小结 |
---|---|---|
Cloud Hypervisor | 1.10 | 上游 Cloud Hypervisor 提供丰富的功能支持,包括热插拔、VFIO 和文件系统共享 |
Firecracker | 1.5 | 上游 Firecracker 基于 Rust-VMM,功能有限,不支持 VFIO、文件系统共享、内存/CPU 热插拔 |
QEMU/KVM | 1.0 | 上游 QEMU 支持热插拔和文件系统共享 |
StratoVirt | 3.3 | 上游 StratoVirt 提供文件系统共享和 virtio 块热插拔,不支持 VFIO 和 CPU/内存大小调整 |
总结
Kata Containers 通过在传统容器技术之上引入硬件虚拟化基础的第二层隔离,实现了更强的安全性和隔离性。它支持多种虚拟机管理程序,每种方案各有特点,适应不同的使用场景和需求。以下是主要的关键点总结:
-
第二层隔离的实现:利用硬件虚拟化接口,通过轻量级虚拟机为容器提供额外的隔离层,提升安全性。
-
虚拟机管理程序的多样性:Kata Containers 支持多种 VMM,如 QEMU/KVM、Firecracker/KVM、Cloud Hypervisor/KVM 和 StratoVirt/KVM,每种 VMM 都有其独特的优势和适用场景。
-
功能支持与限制:不同的 VMM 在设备支持、热插拔、VFIO、文件系统共享等方面有不同的支持情况,用户可根据具体需求选择合适的 VMM。
-
性能与安全的平衡:通过选择适合的 VMM,Kata Containers 在保证安全隔离的同时,尽可能减少资源消耗和提升性能。
通过这些设计和实现,Kata Containers 为运行在 Kubernetes 上的容器工作负载提供了强大的隔离和安全保障,同时保持了高效的性能表现。
标签:VMM,虚拟机,支持,Virtio,Kata,Containers From: https://blog.csdn.net/u011027104/article/details/144262279