golang

NKT (NetKnownsThat): open-source замена зоопарку инфраструктурных инструментов

  • суббота, 17 октября 2026 г. в 00:00:08
https://habr.com/ru/articles/1095264/

"Я каждый день работаю с кучей инструментов для мониторинга и управления инфраструктурой и меня сильно раздражает то, что путь от момента первого запуска до нормального использования неоправданно длинный."  - Владислав, инженер

Меня зовут Александр, я один из разработчиков NKT (NetKnownsThat) — нашего первого опенсоурс проекта

NKT - это один бинарник на Go (~29 МБ) с встроенным веб-интерфейсом на React+TypeScript+Ant Design. Без Python, Node.js и внешних зависимостей, всё внутри бинарника. Лицензия MIT, сторонние компоненты (noVNC, spice-html5) — со своими открытыми лицензиями. Инструмент анализа, мониторинга, управления от локального компьютера до кластера, от редактирования конфига до прогноза расхода ресурсов Docker-контейнера.

Так выглядит раздел Обзор на хосте

Раздел обзор на хосте
Раздел обзор на хосте

Взамен романа Жуля Верна сухие возможности:

киллер-фича № 1: истина только сейчас

Основной режим использования NKT — это хаб, который постоянно работает в памяти. При этом сам инструмент спроектирован так, чтобы его можно было с лёгкостью удалять и устанавливать: агент на хосте ничего не хранит о сервере — ни базы данных, ни кэша, ни инвентаря. Истина — это сама файловая система Linux и живые процессы. В режиме local NKT после первого запуска уже всё знает о хосте: парсит конфиги nginx, haproxy, docker, опрашивает живые сокеты, службы и фаерволл — и данные сразу доступны даже в режиме tui. Удалили NKT — на сервере не осталось никаких хвостов.

киллер-фича № 2: узкий Sudo — управления привилегиями с криптографией (Hub-sudo)

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

  • хаб генерирует команду и подписывает её приватным ключом хаба;

  • агент на хосте выполняет её через hub-sudo, только если подпись верна;

  • hub-sudo принимает команды лишь из заранее определённого списка: установка, обновление, служба, журнал, пароль админа, apt-прокси;

  • каждая подписанная команда содержит номер (nonce), предотвращающий повторное использование перехваченного запроса.

Итог: вектор атаки «скомпрометированный агент = root на сервере» устранён. Хаб физически не может выполнить на хосте ничего вне подписанного белого списка.

киллер-фича № 3: NKT сам находит порты, процессы, уязвимости и майнеры

В разделах Обзор и Карта ресурсов хоста это наглядно показано, при этом раздел Обзор хранит снапшот состояния и покажет вам что изменилось с момента последнего входа, это же правило работает с uptime под именем хоста. Раздел Уязвимости показывает CVE как на хосте так и в docker, lxd образах, а подраздел Вредоносное проанализирует наличие майнеров и признаков взлома и также можно воспользоваться ClamAV для сканирования, есть возможность обновления базы с хаба.

Всё это без настройки: NKT сразу после установки начинает сканировать хост и строить граф связей между сервисами.

Карта ресурсов: связи между nginx, контейнерами, сертификатами и правилами фаервола. Расхождения между конфигом и реальностью подсвечены
Карта ресурсов: связи между nginx, контейнерами, сертификатами и правилами фаервола. Расхождения между конфигом и реальностью подсвечены

киллер-фича № 4: ИИ как полноценный член команды

В некоторых разделах встречается иконка лампочки — это запрос к ИИ. Настройки, провайдеры и промпты живут в разделе хаба «О системе»; поддерживаются Anthropic, OpenAI-совместимые API и локальная LLM. Перед отправкой запроса реальные данные маскируются: секреты, токены и адреса вырезаются из промпта, поэтому наружу не уходит ничего чувствительного. А с локальной LLM анализ вообще не покидает ваш контур.

