Isola containers em sandbox por meio de um kernel de aplicação em userspace que intercepta chamadas de sistema, limita o acesso ao kernel do host e integra-se ao Docker/Kubernetes por meio de um runtime OCI.

O gVisor fornece uma forte camada de isolamento entre aplicações em execução e o sistema operacional hospedeiro. É um kernel de aplicação que implementa uma interface semelhante ao Linux. Diferente do Linux, ele é escrito em uma linguagem com segurança de memória (Go) e é executado no espaço do usuário.
O gVisor inclui um runtime da Open Container Initiative (OCI) chamado runsc
que facilita o trabalho com ferramentas de contêiner existentes. O runtime runsc
integra-se com Docker e Kubernetes, tornando simples a execução de contêineres
em sandbox.
seccomp-bpf), nem um wrapper sobre
primitivas de isolamento do Linux (por exemplo, firejail, AppArmor, etc.).O gVisor adota uma terceira abordagem distinta, oferecendo muitos benefícios de segurança de VMs enquanto mantém o menor consumo de recursos, inicialização rápida e flexibilidade de aplicações comuns no espaço do usuário.
Contêineres não são uma sandbox. Embora os contêineres tenham revolucionado a forma como desenvolvemos, empacotamos e implantamos aplicações, usá-los para executar código não confiável ou potencialmente malicioso sem isolamento adicional não é uma boa ideia. Embora usar um único kernel compartilhado permita eficiência e ganhos de desempenho, também significa que a fuga do contêiner é possível com uma única vulnerabilidade.
O gVisor é um kernel de aplicação para contêineres. Ele limita a superfície do kernel hospedeiro acessível à aplicação, ao mesmo tempo que ainda dá à aplicação acesso a todos os recursos que ela espera. Diferente da maioria dos kernels, o gVisor não assume nem requer um conjunto fixo de recursos físicos; em vez disso, ele aproveita a funcionalidade existente do kernel hospedeiro e é executado como um processo normal. Em outras palavras, o gVisor implementa o Linux por meio do Linux.
O gVisor não deve ser confundido com tecnologias e ferramentas para fortalecer contêineres contra ameaças externas, fornecer verificações adicionais de integridade ou limitar o escopo de acesso de um serviço. Deve-se sempre ter cuidado com quais dados são disponibilizados a um contêiner.
A documentação do usuário e a arquitetura técnica, incluindo guias de início rápido, podem ser encontradas em gvisor.dev.
O gVisor compila em x86_64 e ARM64. Outras arquiteturas podem se tornar disponíveis no futuro.
Para os propósitos destas instruções, o bazel e outras dependências de build
estão encapsulados em um contêiner de build. É possível usar o
bazel diretamente, ou digitar make help para os alvos padrão.
Certifique-se de que as seguintes dependências estejam instaladas:
Compile um tarball de release contendo runsc, o shim do containerd containerd-shim-runsc-v1
e alguns binários auxiliares que o runsc espera encontrar em um
diretório gvisor-bin/ ao lado de si mesmo, e então extraia-o para /usr/local/bin:
make release-tarball DESTINATION=bin/
sudo tar -C /usr/local/bin -xf bin/gvisor.tar.bz2
Para compilar bibliotecas ou binários específicos, você pode especificar o alvo:
make build TARGETS="//pkg/tcpip:tcpip"
Usar o Bazel diretamente não é recomendado devido à sobrecarga extra, mas para começar:
Após configurar as dependências, usar o Bazel é semelhante ao Makefile:
bazel build -c opt //debian:gvisor-release-tar-bz2
Para executar as suítes de testes padrão, você pode usar:
make unit-tests
make tests
Para executar testes específicos, você pode especificar o alvo:
# Makefile
make test TARGETS="//runsc:version_test"
# Bazel
bazel test //runsc:version_test
Alguns pacotes suportam a execução de testes diretamente no macOS. No momento em que isto foi escrito, o gVisor requer bazel 8, que você pode instalar via homebrew:
brew install bazel@8
# You can then run the tests, e.g.:
$(brew --prefix bazel@8)/bin/bazel test --macos_sdk_version=$(xcrun --show-sdk-version) -- //tools/nogo/... //tools/check{aligned,const,escape,linkname,locks,unsafe}/...
go getEste projeto usa bazel para compilar e gerenciar dependências. Um branch go
sintético é mantido e é compatível com as ferramentas go padrão por
conveniência. Isso é útil para pacotes e bibliotecas externas que dependem de
subpacotes do gVisor (por exemplo, rede no espaço do usuário via Netstack) para importar código Go do gVisor
em seus projetos Go.
Selecione este branch explicitamente com a consulta do branch go. @latest resolve
para master, que requer Bazel e não é compatível com as ferramentas Go padrão:
go get gvisor.dev/gvisor/pkg/tcpip/transport/tcp@go
NOTA: Builds do runsc a partir deste branch não são suportados. O gVisor e
o runsc requerem vários binários (alguns dos quais nem sequer são escritos em Go) para
funcionar. O branch go é suportado em regime de melhor esforço, e o
desenvolvimento direto neste branch não é suportado. O desenvolvimento deve ocorrer no
branch master, que é então refletido no branch go.
Consulte GOVERNANCE.md para informações sobre a governança do projeto.
Consulte ADOPTERS.md para uma lista de usuários de produção e adotantes conhecidos.
A lista de e-mails gvisor-users e a lista de e-mails gvisor-dev são bons pontos de partida para perguntas e discussão.
Consulte SECURITY.md.
Consulte Contributing.md.