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