
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 capa sólida de aislamiento entre las aplicaciones en ejecución y el sistema operativo host. Es un kernel de aplicación que implementa una interfaz similar a Linux. A diferencia de Linux, está escrito en un lenguaje seguro en cuanto a memoria (Go) y se ejecuta en espacio de usuario.
gVisor incluye un runtime de Open Container Initiative (OCI) llamado runsc
que facilita el trabajo con las herramientas de contenedores existentes. El runtime runsc
se integra con Docker y Kubernetes, lo que hace que sea sencillo ejecutar contenedores
en sandbox.
seccomp-bpf), ni un envoltorio sobre
primitivas de aislamiento de Linux (p. ej. firejail, AppArmor, etc.).gVisor adopta un tercer enfoque distinto, que ofrece muchos de los beneficios de seguridad de las VM mientras mantiene una menor huella de recursos, un arranque rápido y la flexibilidad de las aplicaciones normales de espacio de usuario.
Los contenedores no son un sandbox. Si bien 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. Si bien el uso de un kernel único y compartido permite ganar 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 host accesible para la aplicación, a la vez que le sigue dando acceso a todas las funciones 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 host y se ejecuta como un proceso normal. En otras palabras, gVisor implementa Linux mediante Linux.
gVisor no debe confundirse con tecnologías y herramientas para endurecer contenedores contra 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 se compila en x86_64 y ARM64. Es posible que otras arquitecturas estén disponibles en el futuro.
A los efectos de estas instrucciones, bazel y otras dependencias de
compilación están envueltos en un contenedor de compilación. Es posible usar
bazel directamente, o escribir make help para ver los objetivos estándar.
Asegúrate de tener instaladas las siguientes dependencias:
Compila un tarball de lanzamiento que contenga runsc, el shim de containerd containerd-shim-runsc-v1,
y unos binarios sidecar 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
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 ejecutar pruebas directamente en macOS. Al 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 para compilar y gestionar dependencias. Se mantiene una rama
go sintética que es compatible con las herramientas go estándar por
conveniencia. Esto es útil para paquetes y bibliotecas externos que dependen de
subpaquetes de gVisor (p. ej. redes en espacio de usuario mediante 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
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 recibe soporte en la medida de lo posible, y
no se admite el desarrollo directo en esta rama. 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.
La lista de correo de gvisor-users y la lista de correo de gvisor-dev son buenos puntos de partida para preguntas y debates.
Consulta SECURITY.md.
Consulta Contributing.md.