Руководство по ctk Rest Api#
Назначение#
Это Cluster Tool Kit (CTK) REST API — сервис для упрощенного мониторинга и перезагрузки Kubernetes-подов, через Rest API с ролевой моделью доступа и аудитом событий.
Авторизация и безопасность#
В системе предусмотрено два способа взаимодействия:
JWT Bearer (Рекомендуемый):#
Сначала получаем токен через /auth/login
Затем передаем его в заголовке: Authorization: Bearer <token>
Эндпоинты этого типа начинаются с нижнего подчеркивания (например, /_status)
Basic Auth (Для простых скриптов):#
Логин и пароль передаются прямо в JSON-теле запроса.
Эндпоинты без подчеркивания (например, /status).
Основные Эндпоинты#
1. Аутентификация#
POST /auth/login
Зачем: Обмен логина/пароля на временный JWT токен.
Лимит: 3 попытки в минуту по умолчанию.
Пример:
curl -X 'POST' \
'https://ctk-rest.api/auth/login' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"password": "admin",
"username": "admin"
}'
2. Работа с сервисами (через Bearer Token)#
GET /{service_name}/_status — Получить состояние пода.
POST /{service_name}/_restart — Удалить под (K8s создаст новый).
Body (опционально): {«reason»: «Причина перезагрузки»}
Пример:
$ curl -X 'POST' \
'https://ctk-rest.api/global-scheduler/_restart' \
-H 'accept: application/json' \
-H 'Authorization: Bearer aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' \
-H 'Content-Type: application/json' \
-d '{
"reason": "test"
}'
3. Работа с сервисами (через Basic Auth)#
POST /{service_name}/status
Body: {«username»: «…», «password»: «…»}
POST /{service_name}/restartBody: {«username»: «…», «password»: «…», «reason»: «…»}
Пример:
$ curl -X 'POST' \
'https://ctk-rest.api/ctk-restapi/restart' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"password": "admin",
"username": "admin",
"reason": "test"
}'
4. Служебные#
GET /health — Проверка доступности API (без авторизации).
GET /me — Инфо о текущем пользователе и его правах (нужен токен).
Форматы ответов#
Статус сервиса (StatusResponse) При успешном запросе вы получите объект с состоянием пода:
{
"service": "global-scheduler",
"status": "running",
"pod_name": "gs-cluster-1-global-scheduler-5f986",
"pod_status": "Running",
"replicas": 1,
"timestamp": "2026-02-20T..."
}
Перезагрузка (RestartResponse)
{
"status": "success",
"action": "pod-restart",
"service": "global-scheduler",
"deleted_pods": ["gs-cluster-1-global-scheduler-5f986"],
"reason": "manual update"
}
Валидация и ограничения#
Reason Validation: В системе стоит жесткий фильтр на поле reason. Нельзя использовать спецсимволы bash (типа ;, |, &), SQL-инъекции или попытки выхода из директории (../). Rate Limiting: По умолчанию лимит на запросы к сервисам — 10 в минуту по умолчанию.
Встроенная документация: Если запустить в development режиме, по адресу /docs будет доступен Swagger, а по /redoc — расширенная документация Rest API.
Настройка#
Настройка сервиса происходит через интерактивный ресбук.
Kubernetes сервисы#
Скрипт настройки предложит автоматически добавить существующие в этой группе ресурсов сервисы, также сервисы можно добавлять и удалять вручную, можно отредактировать: имя сервиса и селектор.
Kubernetes сервисы
==================
Существующие сервисы:
1. global-scheduler
2. global-server-excl
3. global-server-share
4. haproxy
5. grafana
6. rabbitmq
7. ctk-restapi
Действие: (a)dd, (e)dit, (d)elete, (q)uit:e
Имя сервиса для редактирования:haproxy
Редактирование сервиса 'haproxy'
K8s сервис:gs-cluster-1-haproxy
Селектор:app=gs-cluster-1-haproxy
После этого нужно будет создать пользователей, задать им права доступа к сервисам.
Ролевая модель#
service:all — полный доступ.
service:view — только просмотр статуса всех сервисов.
service:{name}:restart — право на перезагрузку только конкретного сервиса.
Пользователи
============
Форматы: service:all, service:view, service:restart, service:NAME:view, service:NAME:restart
Существующие пользователи:
1. admin
2. viewer
Действие: (a)dd, (e)dit, (d)elete, (q)uit:e
Имя пользователя для редактирования:admin
Редактирование пользователя 'admin'
Текущие разрешения: service:all
Новые разрешения (через запятую):service:view, service:restart, service:all