👋 Привет, сетевой друг! — 13 августа 2026 г. в 12:26:21.010
👋 Привет, сетевой друг! Сегодня разберём eBPF vs iptables/nftables. По факту это два подхода к фильтрации трафика, которые сейчас активно конкурируют в Kubernetes и просто в Linux-окружениях. 🟣Классический стек iptables/nftables: правила обрабатываются последовательно через цепочки netfilter в ядре. Каждый пакет проходит через все правила пока не найдёт совпадение. При тысячах правил (типичная ситуация в Kubernetes) это становится узким местом - каждое новое правило добавляет линейную сложность O(n). Посмотреть текущие правила и статистику: iptables -L -n -v --line-numbers nft list ruleset iptables -t filter -L -n -v | grep -v "0 0" 🟣Что меняет eBPF: вместо обхода цепочек правил программа на eBPF выполняется прямо в ядре при каждом пакете - без копирования в userspace, без обхода длинных цепочек. Решение принимается за O(1) через hash-таблицы вместо O(n) через правила: # Простой XDP-дроппер через eBPF cat > drop_icmp.c << 'EOF' #include <linux/bpf.h> #include <linux/if_ether.h> #include <linux/ip.h> SEC("xdp") int drop_icmp(struct xdp_md *ctx) { void *data = (void *)(long)ctx->data; void *data_end = (void *)(long)ctx->data_end; struct ethhdr *eth = data; if ((void *)(eth + 1) > data_end) return XDP_PASS; struct iphdr *ip = (void *)(eth + 1); if ((void *)(ip + 1) > data_end) return XDP_PASS; if (ip->protocol == 1) return XDP_DROP; return XDP_PASS; } EOF clang -O2 -target bpf -c drop_icmp.c -o drop_icmp.o ip link set dev eth0 xdp obj drop_icmp.o sec xdp 🟣Почему Kubernetes переходит на eBPF через Cilium: kube-proxy генерирует тысячи iptables-правил для service routing - по несколько правил на каждый сервис и эндпоинт. При 10000 сервисов это десятки тысяч правил, обновление которых занимает секунды и блокирует пакетную обработку. Cilium заменяет всё это на eBPF-программы с hash-таблицами: # Проверяем что Cilium использует eBPF вместо iptables cilium status | grep -i datapath cilium bpf lb list # вся load balancing таблица cilium bpf policy get --all # политики как eBPF программы 🟣Эмулируем разницу под нагрузкой - добавляем 10000 iptables-правил и меряем деградацию: # Генерируем 10000 правил for i in $(seq 1 10000); do iptables -A INPUT -s 10.$((i/256)).$((i%256)).0/24 -j ACCEPT done # Меряем пропускную способность iperf3 -c target -t 30 # Чистим и меряем без правил для сравнения iptables -F INPUT iperf3 -c target -t 30 🟣Когда iptables/nftables всё ещё правильный выбор: небольшие сети с сотнями правил, классические серверы без Kubernetes, когда команда не готова к eBPF-отладке. eBPF побеждает при тысячах правил, высоком pps и динамически меняющейся конфигурации как в Kubernetes. 🤖Бесплатный ChatGPT

