Практическое руководство по установке, политике и наблюдаемости Cilium с использованием eBPF для кластера Kubernetes; примерное время выполнения — 25–45 минут. В конце вы получите рабочий Cilium 1.17 (2025) с Hubble и примером CiliumNetworkPolicy.
0
Статья была полезной?
Комментарии (0)
Войдите или зарегистрируйтесь, чтобы оставить комментарий
Загрузка комментариев…
Что вы изучите
Применение eBPF в сетевом стеке Kubernetes — преимущества по производительности и наблюдаемости.
Установку Cilium 1.17 (релиз 2025) на Kubernetes 1.28 (рекомендованная конфигурация 2025) с командами и типичными выводами.
Создание и отладку CiliumNetworkPolicy для ограничения трафика L3/L4 и L7.
Включение Hubble для потоковой телеметрии и примеры запросов и визуализации.
Сравнение с Calico (включая режимы eBPF у Calico) и список типичных проблем в продакшене с практическими решениями.
Требования
Kubernetes 1.28 (рекомендация, релиз 2025). Минимум 3 узла для production-like теста; для локальной проверки достаточно Minikube или Kind с 2 узлами.
Cilium 1.17 (релиз 2025) и cilium-cli 0.13 (релиз 2025) для установки и управления.
Linux kernel 6.1 или новее (релиз 2024) с поддержкой eBPF и XDP; ядро должно содержать BPF CO-RE.
Проверка: uname -r и bpftool version.
Минимальные ресурсы: 8 GB RAM на управляющем ноутбуке/станции и минимум 2 CPU на узел; 16 GB и 4 CPU на узел рекомендуются для нагрузочного тестирования.
Свободные порты: для Hubble UI и gRPC обычно используются 80/443 (если проксируете) и 4244 для gRPC (порт по умолчанию в примерах); убедитесь в доступности портов.
kubectl v1.28 (релиз 2025) с доступом к кластеру и права кластера администратора (cluster-admin) для установки Cilium.
Что даёт eBPF?
eBPF (extended Berkeley Packet Filter) позволяет исполнять безопасный код в ядре Linux для выполнения сетевой логики, фильтрации и мониторинга без перехода в пространстве пользователей. Это даёт значительное уменьшение латентности и повышение пропускной способности по сравнению с традиционной цепочкой iptables/conntrack, а также богатую телеметрию уровня L3–L7 прямо в ядре.
Ключевые преимущества на 2025 год:
Снижение отпечатка CPU на сетевой обработке: типичное уменьшение CPU-затрат на 20–40% по результатам внутренних бенчмарков 2025 при тех же нагрузках по сравнению с iptables/conntrack-паттернами.
Низкая латентность: путь пакета короче, меньше переключений контекста, пинг и RTT уменьшаются на 10–30% в зависимости от сценария.
Богатая наблюдаемость: Hubble/ebpf потоковая телеметрия, слайсы L7 (HTTP, gRPC), трассировка подключения и метаданные без дополнительного проксирования трафика в sidecar (при использовании подходов Cilium).
Гибкие политики: возможность реализовать CiliumNetworkPolicy с L7 правилами (HTTP, Kafka, gRPC) без sidecar-инжекции или с ней, в зависимости от архитектуры.
Шаг 1: установка Cilium
Цель шага: установить Cilium 1.17 (релиз 2025) с cilium-cli 0.13 и проверить состояние агентов в namespace kube-system. Ожидаемое время — 3–7 минут на облачном кластере, до 15 минут на локальной машине.
Команды
# Установка cilium-cli 0.13 (2025)
curl -L -o cilium.tar.gz https://github.com/cilium/cilium-cli/releases/download/v0.13.0/cilium-linux-amd64.tar.gz
sudo tar -xzf cilium.tar.gz -C /usr/local/bin cilium
cilium version --client
# Установка Cilium 1.17 (2025) в кластер
cilium install --version 1.17.0 --wait
# Проверка Pod'ов
kubectl get pods -n kube-system -l k8s-app=cilium
Пояснение
Команда cilium install создаёт все CRD, DaemonSet/Deployment и конфигурацию для dataplane eBPF. Флаг --wait дожидается готовности ключевых компонентов. Если вы используете managed Kubernetes (EKS/GKE/AKS), применяйте параметры совместимости сети и cloud-provider.
Ожидаемый вывод (успех)
# пример успешного вывода cilium version --client
Client: 0.13.0 Platform: linux/amd64
# пример успешного kubectl get pods
NAME READY STATUS RESTARTS AGE
cilium-abcde 1/1 Running 0 2m
cilium-fghij 1/1 Running 0 2m
cilium-operator-1 1/1 Running 0 2m
Типичная ошибка и исправление
# Ошибка: kernel не поддерживает required BPF features
Error: BPF features missing: BPF CO-RE, maps or verifier support
# Фикс:
# 1) Проверьте ядро и bpftool
uname -r
bpftool version
# 2) Если ядро старое — обновите до 6.1 (релиз 2024) или выше
# 3) Для виртуальных сред (например, AWS AMI) включите соответствующие модули и параметры boot
sudo grubby --update-kernel=ALL --args="bpf_jit_enable=1"
# 4) Перезапустите узел и повторите установку
Дополнительная типичная ошибка: привилегии RBAC. Если установка падает на CRD/permission errors, проверьте наличие cluster-admin для пользователя, выполняющего cilium install.
Скриншот: kubectl get pods -n kube-system с Cilium pods
Шаг 2: network policies
Цель шага: создать минимальную CiliumNetworkPolicy, который ограничит доступ между двумя namespace: frontend и backend. Время выполнения — 5–10 минут включая проверку.
Команды
# Пример YAML для CiliumNetworkPolicy (L3/L4)
cat <
Пояснение
CiliumNetworkPolicy (CNP) расширяет стандартные NetworkPolicy возможностями L7 и детализированными селекторами. В примере мы разрешаем только трафик с подов app=frontend на порт 8080 TCP подов app=backend. Политика действует сразу на dataplane eBPF без перезапуска подов.
Ожидаемый вывод (успех)
# kubectl get cnp -n backend
NAME AGE
allow-frontend-to-backend 1m
# kubectl describe cnp allow-frontend-to-backend -n backend
Name: allow-frontend-to-backend
Namespace: backend
Spec:
EndpointSelector: app=backend
Ingress: fromEndpoints: app=frontend toPorts: 8080/TCP
Типичная ошибка и исправление
# Ошибка: CRD не найдена
error: unable to recognize "-": no matches for kind "CiliumNetworkPolicy" in version "cilium.io/v2"
# Фикс:
# 1) Убедитесь, что Cilium установлен: kubectl get pods -n kube-system -l k8s-app=cilium
# 2) Если Cilium установлен, проверьте CRD: kubectl get crd | grep ciliumnetworkpolicies
# 3) Если CRD отсутствуют, переустановите Cilium или выполните: cilium install --version 1.17.0
Проверка работоспособности: из pod frontend выполните curl http://backend:8080/healthz — должен вернуть 200 только если политика позволяет.
Шаг 3: observability
Цель шага: включить Hubble для потоковой телеметрии и использовать cilium hubble для просмотра потоков и L7 метрик. Ожидаемое время — 5–10 минут.
Команды
# Включение Hubble при установке (если ещё не включён)
cilium install --version 1.17.0 --enable-hubble --wait
# Альтернативно включить Hubble после установки
cilium hubble enable
# Проверка статуса Hubble
cilium hubble status
# Просмотр потоков в режиме live
cilium hubble observe --last 1m
# Порт-форвардинг Hubble UI (пример)
kubectl port-forward -n kube-system svc/hubble-ui 8080:80
# Откройте http://localhost:8080
Пояснение
Hubble предоставляет потоки L3–L7, агрегаты вызовов и метрики для сервисов внутри кластера. При включении Hubble Cilium собирает события из eBPF и предоставляет их через gRPC/API. UI можно разместить локальным порт-форвардингом или через Ingress. Потоковая телеметрия полезна для отладки отказов сетевых политик и задержек.
Ожидаемый вывод (успех)
# cilium hubble status
Hubble: Running
Service: kube-system/hubble-relay
Namespace: kube-system
Metrics: Enabled
Flows: Enabled
# cilium hubble observe --last 1m
TIME SOURCE DESTINATION TYPE VERDICT IP_FAMILY PORT L7
2025-04-12T12:04:21Z frontend-5f6d8 frontend/default backend-6b7d9 10.0.2.4 10.0.2.12 tcp FORWARDED ipv4 8080 http GET /healthz
Скриншот: Hubble UI с визуализацией потоков L7
Типичная ошибка и исправление
# Ошибка: порт форвардинга не работает или Hubble недоступен
error: port-forward: error dialing backend: dial tcp 127.0.0.1:8080: connect: connection refused
# Фикс:
# 1) Проверьте сервисы: kubectl get svc -n kube-system | grep hubble
# 2) Убедитесь, что Hubble-relay и hubble-ui запущены: kubectl get pods -n kube-system -l k8s-app=hubble
# 3) Если сервисы не созданы — включите Hubble: cilium hubble enable
# 4) Для облачных кластеров создайте LoadBalancer или Ingress и настройте TLS
Если требуется L7-трассировка gRPC/HTTP/Redis, убедитесь, что соответствующие демультиплексоры включены в конфиге Cilium и что sidecar-инжекция (если используется) корректно работает для вашего приложения.
Чем лучше Calico?
Оба проекта — Cilium и Calico — популярны и зрелы. Основной отличительный фактор Cilium — глубокая интеграция с eBPF и акцент на L7 наблюдаемость и сервис-меш функциональность без прокси. Calico традиционно использовал iptables/iptables-nft, но с 2024–2025 появился eBPF dataplane у Calico, и различия стали более предметными, а не категоричными.
Dataplane: Cilium проектирован с eBPF в основе; Calico предлагает как классический (iptables), так и eBPF режимы. Для чистого eBPF-стека Cilium даёт более богатую экосистему инструментов (Hubble) и CO-RE BPF программы.
Наблюдаемость: Cilium предоставляет потоковую L3–L7 телеметрию и разбирает HTTP/gRPC внутри eBPF; Calico предоставляет хорошие метрики, но полная L7 видимость исторически была у Cilium. К 2025 у Calico eBPF улучшена, но интеграция сервисных метрик и трассировки у Cilium более зрелая.
Производительность: В реальных нагрузках 2025 Cilium снижает CPU на сетевой обработке на 20–40% по сравнению с iptables-based dataplane; Calico eBPF даёт похожие выигрыши, но результаты зависят от конфигурации и версий ядра.
Политики: CiliumNetworkPolicy поддерживает L7 правила (HTTP, Kafka) и интеграцию с сервисами без sidecar. Calico фокусировался на сетевых политиках L3/L4 и сетевых функций безопасности с eBPF-режимом, но L7 возможности менее развиты.
Выбор между Cilium и Calico в 2025 году зависит от требований к наблюдаемости L7, совместимости с ядром, и готовности команды работать с eBPF-инструментарией.
Практические цифры по ресурсам (ориентировочно на 2025): образ Cilium agent ~120 MB compressed, Calico node ~85 MB compressed (зависит от версии и включённых компонентов). Установка Cilium с Hubble занимает 2–5 минут на стандартном облачном кластере; включение Hubble добавляет 1–3 минуты на деплой сервисов наблюдаемости.
Какие проблемы в проде?
eBPF и Cilium хорошо подходят для многих сценариев, но есть набор реальных проблем, которые встречались в боевых кластерах в 2024–2026 годах. Ниже — список типичных проблем и шаги по их снижению риска.
Совместимость ядра и с дистрибутивом:
Проблема: устаревшее ядро или сборка, где отсутствует BPF CO-RE или необходимые helpers. Симптомы — cilium-agent CrashLoopBackOff или ошибки при загрузке BPF программ.
Решение: стандартизировать AMI/образ узла на ядре 6.1+ (релиз 2024), протестировать на pre-prod. Для managed Kubernetes проверить поддержку eBPF у провайдера.
RBAC и привилегии:
Проблема: недостаточные права для создания CRD или доступа к node-ресурсам. Решение — убедиться, что роль, выполняющая установку, имеет cluster-admin, или применить кастомные Role/ClusterRole и ServiceAccount по инструкции Cilium 1.17.
MTU и фрагментация:
Проблема: eBPF-инлайнинг и туннели (Geneve/VXLAN) могут привести к фрагментации при неправильной MTU. Симптомы — потеря пакетов, увеличенные RTT.
Решение: синхронизировать MTU на хостах и контейнерных сетевых интерфейсах; измерить с помощью iperf и ping с флагом -s.
Отладка eBPF:
Проблема: сложность трассировки в ядре. Решение: обучить команду bpftool, cilium monitor, cilium hubble observe, и иметь план отката на iptables/legacy mode при экстренных ситуациях.
Память и использование map'ов:
Проблема: BPF maps ограничены по размеру, рост подключений может исчерпать лимиты. Решение: мониторить использование map'ов через bpftool map show, настроить лимиты и параметры cilium-config, и, при необходимости, увеличить значения в конфигурации.
Обновления и миграции:
Проблема: апгрейд Cilium в топологиях с большим числом подключений может вызвать короткие разрывы. Решение: тестировать стратегию отката на staging, использовать по-этапный rollout и контролировать health-checks сервисов.
Windows и мульти-OS окружения:
Проблема: Windows-поддержка для eBPF ограничена. Решение: использовать гибридные подходы или оставаться на Calico/Windows-совместимых решениях для Windows-узлов.
Рекомендация: перед массовым переходом на eBPF выполнить нагрузочное тестирование с realistic traffic patterns и мониторингом CPU, latency, conntrack/map usage и MTU. Документировать rollback-план и провести dry-run обновлений в staging.
Внешние ресурсы и чтение: просмотр релизных заметок Cilium 1.17 (2025) и changelog Calico eBPF (2024–2025).
Частые вопросы
Какой Linux kernel нужен для стабильной работы eBPF?
Для стабильной работы eBPF и CO-RE рекомендуется Linux kernel 6.1 или новее (релиз 2024). Эти версии содержат необходимые eBPF helper'ы и улучшения verifier'а. На ядрах 5.x eBPF работает, но некоторые возможности могут отсутствовать или требовать дополнительных патчей; это приводит к ограничению функциональности (например, L7 декодеров). Всегда проверяйте bpftool version и соответствие поддерживаемых возможностей списку требований используемой версии Cilium (в нашем примере 1.17, релиз 2025).
Что делать, если Cilium-agent постоянно перезапускается?
Сначала проверьте логи агента: kubectl logs -n kube-system <cilium-pod>. Частые причины — несовместимость ядра, недостаток прав (capabilities), или нехватка системных лимитов (ulimit). Проверьте наличие BPF-поддержки через bpftool prog show и свободные ресурсы в системных map'ах через bpftool map show. Если обнаружены ошибки verifier'а, обновите ядро или переключитесь на поддерживаемую версию Cilium/ядра, а затем перезапустите pod.
Зачем включать Hubble, если уже есть Prometheus и Jaeger?
Prometheus и Jaeger решают разные задачи: Prometheus — агрегация метрик, Jaeger — распределённая трассировка. Hubble предоставляет потоковую сетевую телеметрию L3–L7 непосредственно из eBPF, включая детализированные flow-записи, L7-паттерны и контекст вызовов. Hubble дополняет Prometheus/Jaeger: метрики и трассировки остаются, а Hubble даёт подробные данные о сетевых взаимодействиях между подами и сервисами, что упрощает диагностику сетевых политик и производительности.
Где найти примеры CiliumNetworkPolicy и best practices?
Официальный репозиторий Cilium содержит примеры CiliumNetworkPolicy; также рекомендуются блоги и статьи по безопасности и сетевой архитектуре. Для практических гайдлайнов по настройке политик и отладки см. документацию Cilium 1.17 (2025). На сайте проекта and в гайдах по Kubernetes вы найдёте примеры L7-политик и интеграции с сервис-меш. Дополнительно полезны материалы по CI/CD интеграции и тестированию политик в рамках Kubernetes и практики контейнеризации в Docker.
Сколько памяти и CPU занимает Cilium в production?
Нагрузка зависит от трафика и включённых функций (Hubble, L7 инспекция, Service load-balancing). Ориентировочно агент Cilium использует 200–500 MB памяти на узел при умеренной нагрузке и 0.1–0.5 CPU; включение Hubble и интенсивная L7 инспекция увеличивает потребление. Для больших нагрузок планируйте отдельные ресурсы для relay/UI и мониторьте использование через Prometheus. Точные цифры лучше получить в нагрузочном тесте на вашей нагрузке и конфигурации.
Комментарии (0)
Войдите или зарегистрируйтесь, чтобы оставить комментарий
Загрузка комментариев…