惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Forbes - Security
Forbes - Security
The Hacker News
The Hacker News
V
Vulnerabilities – Threatpost
C
CXSECURITY Database RSS Feed - CXSecurity.com
Spread Privacy
Spread Privacy
P
Proofpoint News Feed
AWS News Blog
AWS News Blog
S
Securelist
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
T
Troy Hunt's Blog
SecWiki News
SecWiki News
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Security Latest
Security Latest
C
Cyber Attacks, Cyber Crime and Cyber Security
AI
AI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Stack Overflow Blog
Stack Overflow Blog
I
Intezer
I
InfoQ
Attack and Defense Labs
Attack and Defense Labs
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Recent Commits to openclaw:main
Recent Commits to openclaw:main
T
The Exploit Database - CXSecurity.com
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
N
News | PayPal Newsroom
云风的 BLOG
云风的 BLOG
S
Secure Thoughts
T
The Blog of Author Tim Ferriss
Martin Fowler
Martin Fowler
L
LINUX DO - 最新话题
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
D
Darknet – Hacking Tools, Hacker News & Cyber Security
A
About on SuperTechFans
Hacker News - Newest:
Hacker News - Newest: "LLM"
TaoSecurity Blog
TaoSecurity Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Webroot Blog
Webroot Blog
L
LangChain Blog
MyScale Blog
MyScale Blog
Recent Announcements
Recent Announcements
P
Privacy & Cybersecurity Law Blog
Vercel News
Vercel News
Engineering at Meta
Engineering at Meta
C
Cybersecurity and Infrastructure Security Agency CISA
Y
Y Combinator Blog
L
Lohrmann on Cybersecurity
B
Blog RSS Feed
The Last Watchdog
The Last Watchdog

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Разработка под Kubernetes: локально всё работает, в проде — нет. Кейс с Tetragon и eBPF
gromyko21 (C · 2026-04-28 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение5 мин

Охват и читатели71

Кейс

Всем привет, я Саша архитектор ИБ проекта по защите контейнерных сред. Если кратко - сканируем образы, защищаем кластеры от запуска "плохих" образов и защищаем поды в реальном времени.

При разработке runtime-безопасности под Kubernetes легко попасть в ловушку: локально всё работает идеально, но в реальном кластере начинает вести себя непредсказуемо. В этой статье разберу три реальные проблемы, с которыми мы столкнулись при интеграции Tetragon: потеря событий, дубли и ошибки дедупликации.

Для подобного рода защиты нужно подписываться на системные вызовы  Linux. Мы не стали строить велосипед и взяли open source решение (Tetragon) для отслеживания и управления событий уровня ядра Linux.

Что такое  Tetragon?
Обзорная схема tetragon

Обзорная схема tetragon

Tetragon сидит в ядре Linux на уровне eBPF, слушает системные вызовы и события (типа открытия файлов, запуска процессов, сетевых соединений), сравнивает их с заданными политиками и либо логирует, либо блокирует. По сути - это такой невидимый охранник внутри ядра, который видит всё и решает, что с этим делать.

Коротко об устройстве системы

В нашем случае используется специфическая архитектура. Есть сервисы ядра и агентские сервисы. Сервисы ядра - это мозг системы, агенты занимаются защитой конкретных кластеров\нод. Специфика заключается в том, что между агентской стороной и ядром используется прокси сервис. Это сделано для одностороннего сетевого взаимодействия, чтобы заказчик меньше заморачивался с настройками сетевых доступов.
Почти вся связь между сервисами осуществляется при помощи брокера сообщений Nats(на стороне ядра и агентов).

Упрощенная архитектураня схема.

Упрощенная архитектураня схема.


Основная задача - создать политику, отловить нарушения политик и показать пользователю. Казалось бы ничего сложного - подключился по  gRPC к Tetragon, слушаем его логи, прокидываем из агента и сохраняем в ClickHouse.

Задача понятна, политики сделали, нарушения отлавливаем. Для подготовки фичи к релизу протестировали на dev стендах - все работает. Спасибо за то, что дочитали статью до конца. Увы и ах, при проведении нагрузочного тестирования на кластере с несколькими нодами показало, что большая часть логов из Tetragon не доходит до  ClickHouse.

Первая проблема - одно ядро, что правит всеми.

Проблему мы нашли. Дело в том, что Tetragon загружает eBPF-программы в ядро Linux, слушает события и принимает решения, что с ними делать.
При локальной разработке мы используем minikube, который поднимает легковесный Kubernetes-кластер на одной ноде (одной виртуальной машине с одним экземпляром ядра Linux). Соответственно, не было возможности проверить работу на нескольких нодах. И локально мы подключались к одному поду Tetragon и слушали его логи.

На dev-стенде у нас жил не полноценный K8s, а его младший брат K3s. В стандартной сборке он использует общую базу данных SQLite, а не распределённый etcd. На одном узле проблему потери логов воспроизвести не удалось - сколько ни пытались. А когда развернули настоящий многокластерный k8s с etcd - тут же появилась.

Есть проблема - начинаем ее чинить. Решение довольно простое. Подключаться ко всем инстансам Tetragon на каждой ноде.

Tetragon работает как DaemonSet: один под на каждой ноде. Делаем list pods по селектору, получаем список и коннектимся к каждому отдельно». Новая нода? DaemonSet поднял pod, агент увидел его на следующем sync’е, добавил в пул.

Подключаемся ко всем нодам кластера  k8s.

Подключаемся ко всем нодам кластера  k8s.

В итоге мы получили рабочий код, который помогает отлавливать нарушения политик. Нагрузочное тестирование это подтвердило. Теперь точно завершаем статью, спасибо за внимание.

Спам нарушений политики

Ладно, вынужден продолжить, потому что не всё так радужно. Пошли тестировать другие виды политик. Если раньше на одно действие приходил один лог, то теперь - два, три одинаковых события. Непорядок. Копаем дальше.

Чтобы понять, почему полезли дубли, нужно заглянуть под капот политик Tetragon. Берём простейшую команду touch file. Для нас это одно действие. Для ядра - целых два системных вызова: сначала openat (создать файл), потом utimensat (выставить время). На выходе получаем два лога. И два лога не предел, может быть очень много. Показывать дубли, как потенциальную угрозу безопасности - плохой подход. Можно сделать такие политики, что за считанные минуты на активном кластере она будет генерировать миллионы дублей в минуту.

Появление дубликатов событий.

Появление дубликатов событий.

Проблему поняли - пора чинить. Сделали дедупликацию по трём признакам: PID, время поступления и ключевые поля из лога Tetragon.

Дедупликация.

Дедупликация.

Снова нагрузочное тестирование, разные политики, разные ноды - все круто, всем спасибо.

Повторяем нагрузочное тестирование, ловим проблемы c дедупликацией

Снова пришел тестировщик и начал давать нагрузку. Он изменил подход. Раньше он спамил нарушение от разных  PID. Сейчас он решил сделать все в рамках одного скрипта на питоне. И вот незадача - дедупликация сломалась. Он делает сотню разных нарушений для разных политик - мы склеиваем их в одно. Беда. Снова идём чинить, на этот раз убираем PID из ключей дедупликации.

Окей, но теперь два разных процесса в одну временную метку делают одно и то же нарушение - и мы их склеиваем в одно событие. В нагруженном кластере это нормально.

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

Вывод

Основная сложность разработки под Kubernetes — не в API и не в YAML, а в том, что система изначально распределённая и это всегда нужно держать в голове.

eBPF даёт низкоуровневые события — фактически системные вызовы (например, open, execve, connect).

Но политики безопасности описываются на более высоком уровне:
«процесс внутри контейнера не должен создавать файлы в /etc» или «не должен запускать shell».

Проблема в том, что одно такое “действие” пользователя почти всегда раскладывается на несколько системных вызовов. Например, банальный touch file превращается в open и utimensat. В итоге между уровнем политики и уровнем событий появляется разрыв, который нужно как-то склеивать.

На самом деле, есть еще интересные моменты, связанные с интеграцией политик(которыми поделюсь в следующих статьях). В планах есть нарастить rps примерно в 8 раз. С пропускной способностью тоже решали разные проблемы в виду необычной архитектуры. Есть понимание, что и как нужно делать. Как-нибудь опишу и эту историю.

Мы не первый год занимаемся контейнерной безопасностью, чаще всего смотрим на k8s. И как только начинает казаться, что мы достигли дна, в хорошем смысле слова, снизу всегда кто-то стучит. Приходится лучше тестировать, находить больше корнер-кейсов, устраивать совместные мозговые штурмы. Но нам это нравится!

Любая система, которая в одиночной среде кажется простой, в Kubernetes превращается в распределённую. А значит, её поведение нужно проверять не на уровне “работает/не работает”, а на уровне “как ведёт себя при масштабировании и конкуренции”.