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 tiempo de ejecución de [Open Container Initiative (OCI)][oci] llamado runsc
que facilita el trabajo con las herramientas de contenedores existentes. El tiempo de ejecución 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 (p. ej., firejail, AppArmor, etc.).gVisor adopta un tercer enfoque distinto, que proporciona muchos de los beneficios de seguridad de las VM mientras mantiene una menor huella de recursos, un inicio 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 e implementamos aplicaciones, usarlos para ejecutar código no confiable o potencialmente malicioso sin aislamiento adicional no es una buena idea. Aunque usar un único kernel compartido permite obtener eficiencia y mejoras de 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 para 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 cambio, 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 reforzar los contenedores frente a amenazas externas, proporcionar comprobaciones de integridad adicionales o limitar el alcance del acceso para un servicio. Siempre se debe tener cuidado con los datos que se ponen a disposición de un contenedor.
La documentación para el usuario y la arquitectura técnica, incluidos los guías de inicio rápido, se pueden encontrar en [gvisor.dev][gvisor-dev].
gVisor se 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 envueltas en un contenedor de compilación. Es posible usar
[bazel][bazel] directamente, o escribir make help para los objetivos estándar.
Asegúrese de que las siguientes dependencias estén instaladas:
Compile un tarball de versión que contenga 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áigalo 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, puede 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 permiten ejecutar las 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 utiliza [bazel][bazel] para compilar y gestionar dependencias. Se mantiene una rama go sintética compatible con las herramientas estándar de go por conveniencia. Esto es útil para paquetes y bibliotecas externas que dependen de subpaquetes de gVisor (por ejemplo, redes en espacio de usuario mediante Netstack) para importar código Go de gVisor en sus proyectos Go.
Seleccione esta rama explícitamente con la consulta de la rama go. @latest resuelve a master, lo cual requiere Bazel y no es compatible con las herramientas estándar de Go:
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 es compatible con un esfuerzo de mejor esfuerzo, 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.
Consulte GOVERNANCE.md para obtener información sobre la gobernanza del proyecto.
Consulte ADOPTERS.md para obtener una lista de usuarios de producción y adoptantes 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.
Consulte SECURITY.md.
Consulte Releases.
Consulte Contributing.md.