AWCがFirecrackerを導入-Linuxのマイクロ仮想化





最近ラスベガスで開催されているAWS re:Invent 2018では、Linux KVMに基づく新しいオープンソース仮想化テクノロジーであるFirecracker 発表が行われました 。 著者は、「一瞬で、非仮想化環境で軽量のマイクロ仮想マシン(microVM)を実行でき、リソースの効率的な使用という形で、従来のVMの利点(ワークロードとコンテナーのセキュリティと分離の形で)を得ることができる」と約束しています。



背景



Firecrackerは、AWS Lambda(2014年に開始され、今日サーバーレスモデルが存在し続けると言うことができる)やAWS Fargate(1年前に登場)などのサービスのユーザーのリソース消費と全体的な生活を改善するために着手したAmazon Web Servicesの従業員によって開発されています)



このプロジェクトはGoogleのオープンソース開発に基づいていました-Chromium OSのcrosvmはRustで記述され、デバイス仮想化を使用してオペレーティングシステムを起動します(ただし、実際のハードウェアはエミュレートしません)。 そのため、FirecrackerのコードもRustで記述されており、その作成者は修正を親プロジェクトのコードベースに戻すことを約束していますが、プロジェクト自体は時間の経過とともに目的が大きく異なっています。



Firecrackerの最初の公開リリース-0.1.0-は今年の3月に行われ、最新の最新リリース-0.11.0-は数日前に行われました。 この記事は、Firecrackerがインターネットで発表された直後、プロジェクトのGitHubに76の星があり、発行時点でこの数字が500を超えていたときに書き始めました。







爆竹の機能



Firecrackerの主要なコンポーネントは、Linux KVMを使用していわゆるmicroVMを作成および実行する仮想マシンモニター(VMM)です。 著者は、自社製品を「QEMUのクラウドベースの代替品」(Kata Containersで使用)と呼び、「安全で効率的なコンテナの発売のみを目的として設計されています。」



次に、前述のmicroVMを実行するホストシステムの例を示します。







開発者は、製品に最も必要なものだけを含めることで最小限のメモリコストを確保し、同時に潜在的な脆弱性の可能性を減らすなど、ミニマリズムに努めています。 Firecrackerでは、virtio-net、virtio-block、シリアルコンソール、およびmicroVMの動作を停止するために使用される1つのボタンを持つキーボードの4つのデバイスのみがエミュレートされます。 現在、 Linuxカーネルバージョン4.14 (昨年11月からのリリース)以降に基づくOSはホストおよびゲストオペレーティングシステムとしてサポートされており、開発者の現在の計画は最新の2つの安定したLinuxカーネルブランチをサポートする予定です。 ハードウェアに関しては、これまでのところIntelプロセッサのみがサポートされていますが、AMDとARMは計画中です。



Firecracker自体は単一のVMMプロセスで構成され、起動時にホストマシンでエンドポイント(RESTful)APIを使用できるようにします。 API自体はOpenAPI形式で記述されており、特に、指定されたパラメーター(カーネルイメージ、ルートファイルシステム、ブート引数)でmicroVMを起動して停止し、仮想マシン(vCPUの数、RAM、CPUのテンプレート)を追加し、追加することができますネットワークインターフェイス、ディスク(ブロックデバイスとして表示され、読み取り/書き込みモードと読み取り専用モードが使用可能)、ログとメトリックのシステムを構成します。



Firecrackerの主な利点は、安全性(マルチテナントコンピューティングに焦点を当て、いくつかの分離レベル)、高性能(microVMは125ミリ秒で起動でき、著者は来年この数値を改善することを約束します)、最小限のオーバーヘッド(各microVMは約5メガバイトを消費します)メモリ)。 プロジェクトの重要性を増すもの-それは既に「戦い」でテストされており、多くのAWSサービス(前述のLambdaとFargateを含む)の作業を提供します。



セキュリティの詳細



Firecrackerの主な機能の中で、高レベルのセキュリティを確保することに焦点を当てたものには、次のものが記載されています。



  1. シンプルなゲストモデル(すべてのゲストに最低限必要なもののみが提供されます-上記の約4台のデバイスを参照)。
  2. cgroupsとseccomp BPF、および許可された限られたシステムコールでFirecrackerプロセスを分離します。
  3. ホスト環境から隔離して起動するためのFirecrackerプロセスの静的リンク。


爆竹のデモ



AWSブログで 、microVMを実際に試す方法を示しました。 これを行うには、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がコンテナエコシステムにシームレスに統合されるように取り組んでいます-将来のシームレスな統合を目標に、コンテナのワークロードを分離するためのより多くのオプションを提供します。」


PS



ブログもご覧ください。






All Articles