Привет, ребята, я Луга, сегодня мы представим инструмент наблюдения «следующего поколения» — eBPF. Будучи мощной технологией ядра, eBPF позволяет использовать совершенно новый класс моделей наблюдения. Кроме того, его программы могут легко коррелировать с различными ядрами. собирать данные о происходящих событиях.
Обычно наблюдаемость — это нечто большее, чем просто мониторинг эксплуатации и приложений; это также определение условий окружающей среды на основе результатов работы всей системы. С точки зрения развития технологий, настоящая наблюдаемость следующего поколения — это возможность задавать вопросы системе, а не просто собирать различные данные мониторинга и пытаться сопоставить их для отображения.
В реальных бизнес-сценариях данные, обычно тесно связанные с наблюдаемостью, — это «метрики», «журналы» и «отслеживание ссылок». Однако каждый из этих источников данных имеет разные методы сбора, и, кроме того, для сбора этих элементов данных может потребоваться несколько разных продуктов и агентов. Что, если бы существовал способ собирать данные телеметрии для обеспечения возможности наблюдения ненавязчивым, безопасным и согласованным способом во всех системах с минимальным влиянием на текущую производительность системы и использование ресурсов?
Возможно, eBPF будет хорошим выбором!
Как мы все знаем, программы eBPF представляют собой новое поколение технологий и могут быть прикреплены к различным компонентам ядра для наблюдения и сбора данных о происходящих событиях. Гипотетически, тот же уровень сбора данных, который мы делаем без eBPF, обычно требует загрузки дополнительных модулей ядра или изменения самого ядра, что может занять годы. Кроме того, оба действия увеличивают риск и накладные расходы на производительность ресурсов. Основанный на технологии eBPF, его можно использовать для сбора различных данных на нескольких уровнях, включая идентификаторы процессов, временные метки, системные вызовы и использование ресурсов. В конце концов, программа eBPF защищена проверенной программой, которая гарантирует наличие у нее соответствующих разрешений и предотвращает сбой или негативное влияние на систему. В этом сообщении блога автор попытается проанализировать, что такое наблюдаемость на основе eBPF, а также некоторые способы, с помощью которых eBPF может улучшить наблюдаемость сети, наблюдаемость Kubernetes, наблюдаемость безопасности и наблюдаемость производительности.
Основные функции eBPF
eBPF — это передовая технология, встроенная в ядро Linux, которая позволяет запускать изолированные программы в пространстве ядра (например, Ring-0). Его можно использовать для улучшения и расширения функциональности ядра без загрузки каких-либо дополнительных модулей ядра или безопасной и надежной перекомпиляции ядра.
Если где-то внутри компьютера и выполняются функции безопасности, работы в сети, мониторинга и аналитики, то это ядро операционной системы. Ядра, с другой стороны, консервативны, поскольку они являются критически важной частью любой рабочей системы. Это замедлит разработку новых функций внутри любого ядра, не говоря уже о последствиях для безопасности и рисках, которые могут принести новые функции.
eBPF меняет правила игры, предоставляя возможность запуска изолированных программ в ядре, позволяя разработчикам легко расширять соответствующие функциональные возможности без написания драйверов и модулей ядра. Подсистема eBPF обеспечивает безопасность и стабильность за счет использования JIT-компилятора (Just-in-Time) и механизма проверки байт-кода.
eBPF предлагает множество программного обеспечения, включая программно-определяемые сети (SDN), проекты наблюдения и программное обеспечение на основе безопасности. Он также охватывает множество областей и вариантов использования: обеспечение высокопроизводительной обработки пакетов, балансировку нагрузки, перехват критических системных вызовов, отладку работающего программного обеспечения и многое другое. По сути, eBPF можно назвать суперсилой Linux, которая позволяет нам раскрыть безграничный творческий потенциал для решения задач любой сложности, исходя из реальных требований окружающей среды.
Функции, которые eBPF может в основном реализовать от аппаратного уровня до уровня приложения, следующие:
Система наблюдения eBPF
Как мы все знаем, eBPF — это технология, которая позволяет запускать изолированные программы в ядре Linux без изменения исходного кода ядра или загрузки модулей ядра. Сделав ядро Linux программируемым, инфраструктурное программное обеспечение может использовать существующие уровни и сделать их более интеллектуальными и многофункциональными, не усложняя систему.
Общая эталонная модель архитектуры наблюдения eBPF выглядит следующим образом:
Основываясь на приведенной выше модели архитектуры наблюдения, мы можем видеть, что на основе различных сценариев пользователей, будь то сеть, отслеживание, безопасность, наблюдаемость и т. д., программа пользовательского пространства загружает информацию байт-кода BPF в пространство ядра на основе конкретной информации о запросе. , а затем в пространстве ядра выполняется серия определенных событий, и, наконец, результаты событий передаются обратно в пространство пользователя.
наблюдаемость сети
В целом сбор трассировки сетевых соединений без особых затрат является огромным преимуществом использования eBPF. Классический сценарий заключается в том, что Cilium использует eBPF для глубокого отслеживания тенденций сетевого трафика без необходимости использования прокси-сервера или использования большого количества системных ресурсов.
На основе технологии eBPF он может получать доступ к данным сетевого трафика на разных уровнях, таких как L3, L4 и L7. На основании этого мы можем наблюдать подробный анализ трафика. Здесь мы увидим, какие сетевые данные разрешены или запрещены, какие сетевые политики или конфигурации вызывают проблемы с подключением и т. д.
Основываясь на двух приведенных выше сценариях модели контейнерной сети, мы видим, что на основе традиционной модели наблюдения без eBPF вышеупомянутый сценарий потребует анализа журналов iptables или развертывания ресурсоемких сторонних агентов и инструментов для отслеживания тенденций трафика. , а затем попытайтесь сопоставить их с политиками и процессами приложений для достижения некоторых конкретных бизнес-требований.
Наблюдаемость Kubernetes
Фактически, в дополнение к самому базовому сетевому уровню, eBPF также дает огромные преимущества на уровне наблюдаемости кластера Kubernetes.
Из-за собственной распределенной архитектуры Kubernetes, ее сложности и абстракции метрик Kubernetes мониторинг и масштабирование кластеров Kubernetes традиционно было сложной задачей. Отсутствие у администраторов Kubernetes информации о потреблении ресурсов на уровне ядра затрудняет масштабирование и тонкую настройку. На этом этапе eBPF может улучшить наблюдаемость за счет сбора детальных данных на уровне ядра в кластерах Kubernetes.
Это правда, что с развитием контейнерных технологий и популяризацией облачных экологических концепций Kubernetes предоставляет функции, которых нет у многих платформ, но это также вносит дополнительную сложность. Использование eBPF для наблюдения за Kubernetes является необходимостью, поскольку телеметрия по своей сути доступна без необходимости (или накладных расходов) на передачу прокси или дополнительных программ по кластеру. Программы eBPF могут получать доступ к сетевым метрикам на уровне модуля и изначально понимать не только IP-адреса и порты, но также идентификаторы служб и вызовы API, а затем предоставлять данные операционным панелям мониторинга, таким как Grafana. Те же наблюдаемые данные о трафике и осведомленность об идентификации позволяют пользователям дополнительно динамически понимать всю стратегию работы сети кластера Kubernetes.
Фактически, до появления технологии eBPF было непросто понять в режиме реального времени, какое поведение событий уровня приложения происходит, а затем использовать данные для устранения неполадок и упреждающего управления политиками, во многом из-за ограничений встроенных инструментов, таких как iptables. .
Кроме того, eBPF также может улучшить наблюдаемость Kubernetes за счет использования ресурсов без увеличения нагрузки на систему. С помощью технологии eBPF можно отображать работу системных ресурсов, чтобы мы могли проводить более глубокое понимание, анализ, а также направлять и оптимизировать другие инструменты и процессы на основе собранных данных, таких как макет, размер и общая оптимизация приложений и инфраструктуры.
Основываясь на вышеизложенном, программа eBPF может собирать детальные данные на уровне ядра по всему кластеру Kubernetes, что позволяет командам легче масштабировать кластер. eBPF может предоставить следующие преимущества:
1. Мониторинг на уровне обслуживания. Легче отслеживать процессы на уровне конкретного экземпляра контейнера, что позволяет командам отслеживать закономерности потребления ресурсов.
2. Детализация — программы eBPF предоставляют более подробную информацию, чем журналы, что улучшает общую наглядность.
3. Простота развертывания — eBPF не требует специальной модели, такой как контейнер Sidecar, используемый агентом журнала, и работает на уровне операционной системы, что позволяет потреблять меньше ресурсов, минимизировать накладные расходы и максимизировать преимущества.
наблюдаемость производительности
Наблюдение за производительностью ресурсов обсуждается меньше, но по мере того, как приложения становятся более разнообразными и переходят к микросервисам и контейнерным облачным средам, расширенные возможности наблюдения, предоставляемые eBPF, становятся особенно важными. Хотя многие варианты использования оптимизации производительности все еще находятся на ранних стадиях разработки, прогресс в области наблюдения за производительностью является многообещающим и показывает популярность этих вариантов использования.
Функциональные сценарии, участвующие в повышении наблюдаемости производительности, включают следующее:
1. Сопоставление пропускной способности сети на уровне модуля
2. Сквозная пропускная способность сети и задержка.
3. Такие возможности, как использование ЦП и памяти каждым процессом.
Возможно, в не столь отдаленном будущем eBPF станет одним из основных инструментов для наблюдения за производительностью в облачном пространстве, поскольку мы продолжаем искать способы оптимизации производительности системы и приложений в «золотой зоне» (Process/ Container/Pod), а также путем сквозного сопоставления общей производительности системы (узел/кластер/между кластерами/облаками и т. д.).
наблюдаемость безопасности
Для наблюдения за безопасностью eBPF, возможно, имеет неотъемлемое преимущество. eBPF предоставляет пользователям внутреннюю, глубокую видимость коммуникационных потоков во всей системе. Сценарии использования наблюдения за безопасностью на основе eBPF относительно богаты, включая обеспечение чрезвычайно детальной видимости процессов, а также сквозное наблюдение за процессами и потоками. Даже в простых приложениях микросервисов, работающих в Kubernetes, понимание закономерностей взаимодействия в эфемерных средах без сохранения состояния часто требует глубокого агентского доступа к виртуальным и физическим сетям. Добавьте трафик L4-L7 с несколькими протоколами, и мы получим идеального кандидата для eBPF. С помощью eBPF трафик TLS проходит через модули, узлы и облачную платформу для межуровневой проверки. Подобные проекты, такие как Hubble, основаны на eBPF для сбора данных о сетевом трафике, таких как внезапные изменения в поведении, микровсплески активности в определенных процессах, указывающие на потенциальную эксплуатацию или атаки, шаблоны связи между службами и т. д. Они также позволяют пользователям сканировать и просматривать сетевые транзакции, чтобы понять, какие модули, процессы и системные вызовы были задействованы. eBPF предоставляет пользователям доступ к информации из пяти кортежей, чтобы в режиме реального времени получать представление о состоянии транзакций UDP и TCP с помощью исторических данных.
🚀 process default/privileged-pod /usr/local/bin/crictl exec -it e1accc0422efb7f21b5063c4b3eaf530b28eb9ede373f94e86bf13a58bf02550 /bin/bash🔧
tcp_connect default/privileged-pod /usr/local/bin/crictl 127.0.0.1:64205 -> 127.0.0.1:43213🚀
process kind-control-plane /usr/bin/python 🚀
process kind-control-plane /usr/bin/curl https://raw.githubusercontent.com/realpython/python-scripts/master/scripts/18_zipper.py🔧
tcp_connect kind-control-plane /usr/bin/curl 10.244.0.5:61673 -> 185.199.110.133:443⁉️
syscall kind-control-plane /usr/bin/curl tcp_close💥
exit kind-control-plane /usr/bin/curl https://raw.githubusercontent.com/realpython/python-scripts/master/scripts/18_zipper.py 0💥
exit kind-control-plane /usr/bin/python 0
Фактически, по сути, безопасность и наблюдаемость сети дополняют друг друга. Пользователи могут использовать возможности eBPF и инфраструктуры на основе API для создания программируемых элементов управления и элементов управления, которые можно наблюдать и даже применять к ним действия в среде реального времени. Стратегия.
eBPF предоставляет единый интерфейс трассировки для пользовательского пространства и ядра, не требуя дополнительного обнаружения кода. Во-первых, поскольку трассировка происходит в ядре, трассировка eBPF продолжается, даже если трассировка на основе агента или дополнительная трассировка не удалась. Во-вторых, eBPF не останавливает запущенные процессы для наблюдения за их состоянием, что существенно помогает поддерживать производительность выполнения приложений. Трассировка eBPF происходит в режиме реального времени внутри ядра любой системы, что снижает потери производительности и риски для запуска процессов и приложений.
Третье преимущество использования eBPF для отслеживания заключается в том, что eBPF может отслеживать все в системе, а не ограничиваться определенным уровнем или процессом. Чтобы иметь возможность наблюдать за процессами приложения на основе eBPF, в реальных бизнес-сценариях нам часто не нужно внедрять код во встроенное приложение.
eBPF — впечатляющий инструмент наблюдения, который может обеспечить более глубокое понимание, чем более традиционные решения для наблюдения. Преимущества безопасного, неинтрузивного способа сбора данных телеметрии со всей системы — это то, что раньше было недоступно без множества продуктов, агентов уровня приложений и очень сложных операций. Для получения преимуществ от использования eBPF не требуется никаких глубоких знаний в области программирования eBPF. eBPF развивается и становится стандартной основой для наблюдения, передавая данные в такие инструменты, как Grafana, а также в технологии Kubernetes и другие системы, например, системы многих ведущих облачных компаний. eBPF — это не конечная цель, а инструменты и методы, которые позволяют пользователям достигать глубинных целей.
Adiós !