eBPF Observability Stack для Kubernetes: Cilium + Hubble + Tetragon в production
Меня зовут Семёнов Евгений Сергеевич, директор АйТи Фреш. В 2026 году 67% production Kubernetes кластеров используют eBPF для networking и observability. eBPF-based стек дает zero-overhead мониторинг на уровне kernel, real-time security insights, network performance без sidecar'ов. Рассказываю о production деплое Cilium + Hubble + Tetragon для мониторинга кластера из 200+ подов и 40 нод.
Почему eBPF — будущее Kubernetes observability
eBPF (extended Berkeley Packet Filter) работает на уровне Linux kernel, позволяя инструментировать приложения без изменения кода. Преимущества для K8s:
- Zero overhead — no sidecars, agents, не ест CPU/память приложений
- Deep insights — system calls, network flows, file operations в real-time
- Security at scale — runtime detection аномалий, policy enforcement
- Unified platform — networking + observability + security в одном стеке
Архитектура eBPF Observability Stack
# Core eBPF Stack для K8s
┌─────────────────────────────────────────┐
│ Grafana + Prometheus (visualization) │
├─────────────────────────────────────────┤
│ Hubble UI + CLI (network observability) │
├─────────────────────────────────────────┤
│ Tetragon (runtime security monitoring) │
├─────────────────────────────────────────┤
│ Cilium CNI (eBPF networking & L7 proxy) │
├─────────────────────────────────────────┤
│ Linux Kernel (eBPF programs execution) │
└─────────────────────────────────────────┘
Установка Cilium CNI как основы стека
Cilium — foundation eBPF networking для Kubernetes. Поддержка L3/L4/L7, policy enforcement, service mesh без sidecar'ов:
# 1. Установка Cilium CLI
CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable-v2.txt)
curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-amd64.tar.gz
sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
# 2. Деплой Cilium с Hubble
cilium install \
--helm-set hubble.enabled=true \
--helm-set hubble.relay.enabled=true \
--helm-set hubble.ui.enabled=true \
--helm-set prometheus.enabled=true \
--helm-set operator.prometheus.enabled=true \
--helm-set hubble.metrics.enabled="{dns,drop,tcp,flow,icmp,http}"
# 3. Проверка статуса
cilium status --wait
cilium connectivity test
Настройка Hubble для network observability
Hubble обеспечивает network visibility на уровне L3/L4/L7 через eBPF:
# Конфигурация Hubble
apiVersion: v1
kind: ConfigMap
metadata:
name: hubble-config
namespace: kube-system
data:
config.yaml: |
enable-hubble: true
hubble-socket-path: /var/run/cilium/hubble.sock
hubble-metrics-server: ":9965"
hubble-metrics:
- dns:query,response
- drop:sourceContext,destinationContext
- tcp:sourceContext,destinationContext
- flow:sourceContext,destinationContext
- icmp:sourceContext,destinationContext
- http:sourceContext,destinationContext,headers
Развертывание Tetragon для runtime security
Tetragon — eBPF-based security observability, трекинг system calls, file access, process execution:
# 1. Установка через Helm
helm repo add cilium https://helm.cilium.io/
helm install tetragon cilium/tetragon \
--namespace kube-system \
--set tetragon.grpc.enabled=true \
--set tetragon.prometheus.enabled=true \
--set tetragon.exportFilename=/var/log/tetragon/tetragon.log
# 2. Tracing policies для security monitoring
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
name: file-monitoring
spec:
kprobes:
- call: "security_file_open"
syscall: false
args:
- index: 0
type: "file"
selectors:
- matchArgs:
- index: 0
operator: "Prefix"
values:
- "/etc/passwd"
- "/etc/shadow"
- "/etc/hosts"
Интеграция с Prometheus и Grafana
Настройка метрик collection для полного observability pipeline:
# ServiceMonitor для Cilium metrics
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: cilium-agent
namespace: monitoring
spec:
selector:
matchLabels:
k8s-app: cilium
endpoints:
- port: prometheus
interval: 30s
path: /metrics
---
# ServiceMonitor для Hubble metrics
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: hubble-metrics
namespace: monitoring
spec:
selector:
matchLabels:
k8s-app: hubble
endpoints:
- port: hubble-metrics
interval: 30s
Нужна помощь с eBPF observability?
Настроили eBPF стек для 20+ enterprise кластеров. Поможем с архитектурой, настройкой Cilium + Hubble + Tetragon, интеграцией с существующим мониторингом.
Production-ready мониторинг с eBPF
Ключевые метрики для production monitoring через eBPF stack:
| Компонент | Ключевые метрики | Алерты |
|---|---|---|
| Cilium CNI | BPF map pressure, connection tracking, L7 proxy latency | eBPF program failures, policy violations |
| Hubble | Network flows/sec, L7 requests, DNS resolution time | Anomalous traffic patterns, connectivity issues |
| Tetragon | Process spawns, file access events, syscall frequency | Suspicious process execution, privilege escalation |
Grafana dashboards для eBPF метрик
# Prometheus queries для key eBPF metrics
# Cilium eBPF map usage
cilium_bpf_map_capacity{map_name!=""}
# Network policy drops по Hubble
rate(hubble_drop_total[5m])
# Tetragon process execution events
rate(tetragon_events_total{event_type="process"}[5m])
Security monitoring с Tetragon
Примеры security policies для runtime threat detection:
# Tracing policy для crypto mining detection
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
name: crypto-mining-detection
spec:
kprobes:
- call: "wake_up_new_task"
syscall: false
args:
- index: 0
type: "task"
selectors:
- matchArgs:
- index: 0
operator: "InMap"
values:
- "xmrig"
- "minerd"
- "cpuminer"
- "stratum"
Performance tuning eBPF в production
- eBPF map sizing — увеличить размеры map'ов для high-throughput сетей
- CPU pinning — изоляция eBPF processing threads от application CPU
- Memory allocation — tuning BPF ring buffer размеров
- Kernel version — минимум 5.10+ для полной eBPF feature support
Troubleshooting eBPF issues
# Debug eBPF programs
bpftool prog show
bpftool map show
# Проверка Cilium eBPF status
cilium bpf status
cilium monitor
# Hubble debugging
hubble observe --namespace default
hubble status
- Какие требования к kernel для eBPF?
- Минимум Linux 4.9+ для basic eBPF, рекомендуем 5.10+ для production. Нужна поддержка BPF_PROG_TYPE_XDP, BTF (BPF Type Format). Большинство enterprise дистрибутивов (RHEL 8+, Ubuntu 20.04+) поддерживают out of box.
- Влияние eBPF на производительность?
- eBPF добавляет <1% CPU overhead при правильной настройке. Зато экономит 10-15% CPU, убирая sidecars и DaemonSet агенты. Network latency практически не увеличивается — eBPF работает в kernel space.
- Как мигрировать с traditional CNI на Cilium?
- Blue-green миграция через новый node pool с Cilium. Постепенный drain старых нод. Критично протестировать network policies — Cilium использует eBPF вместо iptables, поведение может отличаться.
Заключение
eBPF observability stack с Cilium + Hubble + Tetragon дает unprecedented visibility в Kubernetes на уровне kernel. Zero-overhead мониторинг, real-time security insights, unified networking platform. В 2026 eBPF становится стандартом для enterprise K8s кластеров.