eBPF — Programovateľný Linux kernel
eBPF (extended Berkeley Packet Filter) je technológia, ktorá umožňuje spúšťať sandboxované programy priamo v Linux kerneli bez zmeny zdrojového kódu kernelu alebo načítania kernel modulov. Revolucionalizuje networking, observability a security v moderných infraštruktúrach.
Čo je eBPF?
Tradične, ak ste chceli zmeniť správanie kernelu, mali ste dve možnosti — napísať kernel modul (riskantné, komplexné) alebo čakať na upstream zmenu (pomalé). eBPF priniesol tretiu cestu.
eBPF programy:
- Bežia v sandboxe v kerneli — nemôžu crashnúť systém
- Sú verifikované pred spustením — kernel verifier kontroluje bezpečnosť
- Sú JIT kompilované — bežia takmer natívnou rýchlosťou
- Pripájajú sa k hook points — syscalls, network events, tracepoints
┌──────────────────────────────┐
│ User Space │
│ ┌─────────┐ ┌───────────┐ │
│ │ Cilium │ │ Tetragon │ │
│ └────┬────┘ └─────┬─────┘ │
│ │ │ │
├───────┼─────────────┼───────┤
│ ▼ Kernel ▼ │
│ ┌─────────────────────┐ │
│ │ eBPF Programs │ │
│ │ ┌───┐ ┌───┐ ┌───┐ │ │
│ │ │net│ │sec│ │obs│ │ │
│ │ └───┘ └───┘ └───┘ │ │
│ └─────────────────────┘ │
│ Network Syscalls FS │
└──────────────────────────────┘
Prečo je eBPF revolučný?
Výkon
eBPF programy bežia priamo v kerneli — žiadne context switching medzi user space a kernel space. Pre networking to znamená spracovanie paketov bez kopírovania do user space.
Bezpečnosť
Na rozdiel od kernel modulov, eBPF programy prechádzajú verifikáciou:
- Kontrola ukončenia (žiadne nekonečné slučky)
- Kontrola prístupu k pamäti (žiadne out-of-bounds)
- Kontrola privilegií (len oprávnené operácie)
Flexibilita
Jeden kernel, mnoho use cases — networking, security, tracing, profiling — všetko cez eBPF programy, ktoré sa dajú načítať a vybrať za behu.
Cilium — eBPF-powered networking
Cilium je open-source projekt, ktorý používa eBPF ako základ pre Kubernetes networking, security a observability. Je to CNCF Graduated projekt a predvolený CNI pre mnohé managed Kubernetes služby.
Čo Cilium nahrádza
- kube-proxy — eBPF nahrádza iptables pre service routing
- Tradičné CNI — Cilium je plnohodnotný CNI plugin
- Network policies — rozšírené beyond základné K8s network policies
Inštalácia Cilium
# Pomocou Helm
helm repo add cilium https://helm.cilium.io/
helm install cilium cilium/cilium \
--namespace kube-system \
--set kubeProxyReplacement=true \
--set k8sServiceHost=${API_SERVER_IP} \
--set k8sServicePort=${API_SERVER_PORT}
Cilium Network Policy
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: allow-frontend-to-api
spec:
endpointSelector:
matchLabels:
app: api
ingress:
- fromEndpoints:
- matchLabels:
app: frontend
toPorts:
- ports:
- port: "8080"
protocol: TCP
rules:
http:
- method: GET
path: "/api/v1/.*"
Cilium network policies umožňujú filtrovať traffic na L7 úrovni — podľa HTTP metódy a cesty, nie len podľa portov.
Hubble — Observability
Hubble je observability platforma postavená na Cilium:
# Inštalácia Hubble
cilium hubble enable --ui
# Sledovanie network flows
hubble observe --namespace production
hubble observe --verdict DROPPED
hubble observe --to-label app=database
# UI
cilium hubble ui
Tetragon — Runtime security
Tetragon je eBPF-based security observability a enforcement nástroj od Isovalent (tvorcov Cilium).
Čo Tetragon monitoruje
- Process execution — kto spustil čo
- File access — čítanie/zápis citlivých súborov
- Network connections — odchádzajúce spojenia
- Privilege escalation — zmeny capabilities
Príklad: Detekcia čítania /etc/shadow
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
name: detect-shadow-read
spec:
kprobes:
- call: fd_install
syscall: false
args:
- index: 0
type: int
- index: 1
type: file
selectors:
- matchArgs:
- index: 1
operator: Equal
values:
- /etc/shadow
- /etc/passwd
Tetragon enforcement
Tetragon vie nielen detegovať, ale aj zastaviť podozrivú aktivitu:
# Zabiť proces, ktorý sa pokúsi pripojiť na crypto mining pool
spec:
kprobes:
- call: tcp_connect
selectors:
- matchArgs:
- index: 0
operator: Equal
values:
- "mining-pool.example.com"
matchActions:
- action: Sigkill
Falco — Runtime threat detection
Falco je CNCF Graduated projekt pre detekciu hrozieb za behu. Používa kombináciu kernel modulov a eBPF pre zachytávanie syscall-ov.
Falco pravidlá
- rule: Terminal shell in container
desc: Detekcia interaktívneho shell-u v kontajneri
condition: >
spawned_process and container
and shell_procs
and proc.tty != 0
output: >
Shell v kontajneri (user=%user.name container=%container.name
shell=%proc.name parent=%proc.pname)
priority: WARNING
tags: [container, shell, mitre_execution]
# Inštalácia Falco s eBPF
helm install falco falcosecurity/falco \
--namespace falco \
--set driver.kind=ebpf \
--set falcosidekick.enabled=true
eBPF pre observability
bpftrace — Dynamický tracing
# Sledovanie otvorených súborov
bpftrace -e 'tracepoint:syscalls:sys_enter_openat {
printf("%s %s\n", comm, str(args->filename));
}'
# Latencia DNS lookupov
bpftrace -e 'kretprobe:inet_csk_accept {
@latency = hist(nsecs - @start[tid]);
}'
# Top 10 syscalls
bpftrace -e 'tracepoint:raw_syscalls:sys_enter {
@[comm] = count();
}'
Pixie — Auto-instrumented observability
Pixie používa eBPF na zachytávanie application-level dát bez akejkoľvek inštrumentácie:
- HTTP/gRPC requesty a latencie
- Database queries
- DNS requesty
- CPU profily
eBPF use cases v DevOps
| Use Case | Nástroj | Popis |
|---|---|---|
| CNI/Networking | Cilium | Kubernetes networking bez iptables |
| Service mesh | Cilium Service Mesh | Mesh bez sidecar proxy |
| Security | Tetragon, Falco | Runtime detection & enforcement |
| Observability | Hubble, Pixie | Network flows, app metrics |
| Profiling | Pyroscope, Parca | Continuous profiling |
| Load balancing | Katran (Meta) | L4 load balancer |
Obmedzenia eBPF
- Linux only — Windows a macOS majú obmedzený support
- Kernel verzia — plná funkcionalita od kernelu 5.10+
- Strmá learning curve — nízkoúrovňové programovanie
- Verifier limity — niektoré programy sú príliš komplexné pre verifier
- Debugging — náročnejší ako user-space programy
Best Practices
- Začnite s Cilium — najzrelší eBPF projekt pre Kubernetes
- Používajte high-level nástroje — bpftrace, Cilium, Tetragon namiesto raw eBPF
- Monitorujte eBPF programy — sledujte ich overhead
- Aktualizujte kernel — novšie jadrá = lepší eBPF support
- Kombinujte nástroje — Cilium pre networking + Tetragon pre security
eBPF transformuje spôsob, akým pristupujeme k Linux networking, security a observability. Namiesto ťažkých user-space riešení poskytuje kernel-natívnu cestu s minimálnym overhead-om a maximálnou viditeľnosťou.