В русском переводе вышла книга “Изучаем eBPF” (Learning eBPF) Лиз Райс, главного специалиста по открытым технологиям в компании Isovalent. В ней автор рассказала сисадминам и разработчикам, как можно успешно применять eBPF в своей работе. eBPF (Extended Berkeley Packet Filter) — это технология, позволяющая безопасно и эффективно выполнять свой код в ядре Linux. Хотя у книги небольшой объем (220 стр.), она наверняка будет полезна для ИТ-специалистов по управлению сетями, обеспечению безопасности и мониторингу в сложных системах. 

***

Открывает рецензию ссылка на страницу книги “Изучаем eBPF: программирование ядра Linux для улучшения безопасности, сетевых функций и наблюдаемости” на сайте издательства.  А еще у нас в блоге есть промокод на эту книгу. Введите промокод  SSPSOFT, скидка отразится на этапе оплаты заказа.

Из интересного — книгу на русский язык переводил известный Линукс-гуру,  Олег Цилюрик. Он также был автором двух книг по Линукс, вышедших в издательстве БХВ. Это книги:

О творчестве  Олега Цилюрика можно прочесть в статье в блоге БХВ: Чистовики патриарха. О трёх последних книгах Олега Цилюрика.

Почему обзор книги о eBPF интересен специалистам по тестированию, админам и DevOps?

Технологии на основе eBPF открывают новые горизонты в области наблюдаемости и анализа данных, особенно в сложных IT-экосистемах. Одним из инструментов, который заслуживает отдельного внимания, является bpftool — инструмент для работы с программами eBPF, который может стать полезным дополнением (по API) к системам зонтичного мониторинга.

Одной из основных задач в мониторинге систем является получение достоверных и оперативных данных о производительности, системных событиях и возможных сбоях. eBPF дает возможность внедрения кода прямо в ядро Linux без необходимости его перекомпиляции. Инструмент bpftool служит связующим звеном между разработчиком, администратором и самим ядром системы. С помощью bpftool можно: отслеживать и измерять производительность отдельных модулей приложения, собирать телеметрию в реальном времени, необходимую для зонтичных систем мониторинга.

Еще стоит упомянуть Cilium — платформу с открытым исходным кодом, использующую технологию eBPF для обеспечения сетевой безопасности, наблюдаемости и управления в среде Kubernetes и микросервисов. Она была разработана компанией Isovalent и стала одной из наиболее популярных eBPF-базированных платформ. Сбор телеметрии с помощью Cilium позволяет глубоко анализировать трафик и поведение приложений. Имеется интеграция с инструментами Grafana, Prometheus и Hubble (компонент Cilium) для визуализации сетевой активности.

Резюме: инструменты eBPF, такие как bpftool и Cilium, прекрасно сочетаются с концепцией зонтичного мониторинга. Они усиливают возможности в части глубины наблюдаемости и оперативности отклика. Мониторинг через eBPF создает уникальную возможность объединения высокоуровневого подхода зонтичной системы и низкоуровневого доступа к ядру Linux.

Как автор объяснила причину создания книги

Лиз упомянула, что ее интерес к eBPF начался с выступления коллеги на DockerCon в 2017 году. Технология тогда находилась на этапе зарождения, но она сразу распознала ее потенциал для изменения подхода к работе ядра. Со временем, расширенный пакетный фильтр Беркли eBPF стал доступным в большинстве ядер Linux, и интерес к этой технологии в ИТ-сообществе только усилился.

Лиз начала делиться своими знаниями через доклады и презентации, а затем пришла к написанию книги. автор справедливо считает, что объяснение сложных технологий через текст не только помогает другим, но и способствует лучшему пониманию технологии для себя самой.

Следующим толчком к развитию и популяризации технологии eBPF стало создание в 2021 году eBPF Foundation — организации, созданной для поддержки экосистемы технологии, а также для продвижения сопутствующих инструментов, практик и решений. eBPF Foundation функционирует под эгидой Linux Foundation и является частью более широкой инициативы Open Source Security Foundation (OpenSSF).

Компания Isovalent, в которой работает автор, стала ключевым участником eBPF Foundation. Примечательно, что членами фонда являются лидеры рынка, активно работающие с eBPF и заинтересованные в развитии этой технологии. В их число входят Google, Facebook (Meta), Microsoft и Netflix.

Примеры сегодняшнего мспользования eBPF в наиболее крупных проектах:

  • Netflix: управление сетевой политикой в высоконагруженных кластерах.

  • Google Cloud: интеграция с Cilium для повышения безопасности в GKE.

  • Airbnb: оптимизация сети и безопасности Kubernetes-кластеров.

С учетом того, что компании Isovalent требовалось провести маркетинговую популяризацию eBPF, создание и распространение книги по этой технологии напрашивалось само собой. Поэтому способности Лиз Райс к систематизации материала и его подачи в виде презентаций, докладов и мануалов сыграли ключевую роль, чтобы такая книга была написана и издана в США, а затем и в других странах, включая лицензионный русский вариант.

