🔴 Advanced

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
  • verifikované pred spustením — kernel verifier kontroluje bezpečnosť
  • 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

  1. Začnite s Cilium — najzrelší eBPF projekt pre Kubernetes
  2. Používajte high-level nástroje — bpftrace, Cilium, Tetragon namiesto raw eBPF
  3. Monitorujte eBPF programy — sledujte ich overhead
  4. Aktualizujte kernel — novšie jadrá = lepší eBPF support
  5. 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.