Aísla contenedores mediante un kernel de aplicación en espacio de usuario que intercepta llamadas al sistema, limita el acceso al kernel del host y se integra con Docker/Kubernetes a través de un runtime OCI.

gVisor proporciona una sólida capa de aislamiento entre las aplicaciones en ejecución y el sistema operativo anfitrión. Es un kernel de aplicación que implementa una [interfaz similar a Linux][linux]. A diferencia de Linux, está escrito en un lenguaje seguro para la memoria (Go) y se ejecuta en el espacio de usuario.
gVisor incluye un runtime de [Open Container Initiative (OCI)][oci] llamado
runsc que facilita el trabajo con las herramientas de contenedores existentes.
El runtime runsc se integra con Docker y Kubernetes, lo que simplifica la
ejecución de contenedores en sandbox.
seccomp-bpf), ni un envoltorio sobre las primitivas de aislamiento de Linux
(por ejemplo, firejail, AppArmor, etc.).gVisor adopta un tercer enfoque distinto, proporcionando muchos de los beneficios de seguridad de las VMs mientras mantiene un menor consumo de recursos, un arranque rápido y la flexibilidad de las aplicaciones normales en el espacio de usuario.
Los contenedores no son un [sandbox][sandbox]. Aunque los contenedores han revolucionado la forma en que desarrollamos, empaquetamos y desplegamos aplicaciones, usarlos para ejecutar código no confiable o potencialmente malicioso sin aislamiento adicional no es una buena idea. Si bien usar un único kernel compartido permite ganancias de eficiencia y rendimiento, también significa que el escape del contenedor es posible con una sola vulnerabilidad.
gVisor es un kernel de aplicación para contenedores. Limita la superficie del kernel anfitrión accesible a la aplicación mientras sigue dando a la aplicación acceso a todas las características que espera. A diferencia de la mayoría de los kernels, gVisor no asume ni requiere un conjunto fijo de recursos físicos; en su lugar, aprovecha la funcionalidad existente del kernel anfitrión y se ejecuta como un proceso normal. En otras palabras, gVisor implementa Linux por medio de Linux.
gVisor no debe confundirse con tecnologías y herramientas para endurecer los contenedores frente a amenazas externas, proporcionar comprobaciones de integridad adicionales o limitar el alcance del acceso de un servicio. Siempre se debe tener cuidado con los datos que se ponen a disposición de un contenedor.
La documentación de usuario y la arquitectura técnica, incluidas las guías de inicio rápido, se pueden encontrar en [gvisor.dev][gvisor-dev].
gVisor compila en x86_64 y ARM64. Otras arquitecturas pueden estar disponibles en el futuro.
A los efectos de estas instrucciones, [bazel][bazel] y otras dependencias de
compilación están incluidas en un contenedor de compilación. Es posible usar
[bazel][bazel] directamente, o escribir make help para ver los objetivos
estándar.
Asegúrate de que las siguientes dependencias estén instaladas:
Compila un tarball de release que contiene runsc, el shim de containerd
containerd-shim-runsc-v1, y algunos binarios auxiliares que runsc espera
encontrar en un directorio gvisor-bin/ junto a sí mismo, y luego extráelo a
/usr/local/bin:
make release-tarball DESTINATION=bin/
sudo tar -C /usr/local/bin -xf bin/gvisor.tar.bz2
Para compilar bibliotecas o binarios específicos, puedes especificar el objetivo:
make build TARGETS="//pkg/tcpip:tcpip"
No se recomienda usar Bazel directamente debido a la sobrecarga adicional, pero para empezar:
Después de configurar las dependencias, usar Bazel es similar al Makefile:
bazel build -c opt //debian:gvisor-release-tar-bz2
Para ejecutar las suites de pruebas estándar, puedes usar:
make unit-tests
make tests
Para ejecutar pruebas específicas, puedes especificar el objetivo:
# Makefile
make test TARGETS="//runsc:version_test"
# Bazel
bazel test //runsc:version_test
Algunos paquetes admiten la ejecución de pruebas directamente en macOS. En el momento de escribir esto, gVisor requiere bazel 8, que puedes instalar mediante 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 proyecto usa [bazel][bazel] para compilar y gestionar dependencias. Se
mantiene una rama go sintética que es compatible con las herramientas go
estándar por comodidad. Esto es útil para paquetes y bibliotecas externos que
dependen de subpaquetes de gVisor (por ejemplo, redes en espacio de usuario a
través de Netstack) para importar código Go de gVisor en sus proyectos Go.
Selecciona esta rama explícitamente con la consulta de rama go. @latest
resuelve a master, que requiere Bazel y no es compatible con las herramientas
Go estándar:
go get gvisor.dev/gvisor/pkg/tcpip/transport/tcp@go
NOTA: Las compilaciones de runsc desde esta rama no son compatibles.
gVisor y runsc requieren varios binarios (algunos de los cuales ni siquiera
están escritos en Go) para funcionar. La rama go se admite con el mejor
esfuerzo posible, y el desarrollo directo en esta rama no es compatible. El
desarrollo debe realizarse en la rama master, que luego se refleja en la rama
go.
Consulta GOVERNANCE.md para obtener información sobre la gobernanza del proyecto.
Consulta ADOPTERS.md para obtener una lista de usuarios y adoptantes de producción conocidos.
La [lista de correo gvisor-users][gvisor-users-list] y la [lista de correo gvisor-dev][gvisor-dev-list] son buenos puntos de partida para preguntas y discusión.
Consulta SECURITY.md.
Consulta Contributing.md.