Мы заботимся о расходе токенов: каждый ответ сохраняется у находки. Жёлтая лампочка — запрос уже выполнялся, ответ сохранён и не тратит токены повторно. Синяя — подобный запрос уже делался в другом разделе, и готовый ответ подставляется оттуда. ИИ не просто объясняет проблему, он предлагает действие. В списке забаненных адресов fail2ban лампочка проверяет конкретный внешний IP и подсказывает, стоит ли держать его в бане.

Список забаненных IP: каждый адрес можно тут же прогнать через ИИ и решить, снимать бан или нет.
Список забаненных IP: каждый адрес можно тут же прогнать через ИИ и решить, снимать бан или нет.

киллер-фича № 5: Управление без интернета на хостах (Air-Gap)

Центральный хаб берёт на себя роль зеркала: кэшируются deb-пакеты, docker-образы и helm-чарты, а для развёртывания Kubernetes можно использовать собственные образы загруженные на хаб. Кластер можно поднять на хостах, у которых нет выхода в интернет вообще.

nkt-edge — лёгкий агент для минимального VPS: он принимает вебхуки и держит туннель до хаба, позволяя управлять сервером, спрятанным за NAT или чужим фаерволом.

киллер-фича № 6: All in one консоли (VNC, SPICE, Веб терминал)

Сторонние клиенты больше не нужны:

  • веб терминал с интеграцией tmux - сессия переживает закрытие браузера;

  • в веб терминале полностью переписаны режимы копирования, прокрутки и работы мышью;

  • графические консоли виртуальных машин (noVNC и spice-html5) прямо в браузере, трафик идёт через туннель хаба.

Защита от выстрела в ногу

Это не отдельная фича, а принцип, который мы старались применить во всех областях работы NKT:

  • резервный канал связи, если SSH до хоста недоступен;

  • адрес хаба закреплён в ignoreip fail2ban — сервера не забанят сами себя;

  • встроенный редактор конфигов работает как git: проверка перед применением, история версий, откат;

  • сухой прогон с чек-листом перед развёртыванием кластера;

  • опасные операции требуют подтверждения словом, а не одного клика.

это только верхушка айсберга — полный список возможностей в документации

Вместо заключения

И ещё одна деталь, нетипичная для опенсорса: документация написана на русском языке изначально, а английская версия — это перевод, а не исходник.

Мы долго спорили с коллегами, о чем должна быть первая статья на Хабре, кто-то говорил про дизайн интерфейсов, кто-то про историю создания проекта, кто-то про маркетинг. В итоге мы пришли к одному логическому заключению: все мы в написании статьи хотели одного — понравится публике и угодить рамкам. В моменте я осознал всю безумность этой задачи и сказал СТОП, ведь мы не писатели и за пару недель никак ими не станем. Мы просто разработчики программных продуктов и всё, что мы вложили в разработку NKT это опыт не только разработчика, но и опыт пользователя и это важный момент, который мы  всегда учитываем при разработке продуктов.

Три принципа, которым мы следуем:

  • Быть пользователем своего продукта.  Казалось бы, всё просто — но почему это правило многие настойчиво игнорируют?

  • Быть простым. Это очень сложно, особенно если это технические интерфейсы с большим количеством текста.

  • Быть актуальным. Мы искренне не понимаем, зачем не внедрять современные технологии там, где это уместно.

Мы не идеальны: есть и ошибки, и шероховатости. В планах — довести до паритета с вебом приложения для Android и iOS. Проект мы развиваем активно, потому что сами ежедневно используем NKT в работе, он прошёл путь от TUI с одним экраном, до того, как выглядит он сейчас. Это Infrastructure-as-Code с человеческим лицом и встроенным здравым смыслом.

Сегодня самый главный ресурс — это время, мы ценим в своей работе и стараемся максимально сократить путь от знакомства до использования. Ждём вас в нашем репозитории.

👉 GitHub: github.com/piqab/nkt
📚 Документация: piqab.github.io/nkt

Всегда рады комментариям