Skip to content

API ​

Всё, что видно в интерфейсе, доступно как JSON API с той же авторизацией и теми же правами. Пути — под /api, ошибки — {"error": "…"} на языке запроса (Accept-Language).

Вход ​

bash
curl -s -c jar -H 'Content-Type: application/json' \
  -d '{"username":"admin","password":"…"}' http://127.0.0.1:8077/api/auth/login
curl -s -b jar http://127.0.0.1:8077/api/overview
curl -s -b jar http://127.0.0.1:8077/api/findings

Сессия — cookie nkt_session; WebSocket аутентифицируется той же cookie. Чтение доступно любой роли, изменения — роли admin при NKT_ALLOW_MUTATIONS=true. Запросы, меняющие состояние, из браузера принимаются только со своего origin (см. Безопасность); из curl и скриптов — как есть.

У хаба для автоматизации — API-токены (Bearer или подписанный запрос), с ролью и пределами по хостам и группам: см. API и токены.

GET /api/health — без входа: жив ли процесс, версия.

Через хаб ​

Те же пути хоста доступны на хабе с префиксом:

  • /api/hosts/{id}/… — проксируется на хост {id} по SSH (или по резервному каналу);
  • /api/hosts/local/… — строка «localhost», сама машина хаба.

/api/auth/* префикса не получает никогда — вход всегда к самому хабу. Например, GET /api/hosts/3/services — службы третьего хоста.

Хост ​

ГруппаПутиЧто
Вход/auth/*Вход, выход, me, смена своего пароля
Сводка/overview, /inventory*, /findings, /topology, /snapshots, /changesПанель, снимок хоста, находки, карта, история сканов
Службы/services*Состояние, start/stop/restart/reload, проверка, установка
Контейнеры/containers*, /podman/*, /images*Docker, Podman, образы
Kubernetes/k8s/*Узлы, объекты, действия, YAML с диффом, Helm, пробросы портов, обновление
LXD/lxd/*Инстансы, снимки, конфигурация, сети, образы, пулы, логи, экран
libvirt/vms/*, /vm/*Машины, мастер создания, образы, сети, экран VNC/SPICE
Гости/guests/{kind}/{name}/*Логин и пароль гостей
Бэкапы/backups*Список, создание, восстановление, скачивание
Задания/jobs*Список (?q=&status=&kind=&limit=&offset=&order=asc, в ответе total и kinds), журнал, поток журнала, отмена, повтор (/jobs/{id}/retry)
Конфигурации/configs/*Файлы, блоки, запись с проверкой, версии, diff, откат
Профили/profiles*Желаемое состояние, план, применение
Файрвол/firewall/*Правила ufw и firewalld, установка
Сертификаты/certificates*Сертификаты, выпуск, продление, самоподписанные
Мониторинг/monitor/*Цели доступности, нагрузка, тепловые карты, сбои; /monitor/summary?since=&until= — почасовые сводки (хост, диски, контейнеры и машины, цели) для «Мониторинга» хаба
Безопасность/vulnerabilities*, /malware, /clamav/*Уязвимости, вредоносное, ClamAV
Система/system/*, /updates*, /disks*, /files*, /hardware, /network*, /interfacesПакеты, обновления, диски, файлы, железо, сеть
Учётные записи/users*, /os-users*, /auditПользователи nkt и ОС, журнал действий
Архивы образов/images/archives*, /uploads/beginАрхивы Docker, Podman и LXD: список, загрузка (PUT …/upload?name=&load=1), скачивание по ссылке (POST …/fetch), загрузка в движок, удаление
WebSocket/terminal/ws, /console/ws?kind=&name=&user=, /jobs/{id}/ws, /vms/{name}/vnc/ws, */spice/ws, */logs/wsТерминал, консоли контейнера, инстанса и машины, журнал задания, экран, логи

Долгие операции (установки, бэкапы, создание машин, обновления, загрузки) идут заданиями: ответ — {"job_id": N}, состояние — GET /api/jobs/{id} (status: queued, running, succeeded, failed), журнал — GET /api/jobs/{id}/log?after=<строка> и поток /api/jobs/{id}/ws. У многих действий, которые умеют и сразу, и заданием, задание включает ?job=1. Идущие сейчас задания — GET /api/jobs?status=queued,running, на хабе по всем хостам — GET /api/hub/jobs/active.

Пример — загрузка образа Docker на хост через хаб с docker load — в API и токены.

Страницы на всю вкладку ​

Без меню, для встраивания и отдельного окна; адрес хоста — параметр host (номер, -1 — машина хаба):

СтраницаЧто
/terminal/popout?host=терминал
/logs/popout?host=логи
/screen/popout?host=&kind=vm|lxd&name=&proto=vnc|spiceэкран машины — его открывает мобильное приложение

?lang=ru или ?lang=en у любой страницы задаёт язык интерфейса, не запоминая его.

Хаб ​

Под /api/hub/:

ГруппаПутиЧто
Хосты/hub/hosts, /hub/hosts/{id}, …/install, …/install/cancel, …/start, …/stop, …/pubkey, …/forget-hostkey, …/sudo/remove, …/group, …/apt-proxyРеестр хостов, установка, управление службой
Группы/hub/groups*Группы, переименование, профиль группы
Машины/hub/vm/provision, /hub/hosts/{id}/vm*Создание, поиск и импорт машин, проверка доступа
Сценарии/hub/scripts*Сценарии, проверка, запуск, версии, справка
Кластеры/hub/clusters*, /hub/cluster-images*, /hub/cluster-presets*, /hub/k8s-versionsСоздание, сухой прогон, worker, продолжение, обновление, kubeconfig, образы, наборы
Манифесты и Helm/hub/k8s/manifests*, /hub/k8s/helm/install, /hub/k8s/findingsОдин YAML или релиз в несколько кластеров, находки по кластерам
Выкладки/hub/pipelines*Конвейеры, доступы, секрет вебхука, выкладка, откат, история
API-токены/hub/tokens*, /hub/jobs/{id}*Токены (только из браузера), задание хаба и его журнал
ВебхукPOST /hub/hooks/{id}Без сессии, доступ по подписи
nkt-edge/hub/edge, /hub/edge/install, /hub/edge/uninstallСостояние, настройка, установка, удаление с VPS
Оповещения/hub/events*Журнал, прочитано, настройки
О системе/hub/version*, /hub/update, /hub/rollback, /hub/vulndb*, /hub/clamdb*, /hub/aptcache*Версия, обновление, откат, базы, кэш
ИИ/hub/ai*Настройки, проверка, разбор, ответы, инструкции
Экспорт/hub/export, /hub/importЭкспорт и импорт реестра

Пример — выкладка конвейера 1 с тегом:

bash
curl -s -b jar -H 'Content-Type: application/json' \
  -d '{"tag":"v1.2.3"}' http://127.0.0.1:8077/api/hub/pipelines/1/deploy

Командная строка ​

КомандаЧто делает
nkt serve (или просто nkt)веб-интерфейс и API
nkt scanразовый скан в JSON; код выхода 2 при критичных находках
nkt tuiтерминальный интерфейс
nkt users, nkt passwdучётные записи без веб-интерфейса
nkt hubхаб; nkt hub import — восстановление реестра, nkt hub delete — полное удаление данных хаба
nkt versionверсия