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

Меня зовут Александр, я один из разработчиков 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

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