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][linux]. Diferentemente do Linux, ele é escrito em uma linguagem segura em termos de memória (Go) e é executado no espaço do usuário.
O gVisor inclui um runtime da [Open Container Initiative (OCI)][oci] chamado runsc
que facilita o trabalho com as 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, proporcionando muitos benefícios de segurança das VMs enquanto mantém o menor consumo de recursos, a inicialização rápida e a flexibilidade das aplicações comuns no espaço do usuário.
Contêineres não são uma [sandbox][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 o uso de um único kernel compartilhado permita ganhos de eficiência e 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. Diferentemente da maioria dos kernels, o gVisor não assume nem exige 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][gvisor-dev].
O gVisor é compilado em x86_64 e ARM64. Outras arquiteturas podem se tornar disponíveis no futuro.
Para os fins destas instruções, o [bazel][bazel] e outras dependências de compilação
estão encapsulados em um contêiner de compilação. É possível usar o
[bazel][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 versão 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 teste 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 este texto foi escrito, o gVisor requer o 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][bazel] para compilar e gerenciar dependências. Um branch go sintético é mantido para ser compatível com as ferramentas padrão do go, por conveniência. Isso é útil para pacotes e bibliotecas externas que dependem de subpacotes do gVisor (por exemplo, rede em espaço de 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 padrão do Go:
go get gvisor.dev/gvisor/pkg/tcpip/transport/tcp@go
NOTA: runsc builds a partir deste branch não são suportados. gVisor e
runsc requerem vários binários (alguns dos quais nem sequer estão escritos em Go) para
funcionar. O branch go é suportado numa capacidade de melhor esforço, e
o desenvolvimento direto neste branch não é suportado. O desenvolvimento deve ocorrer no
branch master, que é depois refletido no branch go.
Consulte GOVERNANCE.md para informações sobre a governança do projeto.
Consulte ADOPTERS.md para uma lista de utilizadores de produção e adotantes conhecidos.
A [lista de discussão gvisor-users][gvisor-users-list] e a [lista de discussão gvisor-dev][gvisor-dev-list] são bons pontos de partida para questões e discussão.
Consulte SECURITY.md.
Consulte Releases.
Consulte Contributing.md.