🔥 Разбираемся в eBPF
eBPF (extended Berkeley Packet Filter) — экосистема, с помощью которой мы можем модифицировать поведение ядра Linux без переписывания самого ядра. Например, изменить логику работы сетевого стека, добавить фильтрацию на уровне пакетов, перехватывать системные вызовы и т.п. Все это делается через eBPF-программы, которые загружаются в ядро динамически. Любая eBPF-программа — это всегда две программы.
⚪️ Часть Kernel space (код на C)
- Исполняется прямо в ядре Linux с большой скоростью
- Есть жесткие ограничения на внешние библиотеки, на длину функции и циклы. Верификатор строго проверяет код перед загрузкой
- Позволяет прикрепить хуки к системным вызовам ядра
⚪️ User space (Go, Python, Rust)
- Обычная программа без ограничений
- Может вызывать Kubernetes API, открывать сокеты, писать в файлы
- Общается с kernel-частью через специальные примитивы для коммуникации
⚪️ Примитивы для коммуникации:
- Глобальные переменные — например, счетчик пакетов, который kernel обновляет, а userspace читает
- Хэшмапы (BPF maps) — словари для передачи данных
- Ring buffers — очереди для уведомлений: получили пакет → отправили событие в userspace
eBPF дает нам возможность менять низкоуровневое поведение системы и реагировать на события с помощью верхнеуровневого языка.
@DevOpsKaz 😛
Post #1859
1.75K

- 👍 8
- ❤ 5
- ⚡ 3
- 🔥 3