AWC apresenta Firecracker - micro-virtualização para Linux



Na AWS re: Invent 2018, que acontece atualmente em Las Vegas, ocorreu o anúncio do Firecracker , uma nova tecnologia de virtualização de código aberto baseada no Linux KVM. Os autores prometem que, com isso, "em uma fração de segundo, você pode executar máquinas micro-virtuais leves (microVMs) em um ambiente não virtualizado, obtendo as vantagens das VMs tradicionais - na forma de segurança e isolamento de cargas de trabalho e contêineres - na forma de uso eficiente dos recursos".

Antecedentes


O Firecracker está sendo desenvolvido por funcionários da Amazon Web Services que se propuseram a melhorar o consumo de recursos e a vida útil de usuários de serviços como o AWS Lambda (lançado em 2014 e hoje nos permite dizer que o modelo sem servidor continuará a existir) e o AWS Fargate (apareceu um ano atrás) )

O projeto foi baseado no desenvolvimento de código aberto do Google, crosvm do Chromium OS, escrito em Rust e responsável pelo lançamento de sistemas operacionais com virtualização de dispositivos (mas sem emular hardware real). Portanto, o código do Firecracker também é escrito na linguagem Rust , e seus autores prometem retornar suas correções à base de código do projeto pai, embora os próprios projetos tenham divergido bastante de propósito.

A primeira versão pública do Firecracker - 0.1.0 - ocorreu em março deste ano, e a última versão mais recente - 0.11.0 - há apenas alguns dias. Comecei a escrever este artigo logo após o anúncio do Firecracker na Internet, quando o projeto tinha 76 estrelas no GitHub e, no momento da publicação, esse número ultrapassava 500.



Recursos do Firecracker


O principal componente do Firecracker é o VMM (Virtual Machine Monitor), que usa o Linux KVM para criar e executar os chamados microVMs. Os autores chamam seu produto de "uma alternativa baseada na nuvem ao QEMU" [usada pela Kata Containers], "destinada apenas ao lançamento seguro e eficiente de contêineres".

E aqui está um exemplo de um sistema host que executa os microVMs mencionados:



Os desenvolvedores buscam o minimalismo, incluindo no produto apenas o mais necessário, garantindo assim custos mínimos de memória e, ao mesmo tempo, reduzindo o potencial de possíveis vulnerabilidades. No Firecracker, apenas 4 dispositivos são emulados: virtio-net, virtio-block, console serial e um teclado com 1 botão, usado para interromper a operação do microVM. Como sistemas operacionais host e convidado, atualmente são suportados sistemas operacionais baseados no kernel Linux versão 4.14 ( lançada em novembro do ano passado) e superior, e os planos atuais dos desenvolvedores são oferecer suporte às duas últimas ramificações estáveis ​​do kernel Linux. Em termos de hardware, apenas os processadores Intel são suportados até o momento, mas a AMD e o ARM estão na agenda.

O Firecracker em si consiste em um único processo do VMM, que na inicialização disponibiliza a API do terminal (RESTful) na máquina host. A API em si é descrita no formato OpenAPI e, em particular, permite iniciar o microVM com os parâmetros especificados (imagem do kernel, sistema de arquivos raiz, argumentos de inicialização) e pará-lo, configurar máquinas virtuais (número de vCPU, RAM, modelo para CPU), adicionar a interfaces de rede, discos (apresentados como dispositivos de bloco, modos de leitura e gravação e somente leitura disponíveis), configuram o sistema para logs e métricas.

As principais vantagens do Firecracker são segurança (foco na computação multilocatário, vários níveis de isolamento), alto desempenho (o microVM pode ser lançado em 125 ms e os autores prometem melhorar esse valor no próximo ano), sobrecarga mínima (cada microVM consome cerca de 5 megabytes memória). O que acrescenta peso ao projeto - ele já foi testado "em batalha" e fornece o trabalho de vários serviços da AWS (incluindo os mencionados Lambda e Fargate).

Detalhes de segurança


Entre os principais recursos do Firecracker, focados em garantir um alto nível de segurança, são mencionados os seguintes:

  1. Modelo de convidado simples (para todos os convidados, apenas o mínimo é fornecido - veja acima cerca de 4 dispositivos).
  2. Isolando o processo do Firecracker com cgroups e seccomp BPF, bem como um conjunto limitado de chamadas de sistema permitidas.
  3. Vinculação estática do processo do Firecracker para iniciá-lo isoladamente do ambiente host.

Firecracker Demo


O blog da AWS mostrou como você pode experimentar os microVMs em ação. Para fazer isso, basta criar uma instância do i3.metal e fazer upload de 3 arquivos para ela (arquivo executável do firecracker , imagem raiz do FS, kernel do Linux):



Depois disso - defina os direitos necessários para / dev / kvm:

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

Defina a configuração para a primeira máquina convidada:

 $ 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 }" 

... então o núcleo para ela:

 $ 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\" }" 

... e FS raiz:

 $ 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 }" 

Resta realmente lançar o convidado:

 # 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\" }" 

Resultado:



E quanto a outros projetos de contêineres?


Embora os autores do Firecracker prometam sua "integração com tempos de execução populares de contêineres", é isso que eles respondem quando perguntados se o projeto pode ser usado com contêineres Kubernetes, Docker ou Kata:

Ainda não. Estamos desenvolvendo o Firecracker como um projeto de código aberto, pois oferece uma abordagem significativamente diferente à segurança no lançamento de contêineres. Esperamos que outras comunidades que criam tecnologias de código aberto para contêineres o considerem útil. "Estamos trabalhando para garantir que o Firecracker se integre perfeitamente ao ecossistema de contêineres - com o objetivo de integração contínua no futuro, fornecendo mais opções para isolar as cargas de trabalho de contêineres".

PS


Leia também em nosso blog:

Source: https://habr.com/ru/post/pt431192/


All Articles