Files
obsidian-sympozium/08-Słownik-K8s/gVisor.md
2026-03-25 00:05:57 +01:00

2.8 KiB

gVisor

#kubernetes #security #sandbox #słownik

Co to jest?

gVisor to projekt open-source od Google implementujący user-space kernel - warstwę pośrednią między kontenerem a kernelem hosta. Zamiast pozwalać kontenerowi na bezpośrednie wywołania systemowe (syscalls) do kernela hosta, gVisor przechwytuje je i obsługuje we własnym user-space kernelu o nazwie Sentry.

Jak działa?

Bez gVisor:
  Container → syscall → Host Kernel (współdzielony!)

Z gVisor:
  Container → syscall → Sentry (user-space kernel) → ograniczone syscalls → Host Kernel

Sentry reimplementuje dużą część interfejsu Linux kernel (ponad 200 syscalls) w Go. Tylko niewielka liczba prawdziwych syscalls jest przekazywana do hosta.

Kluczowe komponenty

Komponent Rola
Sentry User-space kernel - obsługuje syscalls kontenera
Gofer File server - pośredniczy w dostępie do systemu plików
runsc OCI runtime - integruje się z containerd/runc

Dlaczego to ważne?

Problem z tradycyjnymi kontenerami

Kontenery współdzielą kernel hosta. Exploit w kernelu (np. CVE w obsłudze syscalls) = ucieczka z kontenera = dostęp do hosta i wszystkich innych kontenerów.

Rozwiązanie gVisor

  • Kontener rozmawia z Sentry, nie z prawdziwym kernelem
  • Nawet jeśli Sentry zostanie skompromitowany, ma ograniczony dostęp do hosta
  • Powierzchnia ataku kernela zredukowana z ~400 syscalls do ~50

Porównanie z alternatywami

Technologia Izolacja Overhead Kompatybilność
Kontenery (runc) Namespace + cgroups ~0% 100%
gVisor User-space kernel 5-10% ~95% (nie wszystkie syscalls)
Kata Containers Lightweight VM ~15-20% ~99%
Pełna VM (KVM) Hypervisor ~30%+ 100%

Ograniczenia

  • Nie wszystkie syscalls są implementowane (np. niektóre ioctl)
  • Overhead I/O - Gofer dodaje pośrednika do operacji plikowych
  • Networking - netstack (własny stack sieciowy) może mieć różnice w zachowaniu
  • GPU - ograniczone wsparcie dla GPU passthrough

Użycie w Kubernetes

gVisor integruje się z K8s przez RuntimeClass:

apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
  name: gvisor
handler: runsc

Pod używający gVisor:

spec:
  runtimeClassName: gvisor

Użycie w Sympozium

W Sympozium gVisor jest opcjonalną warstwą izolacji dla agent podów. Konfiguracja w AgentRun lub SympoziumInstance:

agentSandbox:
  enabled: true
  runtimeClass: gvisor

Integracja via Agent Sandbox - gVisor i Kata (kubernetes-sigs/agent-sandbox).


Powiązane: Kata Containers | Agent Sandbox - gVisor i Kata | RuntimeClass | SecurityContext