#虚拟机 #firecracker #容器 #虚拟化 #微虚拟机 #工作负载 #隔离

应用 firecracker-microvm/jailer

在生产场景中启动 Firecracker 的过程;应用 cgroup/namespace 隔离屏障并降低权限

30 个版本 (稳定版)

1.7.0 2024 年 3 月 18 日
1.6.0 2023 年 12 月 20 日
1.5.0 2023 年 10 月 12 日
1.4.0 2023 年 7 月 20 日
0.24.2 2021 年 2 月 19 日

#10模拟器

23,928 个星标 & 326 个关注者

Apache-2.0

115KB
2K SLoC

Firecracker Logo Title

我们的使命是使容器和工作负载能够安全、多租户、低开销地执行。

了解更多关于 Firecracker 宪章的信息 这里.

什么是 Firecracker?

Firecracker 是一种专为创建和管理安全、多租户、基于容器和函数的服务而构建的开源虚拟化技术,这些服务提供无服务器操作模型。Firecracker 在轻量级的虚拟机(称为微虚拟机)中运行工作负载,这些微虚拟机结合了硬件虚拟化技术提供的安全和隔离特性,以及容器的速度和灵活性。

概述

火柴盒的主要组件是一个虚拟机监控器(VMM),它使用Linux内核虚拟机(KVM)来创建和运行微虚拟机(microVMs)。火柴盒采用了极简设计,省略了不必要的设备和面向客机的功能,以减少每个微虚拟机的内存占用和攻击面,从而提高安全性、减少启动时间和提高硬件利用率。火柴盒已集成到容器运行时中,例如Kata ContainersWeaveworks Ignite

火柴盒是在亚马逊网络服务(AWS)开发的,旨在加速AWS LambdaAWS Fargate等服务的速度和效率。火柴盒遵循Apache 2.0许可证开源。

要了解更多关于火柴盒的信息,请访问firecracker-microvm.io

入门

要开始使用火柴盒,请下载最新的发布版二进制文件或从源代码构建它。

您可以在任何运行Docker(我们使用开发容器)并安装了bash的Unix/Linux系统上构建火柴盒,如下所示

git clone https://github.com/firecracker-microvm/firecracker
cd firecracker
tools/devtool build
toolchain="$(uname -m)-unknown-linux-musl"

火柴盒二进制文件将放置在build/cargo_target/${toolchain}/debug/firecracker。有关构建、测试和运行火柴盒的更多信息,请参阅快速入门指南

火柴盒微虚拟机的整体安全性,包括满足安全多租户计算标准的能力,取决于配置良好的Linux主机操作系统。我们认为满足这一标准的一个配置包括在生产主机设置文档中。

贡献

火柴盒已在AWS中运行生产工作负载,但我们的使命仍在第一天。还有很多要构建的,我们欢迎所有贡献。

要为火柴盒做出贡献,请参阅入门指南中的开发设置部分,然后是火柴盒的贡献指南

发布

通过GitHub仓库的发布页面发布新的火柴盒版本,通常每两到三个月一次。变更历史记录在我们的变更日志中。

火柴盒发布策略的详细说明请见此处

设计

火柴盒的整体架构在设计文档中描述。

功能与能力

火柴盒由一个微虚拟机管理器进程组成,该进程在启动后向主机公开一个API端点。该API以OpenAPI格式指定。更多信息请参阅API文档

API端点可用于

  • 通过以下方式配置microvm:
    • 设置vCPUs的数量(默认为1)。
    • 设置内存大小(默认为128 MiB)。
    • 配置CPU模板
  • 向microVM添加一个或多个网络接口。
  • 向microVM添加一个或多个读/写或只读磁盘,每个磁盘都由一个基于文件的块设备表示。
  • 在虚拟机运行时触发块设备重新扫描。这允许虚拟机操作系统检测到块设备后端文件的大小变化。
  • 在虚拟机启动前后更改块设备的后端文件。
  • 为virtio设备配置速率限制器,可以限制带宽、每秒操作数或两者。
  • 配置日志和指标系统。
  • [BETA]配置面向虚拟机的元数据服务的数据树。只有在此资源配置后,该服务才对虚拟机可用。
  • 向microVM添加一个vsock套接字
  • 向microVM添加一个熵设备
  • 使用指定的内核镜像、根文件系统和引导参数启动microVM。
  • [仅限x86_64] 停止microVM。

内置功能:

  • 默认启用需求故障页面和CPU超订阅。
  • 高级、线程特定的seccomp过滤器,以增强安全性。
  • Jailer进程,用于在生产场景中启动Firecracker;应用cgroup/namespace隔离屏障,然后降级权限。

测试平台

我们测试了以下所有组合:

实例 宿主机操作系统 & 内核 虚拟机根文件系统 虚拟机内核
c5n.metal al2 linux_4.14 ubuntu 22.04 linux_4.14
m5n.metal al2 linux_5.10 linux_5.10
m6i.metal al2023 linux_6.1
m6a.metal
m6g.metal
m7g.metal

已知问题和限制

  • 在aarch64上,pl031 RTC设备不支持中断,因此使用RTC闹钟(例如hwclock)的虚拟机程序将无法工作。

性能

Firecracker的性能特性列在规范文档中。所有规范都是我们支持无服务器操作模型中容器和函数工作负载承诺的一部分,因此通过持续集成测试强制执行。

安全披露政策

Firecracker的安全性是我们的首要任务。如果您怀疑您已经发现了漏洞,请按照我们的安全策略文档私下联系我们;我们将立即优先处理您的披露。

常见问题解答 & 联系方式

常见问题解答收集在我们的FAQ文档中。

您可以通过以下方式与Firecracker社区取得联系:

在与火柴人社区沟通时,请遵守我们的行为准则

依赖项

~4.5–6.5MB
~118K SLoC