В чем ценность технологии eBPF? Она решает ряд проблем, ранее казавшихся неразрешимыми за разумное время

eBPF (extended Berkeley Packet Filter) позволяет решать задачи высокой сложности в области сетевого взаимодействия, наблюдаемости и безопасности, которые ранее были либо невыполнимыми, либо требовали значительных усилий или времени по модификации приложений или операционной системы.

В частности, чтобы проанализировать поведение приложения или собрать его метрики, разработчикам прежде приходилось вносить изменения в исходный код или использовать сторонние агенты, что могло снижать производительность и вызывать сложности с внедрением.

С появлением eBPF, программы выполняются в ядре и могут собирать информацию о системных вызовах, сетевом трафике и взаимодействии с файловой системой без необходимости менять само приложение. Например, реализация отладочного инструмента bpftrace позволяет динамически собирать метрики системы, включая количество вызовов read() или операции с файлами, и анализировать их в реальном времени.

Приложения в пользовательском пространстве используют интерфейс syscall для выполнения запросов к ядру (иллюстрация: Isovalent)
Приложения в пользовательском пространстве используют интерфейс syscall для выполнения запросов к ядру (иллюстрация: Isovalent)

Следующей областью для  применения  eBPF стали задачи повышения производительности сетей. Традиционные межсетевые экраны (firewalls) или системы фильтрации пакетов требуют значительных накладных расходов, так как данные пересылаются между ядром и пространством пользователя (user space), где применяются правила и фильтры. С помощью eBPF правила фильтрации и обработки данных исполняются прямо в ядре операционной системы. Например,  Cilium использует eBPF для улучшения маршрутизации и обеспечения сетевой безопасности в средах контейнеров.

Обеспечение безопасности в системах, построенных на Linux, до появления eBPF часто включало модификацию ядра или написание драйверов. Это было сложно и требовало значительных временных затрат. eBPF позволяет добавлять динамическое поведение к ядру без его переписывания и обновления, что существенно ускоряет внедрение новых механизмов безопасности. Например, LSM BPF дает возможность реализовать решения на уровне Linux Security Modules без их жесткой интеграции в код ядра. Это упрощает добавление собственных правил контроля доступа и анализа угроз.

Диагностика проблем и оптимизация производительности также относится к области применения  eBPF, давая возможность встраивать точечную отладку прямо в ядро, что упрощает анализ и оптимизацию производительности системы. Ранее внесение изменений в ядро Linux для выполнения уникальных задач занимало месяцы из-за необходимости включения патчей в официальный код. Даже после интеграции они доходили до продакшен-систем с задержкой в годы.

Как происходит типичное добавление функций в ядро без eBPF (иллюстрация Вадима Щеколдина, Isovalent)
Как происходит типичное добавление функций в ядро без eBPF (иллюстрация Вадима Щеколдина, Isovalent)

С eBPF разработчики могут вносить изменения на уровне ядра немедленно, избегая этих сложностей. Например, добавление нового поведения или функций стало быстрее и безопаснее благодаря eBPF Verifier, проверяющему безопасность исполняемого кода.

Таким образом, eBPF дает разработчикам и администраторам новые "сверхспособности" в создании высокопроизводительных и безопасных систем, устраняя многие ограничения традиционного подхода к работе с Linux.

Аннотации к главам книги "Изучаем eBPF"

Лиз Райс начинает книгу с описания истоков технологии, отсылая читателя к истории проекта Berkeley Packet Filter (BPF), впервые анонсированного в 1993 году. Технология BPF изначально была создана для фильтрации сетевых пакетов, но с течением времени трансформировалась в eBPF – мощный инструмент общего назначения. Автор довольно подробно освещает эволюцию eBPF, начиная с интеграции BPF в ядро Linux в 1997 году, включая его роль в сетевых утилитах, и завершая текущими возможностями для мониторинга, безопасности и управления сетью.

Оглавление и пробный отрывок русского издания можно посмотреть здесь. Что интересно, в рамках ко-маркетинга компания Isovalent, где работает автор, оформила бесплатный доступ к лицензионному оригиналу книги.

Оригинал книги на англ. яз. можно бесплатно читать на сайте компании Isovalent https://isovalent.com/books/learning-ebpf/ в рамках ко-маркетинга Isovalent и O’Reilly
Оригинал книги на англ. яз. можно бесплатно читать на сайте компании Isovalent https://isovalent.com/books/learning-ebpf/ в рамках ко-маркетинга Isovalent и O’Reilly

Особое внимание в книге уделяется ключевым нововведениям, которые принесли с собой eBPF, включая систему вызовов bpf(), структуры данных eBPF Maps, механизм проверки eBPF-программ (Verifier) и добавление "вспомогательных функций" для работы программ.

Автор подчеркивает, как eBPF изменил подход к инструментам наблюдаемости и безопасности. В частности, с 2016 года Netflix и Facebook стали активно использовать eBPF в своих инфраструктурах. Например, проект Katran от Facebook заметно улучшил производительность балансировки нагрузки.

Глава 1: Что такое eBPF и почему это важно

