initial commit
This commit is contained in:
87
08-Słownik-K8s/gVisor.md
Normal file
87
08-Słownik-K8s/gVisor.md
Normal file
@@ -0,0 +1,87 @@
|
||||
# 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]]:
|
||||
|
||||
```yaml
|
||||
apiVersion: node.k8s.io/v1
|
||||
kind: RuntimeClass
|
||||
metadata:
|
||||
name: gvisor
|
||||
handler: runsc
|
||||
```
|
||||
|
||||
Pod używający gVisor:
|
||||
```yaml
|
||||
spec:
|
||||
runtimeClassName: gvisor
|
||||
```
|
||||
|
||||
## Użycie w Sympozium
|
||||
|
||||
W Sympozium gVisor jest opcjonalną warstwą izolacji dla agent podów. Konfiguracja w [[AgentRun]] lub [[SympoziumInstance]]:
|
||||
|
||||
```yaml
|
||||
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]]
|
||||
Reference in New Issue
Block a user