AWC推出Firecracker-Linux的微虚拟化



在近日在拉斯维加斯举行的AWS re:Invent 2018大会上, Firecracker宣布发布,这是一种基于Linux KVM的新型开源虚拟化技术。 作者承诺,“您可以在一秒钟内在非虚拟化环境中运行轻量级微型虚拟机(microVM),以安全性和工作负载隔离以及容器的形式,以有效利用资源的形式,获得传统VM的优势。”

背景知识


Firecracker由Amazon Web Services员​​工开发,他们致力于改善服务使用者(例如AWS Lambda(于2014年推出,今天已经可以说无服务器模型继续存在)和AWS Fargate(一年前出现)之类的服务的资源消耗和整体寿命。 )

该项目基于Chromium OS的crosvm ,它来自Google的开源开发, 开发用Rust编写,负责使用设备虚拟化(但不模拟真实硬件)启动操作系统。 因此,Firecracker代码也用Rust语言编写,其作者承诺将其更正返回给父项目的代码库,尽管这些项目本身在目的上存在很大差异。

Firecracker的首个公开发行版本( 0.1.0 )于今年3月发布,而最新的最新发行版本0.11.0 )就在几天前。 我在Internet上发布Firecracker之后不久就开始撰写本文,当时该项目在GitHub上拥有76星,而在发布时,这一数字已超过500。



爆竹功能


Firecracker的主要组件是虚拟机监视器(VMM),它使用Linux KVM创建和运行所谓的microVM。 作者称他们的产品“是QEMU的基于云的替代产品”(由Kata Containers使用),“仅用于安全有效地启动容器”。

这是运行上述microVM的主机系统的示例:



开发人员努力追求极简主义,包括仅在产品中包含最必要的东西,从而确保最低的内存成本,同时减少潜在漏洞的可能性。 在Firecracker中, 模拟了4种设备 :virtio-net,virtio-block,串行控制台以及带有1个按钮的键盘,用于停止microVM的操作。 作为主机和来宾操作系统,当前支持基于Linux内核版本4.14 (去年11月发布及更高版本的操作系统,开发人员当前的计划是支持Linux内核的最后两个稳定分支。 在硬件方面,到目前为止,仅支持英特尔处理器,但AMD和ARM已列入议程。

爆竹本身由单个VMM进程组成,该进程在启动时使端点(RESTful)API在主机上可用。 API本身以OpenAPI格式描述 ,尤其允许您使用指定的参数(内核映像,根文件系统,引导参数)启动microVM并停止它,配置虚拟机(vCPU数量,RAM,CPU模板),添加到网络接口,磁盘(表示为块设备,读写模式和只读模式可用)为日志和度量配置系统。

Firecracker的主要优点是安全(专注于多租户计算,几个隔离级别),高性能(可在125 ms内启动microVM,作者承诺明年将改善这一数字),最小的开销(每个microVM消耗约5兆字节)内存)。 什么使该项目更加重要-它已经在“战斗中”进行了测试,并提供了许多AWS服务(包括提到的Lambda和Fargate)的工作。

安全细节


爆竹的主要功能(其重点在于确保高级别的安全性)包括以下内容:

  1. 简单的访客模型(仅为所有访客提供最少的访客-请参阅上面有关4种设备的信息)。
  2. 使用cgroups和seccomp BPF以及一组有限的允许的系统调用隔离Firecracker进程。
  3. Firecracker进程的静态链接可在与主机环境隔离的情况下启动它。

鞭炮演示


AWS博客展示了如何尝试使用微型VM。 为此,只需创建一个i3.metal实例并向其中上传3个文件( firecracker可执行文件,根FS映像,Linux内核):



之后-为/ dev / kvm设置必要的权限:

 $ sudo setfacl -mu:${USER}:rw /dev/kvm 

设置第一台访客计算机的配置:

 $ curl --unix-socket /tmp/firecracker.sock -i \ -X PUT "http://localhost/machine-config" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -d "{ \"vcpu_count\": 1, \"mem_size_mib\": 512 }" 

...然后是她的核心:

 $ curl --unix-socket /tmp/firecracker.sock -i \ -X PUT "http://localhost/boot-source" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -d "{ \"kernel_image_path\": \"./hello-vmlinux.bin\", \"boot_args\": \"console=ttyS0 reboot=k panic=1 pci=off\" }" 

...和根FS:

 $ curl --unix-socket /tmp/firecracker.sock -i \ -X PUT "http://localhost/drives/rootfs" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -d "{ \"drive_id\": \"rootfs\", \"path_on_host\": \"./hello-rootfs.ext4\", \"is_root_device\": true, \"is_read_only\": false }" 

实际启动访客仍然需要:

 # curl --unix-socket /tmp/firecracker.sock -i \ -X PUT "http://localhost/actions" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -d "{ \"action_type\": \"InstanceStart\" }" 

结果:



那其他集装箱项目呢?


尽管Firecracker的作者承诺它将“与流行的容器运行时集成”,但是当他们询问该项目是否可以与Kubernetes,Docker或Kata容器一起使用时,这是他们的回答

“还没有。 我们正在将Firecracker开发为一个开源项目,因为它为启动容器提供了截然不同的安全性方法。 我们希望其他为容器创建开源技术的社区会发现它有用。 “我们正在努力确保Firecracker无缝集成到容器生态系统中-目标是在未来实现无缝集成,并在隔离容器工作负载方面具有更大的灵活性。”

聚苯乙烯


另请参阅我们的博客:

Source: https://habr.com/ru/post/zh-CN431192/


All Articles