Первая глава вводит читателя в мир eBPF, объясняя его роль в ядре Linux и значимость для современных технологий. Автор рассматривает историю от Berkeley Packet Filter до расширенного eBPF, демонстрируя ключевые функции, такие как eBPF Maps, Verifier и bpf() вызовы. Примеры от Netflix и Facebook подчеркивают возможности в безопасности, наблюдаемости и сетях.
Польза главы: Дает полезные знания о фильтре eBPF и его применении.

Глава 2: eBPF и Hello World

Эта глава посвящена вашему первому упражнению с eBPF. Лиз демонстрирует использование фреймворка BCC для написания и запуска программы, показывающей, как eBPF работает внутри ядра. Пример "Hello World" помогает освоить базовые понятия.
Польза главы: Классическая стартовая точка для начинающих, желающих разобраться в практике написания eBPF-программ.

Глава 3: Анатомия eBPF-программы

Автор разбирает состав eBPF-программ: от написания кода на C до компиляции в байт-код для виртуальной машины eBPF. Рассматриваются структуры данных, JIT-компиляция и подключение программ к событиям ядра.
Польза главы: Позволяет понять внутреннее устройство eBPF-программ и их цикл выполнения.

Глава 4: Системный вызов bpf()

Глава фокусируется на bpf() – ключевом вызове для взаимодействия между программами eBPF и ядром. Описываются типы взаимодействий: загрузка программ, создание карт и привязка к событиям.
Польза главы: Даст представление о коммуникации между пространством пользователя и ядром через bpf().

Глава 5: CO-RE, BTF и libbpf

Рассматриваются современные подходы к написанию переносимых eBPF-программ. Автор рассказывает о BTF (BPF Type Format) и использовании библиотеки libbpf для упрощения разработки.
Польза главы: Поможет разработчикам создавать эффективные и портируемые программы для разных версий ядра Linux.

Глава 6: eBPF для безопасности

Глава описывает использование eBPF для реализации инструментов безопасности. Рассматриваются подходы к отслеживанию системных вызовов и созданию профилей Seccomp. Обсуждается использование LSM BPF и таких проектов, как Cilium Tetragon. Польза главы: Раскрывает возможности eBPF для предотвращения угроз и защиты систем.

Глава 7: Помощники BPF и управление событиями

В этой главе обсуждаются функции-хелперы BPF, которые помогают программам взаимодействовать с системой. Рассматриваются типы программ eBPF и способы привязки их к разным событиям.
Польза главы: Даст более глубокое понимание внутреннего механизма eBPF и его гибкости.

Глава 8: Сетевая обработка с использованием eBPF

Здесь автор фокусируется на возможностях eBPF в сетевых задачах, включая фильтрацию пакетов, управление трафиком и ускорение сетевых операций. Описываются проекты XDP и их влияние на производительность.
Польза главы: Покажет, как eBPF улучшает сетевые функции в Linux.

Глава 9: Трассировка и наблюдаемость

Эта глава посвящена инструментам наблюдаемости, основанным на eBPF. Демонстрируются примеры сбора метрик и анализа поведения системы в реальном времени.
Польза главы: Даст некоторые навыки настройки и использования инструментов мониторинга.

Глава 10: Защита системы с помощью eBPF

Автор подробно описывает применение eBPF для контроля доступа и обнаружения аномалий. Освещаются примеры использования профилей безопасности и кастомных политик.
Польза главы: Поможет разработчикам и администраторам усилить безопасность системы.

Глава 11: Продвинутое программирование на eBPF

Глава рассматривает более сложные аспекты программирования на eBPF: использование "tail calls" и управление сложными сценариями.
Польза главы: Подходит для опытных разработчиков, стремящихся расширить свои знания и навыки.

Глава 12: Разработка и экосистема

Заключительная глава посвящена инструментам, фреймворкам и библиотекам, которые облегчают создание программ на eBPF. Обсуждаются CO-RE и интеграция с Rust. 
Польза главы: Это по сути обзор лучших практик и полезных инструментов для работы с eBPF.

Заключение

На протяжении всей книги Лиз Райс подчеркивает, что ее руководство наполнено конкретными примерами кода. По ее мнению, изучение технологии невозможно без практики — поэтому написание и выполнение программ помогает действительно понять, как работает система. Кроме того, книга будет полезна даже тем, кто не планирует писать собственные программы eBPF, но хочет получить понимание как это все работает.

Немного HR-рекламы от нашего блога: мы занимаемся заказной разработкой ПО и будем рады получить резюме специалистов, готовых работать оффлайн в Москве (ЦАО) и Томске, а также удаленно из любой точки России. Текущие вакансии на нашей странице на hh. Резюме можно направить нам напрямую в Telegram или на почту job@ssp-soft.com.

Внимание: при отклике напрямую в наш HR, пож-та приложите сопроводительное письмо с фразой «Нашел(ла) вас на Хабре» для ускоренного рассмотрения резюме.

Успехов в изучении и практическом применении eBPF в ваших задачах!

Комментарии (0)