Руководство по интеграциям
Mockarty – это не просто автономный мок-сервер, а платформа из нескольких компонентов, работающих вместе. В этом руководстве описано, как подключить внешние компоненты (ноды resolver, runner agent, генераторы кода) и интегрировать Mockarty в рабочий процесс разработки (CI/CD, MCP для AI-инструментов, вебхуки, мониторинг).
Новичок в Mockarty? Начните с Быстрого старта, чтобы запустить один экземпляр. Возвращайтесь сюда, когда потребуется масштабирование или автоматизация.
Совет: Примеры кода доступны для cURL, CLI и SDK-клиентов (Go, Python, Java). Смотрите Руководство по SDK для установки и настройки. Смотрите Руководство по CLI для командной утилиты.
URL-адреса в примерах: Во всех примерах используется
localhost:5770как адрес Mockarty по умолчанию. Если ваш экземпляр работает на удалённом сервере, заменитеlocalhost:5770на реальный адрес (например,https://mockarty.company.comилиhttp://192.168.1.50:5770). Подробнее — в разделе Полезные функции и советы.
Содержание
- Обзор
- Токены интеграции
- Ноды Mock Resolver
- Runner Agent
- Server Generator и API-First подход
- MCP-сервер (Model Context Protocol)
- Интеграция с CI/CD
- Webhook-уведомления
- Телеметрия и мониторинг
- Архитектурные диаграммы
- Управление интеграциями в Kubernetes
Обзор
Mockarty поддерживает распределённую архитектуру, которая позволяет масштабировать обработку
моков, выполнение тестов и генерацию кода на нескольких нодах. Это руководство описывает,
как подключить внешние компоненты к административной ноде Mockarty и внедрить API-first подход
в разработке.
Существует три типа внешних компонентов, подключаемых к Mockarty:
| Компонент | Назначение | Подключение |
|---|---|---|
| Mock Resolver | Обрабатывает трафик моков, разгружает административную ноду | gRPC coordinator (порт 5773) |
| Runner Agent | Удалённое выполнение API-тестов и нагрузочных тестов | gRPC coordinator (порт 5773) |
| Server Generator | Генерирует автономные серверы протоколов из API-спецификаций | HTTP API (административная нода) |
Вся межсерверная коммуникация защищена токенами интеграции — специальными учётными данными,
отдельными от пользовательских API-токенов.

Токены интеграции
Что такое токены интеграции?
Токены интеграции — это учётные данные для межсерверной аутентификации между нодами Mockarty.
Они отличаются от пользовательских API-токенов:
| Тип токена | Префикс | Назначение |
|---|---|---|
| Пользовательский API-токен | mk_* |
Автоматизация, CI/CD, вызовы REST API |
| Токен интеграции | mki_* |
Аутентификация нод (resolver, runner, orchestrator) |
Зачем два типа токенов?
Представьте пропуска в здании: бейджи сотрудников (mk_*) идентифицируют людей и пропускают их через главный вход (REST API, CI/CD). Ключи от серверной (mki_*) позволяют серверам общаться друг с другом за кулисами (gRPC-координатор). Разделение означает:
- Отзыв пользовательского токена не ломает инфраструктуру resolver/runner.
- Отзыв токена интеграции отключает конкретную ноду, не затрагивая пользователей.
- Аудит становится понятнее – сразу видно, пришло ли действие от человека или от машины.
- Права разграничены – токены интеграции дают только специфичные для ноды операции (регистрация, heartbeat, получение задач), а пользовательские токены дают доступ к API.
Токены интеграции хешируются перед сохранением – Mockarty никогда не хранит
токен в открытом виде. Токен отображается только один раз при создании. Скопируйте его
немедленно.
Создание токенов интеграции
Через интерфейс
- Перейдите в Settings > Integrations
- Нажмите Create Integration
- Выберите тип токена:
mock_resolver— для нод Mock Resolvertest_runner— для Runner Agentorchestrator— для оркестратора Server Generator
- Введите описательное имя (например,
resolver-eu-west-1,runner-ci-pipeline) - Нажмите Create
- Скопируйте токен из диалога подтверждения

Через API
cURL
curl -X POST http://localhost:5770/api/v1/integrations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer mk_your_admin_api_token" \
-d '{
"name": "resolver-prod-1",
"type": "mock_resolver"
}'
CLI
# Создание токена интеграции
mockarty-cli integration create --name resolver-prod-1 --type mock_resolver
Go
// Создание токена интеграции
integration, err := client.Integrations().Create(ctx, &mockarty.CreateIntegrationRequest{
Name: "resolver-prod-1",
Type: "mock_resolver",
})
// integration.Token -- токен (показывается только один раз)
Python
# Создание токена интеграции
integration = client.integrations.create(name="resolver-prod-1", type="mock_resolver")
# integration["token"] -- токен (показывается только один раз)
Java
// Создание токена интеграции
var integration = client.integrations().create("resolver-prod-1", "mock_resolver");
// integration.getToken() -- токен (показывается только один раз)
Ответ:
{
"integration": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "resolver-prod-1",
"type": "mock_resolver",
"enabled": true,
"createdAt": "2026-03-13T10:00:00Z"
},
"token": "mki_abc123def456..."
}
Важно: Поле
tokenвозвращается только в ответе на запрос создания. Сохраните его в
безопасном месте.
Типы токенов
mock_resolver — предоставляет ноде права на:
- Получение конфигураций моков от административной ноды
- Обработку входящих запросов моков
- Отправку статуса здоровья обратно координатору
test_runner — предоставляет ноде права на:
- Получение задач API-тестов и нагрузочных тестов
- Отправку результатов тестов обратно в административную ноду
- Доступ к определениям моков, необходимым для выполнения тестов
orchestrator — предоставляет ноде права на:
- Доступ к API оркестратора Server Generator
- Создание и управление сгенерированными серверами
- Синхронизацию определений моков для сгенерированных серверов
Отзыв токенов
Чтобы отозвать токен интеграции:
- Перейдите в Settings > Integrations
- Найдите интеграцию в списке
- Нажмите Disable для временной приостановки или Delete для окончательного отзыва
Через API:
# Отзыв (мягкий — нода перестаёт получать задачи на следующем heartbeat)
curl -X POST http://localhost:5770/api/v1/integrations/INTEGRATION_ID/revoke \
-H "Authorization: Bearer mk_your_admin_api_token"
# Удаление (окончательное)
curl -X DELETE http://localhost:5770/api/v1/integrations/INTEGRATION_ID \
-H "Authorization: Bearer mk_your_admin_api_token"
При отзыве токена соответствующая нода теряет связь и перестаёт получать обновления
на следующем цикле heartbeat (обычно в течение 30 секунд).
Ноды Mock Resolver
Назначение
Аналогия: Представьте Admin Node как менеджера ресторана, а Mock Resolver как официантов. Менеджер занимается бронированием, изменением меню и персоналом (административные задачи). Официанты обслуживают заказы клиентов (запросы к мокам). Добавление официантов позволяет обслуживать больше клиентов, не перегружая менеджера.
Ноды Mock Resolver обрабатывают трафик резолвинга моков – фактическую отдачу ответов моков
вашим приложениям и тестам. Перенося резолвинг на выделенные ноды, вы оставляете
административную ноду для UI, конфигурации и координации.
Архитектура
Ваше приложение/тесты ──HTTP──▶ Mock Resolver :5780
│
gRPC :5773
│
▼
Admin Node :5770
Resolver подключается к административной ноде через gRPC-координатор на порту 5773.
Он получает конфигурации моков и кеширует их локально для быстрого резолвинга. Обновления
передаются от административной ноды в реальном времени.
Когда использовать
- Высокий трафик моков: ноды resolver горизонтально масштабируются
- Разделение ответственности: административный UI и обслуживание моков на разных нодах
- Сетевая изоляция: размещение resolver ближе к тестовой инфраструктуре
- Высокая доступность: несколько resolver обеспечивают отказоустойчивость
Настройка
Шаг 1: Создание токена интеграции
Создайте токен типа mock_resolver (см. Токены интеграции).
Шаг 2: Скачивание бинарного файла
Скачайте бинарный файл mockarty-resolver для вашей платформы со страницы релизов Mockarty.
Шаг 3: Настройка переменных окружения
Базовое подключение:
| Переменная | Обязательна | По умолчанию | Описание |
|---|---|---|---|
COORDINATOR_ADDR |
Да | — | Адрес gRPC-координатора административной ноды (например, admin-host:5773) |
API_TOKEN |
Да | — | Токен интеграции (mki_*) типа mock_resolver |
DB_DSN |
Да | — | Строка подключения к PostgreSQL (например, postgres://user:pass@host:5432/mockarty?sslmode=disable) |
Идентификация и область видимости:
| Переменная | Обязательна | По умолчанию | Описание |
|---|---|---|---|
RESOLVER_NAME |
Нет | mockarty-resolver |
Человекочитаемое имя resolver |
SHARED |
Нет | true |
Если true, resolver обслуживает моки из ВСЕХ namespace; если false — только namespace, заданный в NAMESPACE |
NAMESPACE |
При SHARED=false |
— | Namespace, обслуживаемый этим resolver (обязателен при SHARED=false, иначе игнорируется) |
LABELS |
Нет | — | Метки через запятую, используемые координатором для таргетированной маршрутизации (например, region=eu,tier=premium) |
Сеть:
| Переменная | Обязательна | По умолчанию | Описание |
|---|---|---|---|
HTTP_PORT |
Нет | 5780 |
Порт для обслуживания HTTP-ответов моков |
GRPC_PORT |
Нет | 4780 |
Порт для обслуживания gRPC-моков |
BIND_ADDR |
Нет | 0.0.0.0 |
Сетевой интерфейс для прослушивания |
Кэш и поведение Store:
| Переменная | Обязательна | По умолчанию | Описание |
|---|---|---|---|
CACHE_MAX_SIZE_MB |
Нет | 512 |
Максимальный размер (МБ) in-memory кэша моков |
RESPONSE_CACHE_TTL |
Нет | 0 |
TTL для закэшированных ответов (0 отключает кэширование ответов) |
RESPONSE_CACHE_MAX_SIZE_MB |
Нет | 128 |
Максимальный размер (МБ) хранилища закэшированных тел ответов |
CACHE_SYNC_INTERVAL |
Нет | 60s |
Как часто resolver сверяет локальный кэш с координатором |
STORE_MODE |
Нет | read_only |
Режим работы со Store: read_only (по умолчанию, рекомендуется) или local_write (записи остаются локальными для этого resolver) |
WEBHOOK_POOL_SIZE |
Нет | 10 |
Размер пула воркеров для исходящих webhook |
ALLOW_PROXY_TO_PRIVATE_IPS |
Нет | false |
Если false, исходящие proxy-запросы к private/loopback/metadata IP блокируются (защита от SSRF) |
Таймауты координатора:
| Переменная | Обязательна | По умолчанию | Описание |
|---|---|---|---|
HEARTBEAT_INTERVAL |
Нет | 10s |
Интервал heartbeat, отправляемого координатору |
RECONNECT_DELAY |
Нет | 5s |
Начальная задержка перед переподключением после разрыва стрима |
MAX_RECONNECT_DELAY |
Нет | 60s |
Максимальная задержка между попытками переподключения |
Дашборд:
| Переменная | Обязательна | По умолчанию | Описание |
|---|---|---|---|
UI_ENABLED |
Нет | true |
Включить встроенный UI-дашборд |
UI_PORT |
Нет | 6780 |
Порт дашборда resolver |
DASHBOARD_URL |
Нет | автоопределение | Публичный URL дашборда этого resolver. Передаётся координатору, чтобы админы могли открыть его из админ-UI. При пустом значении определяется по исходящему IP |
TLS к координатору (опционально):
| Переменная | Обязательна | По умолчанию | Описание |
|---|---|---|---|
COORDINATOR_TLS |
Нет | false |
Включить TLS для gRPC-соединения с координатором |
COORDINATOR_TLS_CA_CERT |
Нет | — | Путь к CA-сертификату для проверки координатора |
COORDINATOR_TLS_CLIENT_CERT |
Нет | — | Клиентский сертификат для mTLS (должен задаваться вместе с ключом) |
COORDINATOR_TLS_CLIENT_KEY |
Нет | — | Клиентский приватный ключ для mTLS (должен задаваться вместе с сертификатом) |
COORDINATOR_TLS_INSECURE_SKIP_VERIFY |
Нет | false |
Отключает проверку сертификата координатора. Только для dev/оценки — НИКОГДА не включайте в продакшене |
Логирование:
| Переменная | Обязательна | По умолчанию | Описание |
|---|---|---|---|
LOG_LEVEL |
Нет | info |
Уровень логирования (debug, info, warn, error) |
Валидация при старте. Resolver откажется стартовать, если TLS-параметры несогласованы (например,
COORDINATOR_TLS_INSECURE_SKIP_VERIFY=trueбезCOORDINATOR_TLS=true, или клиентский mTLS-сертификат задан без парного ключа). Это сделано специально — молчаливое падение до plaintext или ослабленного TLS скрыло бы ошибки оператора.
Шаг 4: Запуск
export COORDINATOR_ADDR="admin.example.com:5773"
export API_TOKEN="mki_your_resolver_token"
export RESOLVER_NAME="resolver-1"
export HTTP_PORT="5780"
./mockarty-resolver
Resolver подключится к координатору, загрузит текущие конфигурации моков и начнёт
обслуживать ответы моков.

Маршрутизация трафика
После запуска resolver направьте трафик моков на него вместо административной ноды:
| Тип трафика | Назначение |
|---|---|
| Запросы моков (HTTP, gRPC и др.) | Нода Resolver (порт 5780) |
| Административный UI, API, конфигурация | Административная нода (порт 5770) |
Пример — направление тестов на resolver:
# Раньше (напрямую к административной ноде)
curl http://admin:5770/api/users/123
# Теперь (к resolver)
curl http://resolver-1:5780/api/users/123
Несколько Resolver
Вы можете запустить несколько нод resolver и распределять нагрузку между ними:
# Resolver 1
COORDINATOR_ADDR="admin:5773" API_TOKEN="mki_token1" RESOLVER_NAME="resolver-1" HTTP_PORT=5780 ./mockarty-resolver
# Resolver 2
COORDINATOR_ADDR="admin:5773" API_TOKEN="mki_token2" RESOLVER_NAME="resolver-2" HTTP_PORT=5781 ./mockarty-resolver
Разместите HTTP-балансировщик нагрузки (nginx, HAProxy, облачный LB) перед ними для
равномерного распределения.
Health Check
Каждый resolver предоставляет endpoint проверки здоровья:
curl http://resolver-1:5780/health
Используйте его для health check балансировщика нагрузки и мониторинга.
Dashboard
Каждая нода resolver запускает лёгкий dashboard, показывающий статус подключения,
количество обработанных моков и метрики производительности:
http://resolver-1:6780/

Пример Docker
docker run -d \
--name mockarty-resolver \
-e COORDINATOR_ADDR="admin-host:5773" \
-e API_TOKEN="mki_your_resolver_token" \
-e RESOLVER_NAME="resolver-docker" \
-e HTTP_PORT="5780" \
-p 5780:5780 \
-p 6780:6780 \
mockarty/resolver:latest
Runner Agent
Назначение
Runner Agent выполняет коллекции API-тестов и нагрузочные тесты удалённо. Перенося
выполнение тестов на выделенные ноды runner, тяжёлые нагрузочные тесты не влияют
на производительность административной ноды.
Архитектура
Admin Node :5770
│
gRPC :5773 (координатор отправляет задачи)
│
▼
Runner Agent :6770 (выполняет тесты, отправляет результаты)
Runner подключается к административной ноде через gRPC-координатор. Когда пользователь
запускает тест или нагрузочный тест, координатор отправляет задачу доступному runner.
Результаты передаются обратно в административную ноду в потоковом режиме.
Когда использовать
- Нагрузочное тестирование: нагрузочные тесты генерируют значительный трафик — выполняйте их на выделенных нодах
- Распределённое тестирование: запускайте тесты из разных сетевых локаций или регионов
- Параллельное выполнение: несколько runner могут выполнять задачи одновременно
- Изоляция ресурсов: отделение выполнения тестов от административных операций
Настройка
Шаг 1: Создание токена интеграции
Создайте токен типа test_runner (см. Токены интеграции).
Шаг 2: Скачивание бинарного файла
Скачайте бинарный файл mockarty-runner для вашей платформы со страницы релизов Mockarty.
Шаг 3: Настройка переменных окружения
Runner поддерживает три режима подключения — выберите один и задайте соответствующую переменную адреса:
| Режим | RUNNER_MODE |
Переменная адреса | Когда использовать |
|---|---|---|---|
| gRPC push (по умолчанию) | grpc |
COORDINATOR_ADDR=host:5773 |
Runner открывает исходящий gRPC-стрим к координатору. Наиболее эффективный режим с минимальной задержкой. Используйте, когда runner может напрямую достучаться до админ-ноды |
| HTTP long-poll | poll |
COORDINATOR_URL=http://host:5770 |
Runner опрашивает админ-ноду по HTTPS. Используйте, когда gRPC заблокирован прокси/файрволлом или доступен только порт 5770 |
| Reverse HTTP | grpc + открытый RUNNER_PORT |
COORDINATOR_ADDR=host:5773 |
Runner слушает на RUNNER_PORT, и админ-нода сама инициирует соединение. Используйте, когда runner находится за файрволлом |
Базовое подключение:
| Переменная | Обязательна | По умолчанию | Описание |
|---|---|---|---|
RUNNER_MODE |
Нет | grpc |
Режим подключения: grpc (push) или poll (HTTP long-polling) |
COORDINATOR_ADDR |
Обязательна для режима grpc |
— | Адрес gRPC-координатора административной ноды (например, admin-host:5773) |
COORDINATOR_URL |
Обязательна для режима poll |
— | HTTP(S) URL административной ноды (например, https://admin.example.com:5770) |
API_TOKEN |
Да | — | Токен интеграции (mki_*) типа test_runner |
RUNNER_PORT |
Нет | 6780 |
Порт, на котором runner слушает в режиме reverse HTTP |
Идентификация и область видимости:
| Переменная | Обязательна | По умолчанию | Описание |
|---|---|---|---|
RUNNER_NAME |
Нет | mockarty-runner |
Человекочитаемое имя runner |
SHARED |
Нет | true |
Если true, runner получает задачи из ВСЕХ namespace |
NAMESPACE |
При SHARED=false |
— | Namespace, обслуживаемый этим runner (обязателен при SHARED=false, игнорируется при SHARED=true) |
LABELS |
Нет | — | Метки через запятую, используемые координатором для таргетированной маршрутизации (например, region=eu,zone=dmz) |
Возможности и ёмкость:
| Переменная | Обязательна | По умолчанию | Описание |
|---|---|---|---|
CAPABILITIES |
Нет | api_test,performance |
Возможности через запятую: api_test, performance |
MAX_CONCURRENT_TASKS |
Нет | 3 |
Максимальное количество одновременных задач |
PERF_ENABLED |
Нет | true |
Включить движок performance-тестов (установите false, чтобы отключить нагрузочное тестирование на этом runner) |
Таймауты:
| Переменная | Обязательна | По умолчанию | Описание |
|---|---|---|---|
HEARTBEAT_INTERVAL |
Нет | 10s |
Интервал heartbeat, отправляемого координатору |
RECONNECT_DELAY |
Нет | 5s |
Начальная задержка перед переподключением после разрыва стрима |
MAX_RECONNECT_DELAY |
Нет | 60s |
Максимальная задержка между попытками переподключения |
DRAIN_TIMEOUT |
Нет | 30s |
Максимальное время ожидания завершения текущих задач при graceful shutdown |
Безопасность:
| Переменная | Обязательна | По умолчанию | Описание |
|---|---|---|---|
ALLOW_PROXY_TO_PRIVATE_IPS |
Нет | false |
Если false, HTTP-запросы от runner к private/loopback/metadata IP блокируются (защита от SSRF) |
Дашборд:
| Переменная | Обязательна | По умолчанию | Описание |
|---|---|---|---|
UI_ENABLED |
Нет | true |
Включить встроенный UI-дашборд |
UI_PORT |
Нет | 6770 |
Порт дашборда runner |
DASHBOARD_URL |
Нет | автоопределение | Публичный URL дашборда этого runner. Передаётся координатору, чтобы админы могли открыть его из админ-UI |
TLS к координатору (опционально):
| Переменная | Обязательна | По умолчанию | Описание |
|---|---|---|---|
COORDINATOR_TLS |
Нет | false |
Включить TLS для соединения с координатором |
COORDINATOR_TLS_CA_CERT |
Нет | — | Путь к CA-сертификату для проверки координатора |
COORDINATOR_TLS_CLIENT_CERT |
Нет | — | Клиентский сертификат для mTLS (должен задаваться вместе с ключом) |
COORDINATOR_TLS_CLIENT_KEY |
Нет | — | Клиентский приватный ключ для mTLS (должен задаваться вместе с сертификатом) |
COORDINATOR_TLS_INSECURE_SKIP_VERIFY |
Нет | false |
Отключает проверку сертификата координатора. Только для dev/оценки — НИКОГДА не включайте в продакшене |
Логирование:
| Переменная | Обязательна | По умолчанию | Описание |
|---|---|---|---|
LOG_LEVEL |
Нет | info |
Уровень логирования (debug, info, warn, error) |
Валидация при старте. На runner применяются те же TLS-инварианты: несогласованные TLS-параметры приводят к отказу старта, а не к молчаливой деградации.
Шаг 4: Запуск
export COORDINATOR_ADDR="admin.example.com:5773"
export API_TOKEN="mki_your_runner_token"
export RUNNER_NAME="runner-1"
export SHARED="true"
export CAPABILITIES="api_test,performance"
export MAX_CONCURRENT_TASKS="10"
./mockarty-runner

Scope: Shared и Namespace Runner
Shared runner (SHARED=true):
- Получают задачи из всех namespace
- Идеально подходят для общей тестовой инфраструктуры
- Обычно развёртываются командой платформы/DevOps
Namespace runner (SHARED=false, NAMESPACE=team-backend):
- Получают задачи только из назначенного namespace
- Идеально подходят для командной инфраструктуры
- Могут быть размещены ближе к ресурсам команды
Пример конфигурации:
# Shared runner — обрабатывает все namespace
SHARED=true CAPABILITIES="api_test,performance" ./mockarty-runner
# Командный runner — только namespace "payments"
SHARED=false NAMESPACE="payments" CAPABILITIES="api_test" ./mockarty-runner
Capabilities
Capabilities определяют, какие типы задач runner может принимать:
| Capability | Типы задач |
|---|---|
api_test |
Запуск коллекций API-тестов, запланированное выполнение тестов |
performance |
Нагрузочные тесты, стресс-тесты, бенчмарки производительности |
Runner может иметь несколько capabilities:
CAPABILITIES="api_test,performance"
Если runner имеет только api_test, он никогда не получит задачи нагрузочного тестирования,
и наоборот.
Метки раннеров (Runner Labels)
Метки — это произвольные теги, которые вы привязываете к интеграции раннера, чтобы
Test Plan, Schedule, Load Test, Fuzz или Chaos конфигурация могли выбирать конкретное
подмножество раннеров — например prod, staging, linux, arm64, gpu.
Метки опциональны. Если запуск не требует меток, выбор раннера работает как раньше
(ёмкость, capability, приоритет namespace, минимальная загрузка). Если запуск указал
одну или несколько обязательных меток, рассматриваются только раннеры, набор меток
которых является надмножеством требуемого набора.
Назначить метки на интеграцию
В UI откройте Settings → Integrations, разверните карточку раннера и нажмите кнопку
Edit labels — откроется чип-редактор. Редактор автоматически подсказывает уже
использующиеся метки в видимых для пользователя пространствах.
Через API:
curl -X PATCH https://mockarty.example/api/v1/integrations/<id>/labels \
-H "Authorization: Bearer mk_<your_token>" \
-H "Content-Type: application/json" \
-d '{"labels": ["prod", "linux", "arm64"]}'
Метки нормализуются к нижнему регистру и могут содержать только a-z, 0-9, .,
-, _, не более 64 символов на метку.
Получить список меток в namespace
Эндпоинт ниже используется автокомплитом, но подходит и для скриптов:
curl https://mockarty.example/api/v1/runners/labels?namespace=team-backend \
-H "Authorization: Bearer mk_<your_token>"
Возвращает дедуплицированный отсортированный набор меток, видимых в указанном
пространстве (собственные + admin-scoped/общие раннеры).
Требовать метки при запуске
Добавьте поле requiredRunnerLabels в тело запроса. Примеры:
Performance:
curl -X POST https://mockarty.example/api/v1/perf/run \
-H "Authorization: Bearer mk_<your_token>" \
-H "Content-Type: application/json" \
-d '{
"configId": "<perf-config-id>",
"requiredRunnerLabels": ["prod", "arm64"]
}'
Fuzz:
curl -X POST https://mockarty.example/api/v1/fuzzing/run \
-H "Authorization: Bearer mk_<your_token>" \
-H "Content-Type: application/json" \
-d '{
"configId": "<fuzz-config-id>",
"requiredRunnerLabels": ["staging"]
}'
Test Plan (метки сохраняются на плане и применяются ко всем элементам):
curl -X POST https://mockarty.example/api/v1/test-plans \
-H "Authorization: Bearer mk_<your_token>" \
-H "Content-Type: application/json" \
-d '{
"namespace": "team-backend",
"name": "Nightly regression",
"items": [...],
"requiredRunnerLabels": ["prod"]
}'
Поведение, если нет подходящего раннера
Если requiredRunnerLabels непустое и ни один доступный раннер не удовлетворяет
требованию, задача завершается с понятным сообщением (а не падает в локальное
выполнение):
no available runner with required labels [prod arm64]
(capacity, capability, or labels do not match)
Льготный период (5 минут с момента создания задачи) даёт возможность подходящему
раннеру подключиться до того, как задача будет помечена как failed.
Несколько Runner
Вы можете запустить несколько runner agent. Координатор автоматически распределяет задачи
на основе доступности и capabilities:
# Runner 1 — только API-тесты
RUNNER_NAME="runner-api-1" CAPABILITIES="api_test" UI_PORT=6770 ./mockarty-runner
# Runner 2 — только нагрузочные тесты
RUNNER_NAME="runner-perf-1" CAPABILITIES="performance" UI_PORT=6771 ./mockarty-runner
# Runner 3 — оба типа
RUNNER_NAME="runner-all-1" CAPABILITIES="api_test,performance" UI_PORT=6772 ./mockarty-runner
Примечание: При запуске нескольких runner на одном хосте назначьте разные значения
UI_PORT, чтобы избежать конфликтов портов.
Dashboard
Каждый runner предоставляет dashboard, показывающий статус задач, историю выполнения
и использование ресурсов:
http://runner-1:6770/

Пример Docker
docker run -d \
--name mockarty-runner \
-e COORDINATOR_ADDR="admin-host:5773" \
-e API_TOKEN="mki_your_runner_token" \
-e RUNNER_NAME="runner-docker" \
-e SHARED="true" \
-e CAPABILITIES="api_test,performance" \
-e MAX_CONCURRENT_TASKS="10" \
-p 6770:6770 \
mockarty/runner:latest
Server Generator и API-First подход
Что такое Server Generator?
mockarty-server-generator — это автономный бинарный файл, который генерирует полностью
функциональные серверы протоколов из API-спецификаций. Сгенерированные серверы отдают
ответы моков из вашего экземпляра Mockarty, обеспечивая рабочий процесс разработки
API-first.
Рабочий процесс API-First
Подход API-first позволяет определить контракт API до написания кода реализации:
- Определите спецификацию API (OpenAPI, .proto, GraphQL schema и др.)
- Сгенерируйте автономный сервер из спецификации с помощью
mockarty-server-generator - Ответы моков автоматически создаются в Mockarty на основе спецификации
- Разрабатывайте клиентское приложение, работая с сгенерированным сервером
- Замените сгенерированный сервер реальной реализацией, когда она будет готова
Этот подход позволяет frontend- и backend-командам работать параллельно — frontend-команда
разрабатывает приложение, работая с сгенерированным сервером моков, пока backend-команда
реализует настоящий сервис.
Требования к лицензии
Генерация серверов требует функцию mock в лицензии Mockarty.
Проверьте статус лицензии в Settings > License.
Поддерживаемые протоколы
| Протокол | Формат ввода | Тип сервера |
|---|---|---|
| OpenAPI / Swagger | .yaml, .json |
HTTP REST сервер |
| gRPC | .proto |
gRPC сервер |
| MCP | .json конфигурация |
MCP сервер (SSE transport) |
| GraphQL | .graphql schema |
GraphQL сервер |
| SOAP | .wsdl |
SOAP сервер |
| Kafka | .json конфигурация |
Kafka consumer/producer |
| RabbitMQ | .json конфигурация |
RabbitMQ consumer/publisher |
| SSE | .json конфигурация |
Server-Sent Events сервер |
| WebSocket | .json конфигурация |
WebSocket сервер |
Три режима работы
1. Режим CLI
Генерация серверного кода из спецификаций в командной строке:
# Генерация OpenAPI-сервера
./mockarty-server-generator openapi \
-input ./api/openapi.yaml \
-output ./generated-server \
-create-mocks \
-mockarty-url http://localhost:5770 \
-api-token mk_your_token
# Генерация gRPC-сервера
./mockarty-server-generator grpc \
-input ./proto/service.proto \
-output ./generated-grpc-server \
-create-mocks \
-mockarty-url http://localhost:5770 \
-api-token mk_your_token
Примечание: Название протокола (например,
openapi,grpc,mcp,graphql,soap,kafka,rabbitmq,sse,socket) — это позиционная подкоманда, а не флаг.
Флаг -create-mocks автоматически создаёт определения моков в Mockarty на основе спецификации.
2. Режим Orchestrator
Запуск Server Generator как REST API сервиса для программного управления сгенерированными серверами:
./mockarty-server-generator orchestrator \
-port 8888 \
-api-token mk_your_token \
-mockarty-url http://localhost:5770
Orchestrator предоставляет endpoint для создания, просмотра и управления сгенерированными
серверами. Для аутентификации требуется API-токен.
3. Экспериментальный UI
Веб-интерфейс для интерактивной генерации серверов:
./mockarty-server-generator experimental-ui \
-port 8888 \
-api-token mk_your_token \
-mockarty-url http://localhost:5770
Доступ к UI по адресу http://localhost:8888/ui.
Результат генерации
Генератор создаёт автономный Go-проект с vendored зависимостями:
generated-server/
main.go
go.mod
go.sum
vendor/
...
Сборка и запуск сгенерированного сервера:
cd generated-server
go build -mod=vendor -o server .
./server
Сгенерированный сервер полностью самодостаточен — загрузка внешних зависимостей при сборке
не требуется.
Переменные окружения сгенерированного сервера
| Переменная | По умолчанию | Описание |
|---|---|---|
HTTP_ADMIN_BASE_URL |
— | URL административной ноды Mockarty (например, http://admin:5770) |
NAMESPACE |
sandbox |
Namespace для резолвинга моков |
HTTP_PORT |
8080 |
Порт сгенерированного сервера |
API_TOKEN |
— | API-токен для аутентификации в Mockarty |
Smart Merge
При повторном запуске генератора с -create-mocks для существующего набора моков
генератор выполняет умное слияние:
- Новые endpoint добавляются как новые моки
- Существующие моки обновляются (маршруты, методы) без потери вручную добавленных условий,
ссылок на store или пользовательских модификаций ответов - Удалённые endpoint не удаляются автоматически (требуется ручная очистка)
Это позволяет итеративно дорабатывать спецификацию API без потери ручных настроек моков.
Пример Docker (Orchestrator)
docker run -d \
--name mockarty-server-generator \
-e API_TOKEN="mk_your_token" \
-e MOCKARTY_URL="http://admin-host:5770" \
-p 8888:8888 \
mockarty/server-generator:latest \
orchestrator -port 8888
Подробное описание всех типов серверов, форматов ввода и параметров конфигурации
см. в Руководстве по Server Generator.
MCP-сервер (Model Context Protocol)
Что такое MCP-сервер?
Mockarty предоставляет встроенный MCP-сервер (Model Context Protocol), который позволяет AI-агентам, таким как Claude Desktop, Cursor, Windsurf и другим MCP-совместимым инструментам, взаимодействовать с вашим экземпляром Mockarty напрямую. AI-агент может создавать моки, запрашивать хранилища, запускать тесты и управлять ресурсами на естественном языке.
Endpoint MCP
MCP-сервер доступен по адресу:
http://localhost:5772/mcp
Порт настраивается через переменную окружения MCP_PORT (по умолчанию: 5772).
Аутентификация
Endpoint MCP требует API-токен для аутентификации. Используйте пользовательский API-токен (формат mk_*), созданный в Settings > API Tokens.
Аутентификация передаётся через HTTP-заголовки:
X-API-Key: mk_your_token_here
или:
Authorization: Bearer mk_your_token_here
Пространство имён по умолчанию
У пользователя может быть доступ к нескольким пространствам имён. По
умолчанию каждый MCP-вызов должен передавать аргумент namespace, что
неудобно. Чтобы задать default per-client, используйте опциональный
заголовок:
X-Mockarty-Namespace: your-namespace
Порядок выбора пространства имён (от наибольшего приоритета):
- Аргумент
namespaceв вызове инструмента (когда LLM передаёт его
явно). - Заголовок
X-Mockarty-Namespace(этот раздел — задаётся один раз в
конфиге клиента, применяется ко всем вызовам). - Привязанное к API-токену пространство имён, если токен выпущен
namespace-scoped (CI/CDрежим). - Первое не-sandbox членство пользователя как финальный fallback.
Пространство имён из заголовка проходит ту же проверку членства, что и
namespace из аргументов — запрос к namespace, к которому у пользователя
нет доступа, отклоняется с permission denied: user does not have access to namespace …. Только привязанный к токену namespace (пункт 3) даёт
жёсткий override, чтобы CI/CD-токены не могли вырваться из своей зоны.
Подключение Claude Desktop
Добавьте следующее в файл конфигурации Claude Desktop (claude_desktop_config.json):
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Linux: ~/.config/claude/claude_desktop_config.json
{
"mcpServers": {
"mockarty": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://localhost:5772/mcp",
"--header",
"X-API-Key: mk_your_token_here"
]
}
}
}
Замените mk_your_token_here на ваш реальный API-токен и измените URL, если ваш экземпляр Mockarty находится на другом хосте или порту.
Подключение Cursor
Cursor имеет встроенную поддержку MCP. Добавьте Mockarty как MCP-сервер в настройках Cursor:
- Откройте Cursor Settings → Features → MCP Servers
- Нажмите + Add new MCP server
- Выберите Type:
sse(для Streamable HTTP) - Заполните:
- Name:
mockarty - Server URL:
http://localhost:5772/mcp
- Name:
- Нажмите Save
Поскольку Cursor автоматически передаёт заголовки, вы также можете настроить его через файл .cursor/mcp.json на уровне проекта:
{
"mcpServers": {
"mockarty": {
"url": "http://localhost:5772/mcp",
"headers": {
"X-API-Key": "mk_your_token_here"
}
}
}
}
Совет: Разместите
.cursor/mcp.jsonв корне проекта для конфигурации на уровне проекта или используйте~/.cursor/mcp.jsonдля глобальной конфигурации.
Подключение Claude Code (CLI)
Claude Code нативно поддерживает MCP-серверы. Добавьте Mockarty в конфигурацию проекта или глобальную конфигурацию:
На уровне проекта (.claude/settings.json в корне проекта):
{
"mcpServers": {
"mockarty": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://localhost:5772/mcp",
"--header",
"X-API-Key: mk_your_token_here"
]
}
}
}
Глобальная (~/.claude/settings.json):
{
"mcpServers": {
"mockarty": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://localhost:5772/mcp",
"--header",
"X-API-Key: mk_your_token_here"
]
}
}
}
После добавления перезапустите Claude Code и проверьте командой /mcp, чтобы увидеть подключённые серверы.
Подключение Windsurf
В Windsurf перейдите в Settings → Cascade → MCP Servers и добавьте:
{
"mcpServers": {
"mockarty": {
"serverUrl": "http://localhost:5772/mcp",
"headers": {
"X-API-Key": "mk_your_token_here"
}
}
}
}
Подключение других MCP-клиентов
Любой MCP-совместимый клиент может подключиться, используя:
| Параметр | Значение |
|---|---|
| Транспорт | Streamable HTTP (рекомендуется) или SSE |
| URL | http://your-mockarty-host:5772/mcp |
| Заголовок аутентификации | X-API-Key: mk_your_token_here |
| Альтернативная аутентификация | Authorization: Bearer mk_your_token_here |
Доступные инструменты MCP
После подключения AI-агент получает доступ к инструментам для:
- Управление моками — Просмотр, создание, обновление и удаление моков по пространствам имён
- Операции с хранилищами — Чтение и запись значений Global Store, Chain Store
- Управление шаблонами — Просмотр, загрузка и применение шаблонов моков
- API-тестирование — Просмотр коллекций, запуск наборов тестов, просмотр результатов
- Фаззинг безопасности — Запуск/остановка сессий фаззинга, просмотр находок, сортировка уязвимостей
- Нагрузочное тестирование — Запуск нагрузочных тестов, генерация скриптов k6, сравнение результатов
- Запись трафика — Запуск/остановка сессий записи, просмотр перехваченных запросов
- Генерация кода — Генерация моков из спецификаций OpenAPI/Swagger
- HTTP-запросы — Выполнение произвольных HTTP-вызовов для тестирования endpoint или получения спецификаций
- Утилиты — Конвертация XML в JSON, кодирование Base64, валидация шаблонов
Создание API-токена для MCP

- Перейдите в Settings > API Tokens в интерфейсе Mockarty.
- Нажмите Create Token.
- Введите имя (например,
claude-desktop-mcp). - Скопируйте сгенерированный токен (начинается с
mk_). - Используйте этот токен в конфигурации MCP-клиента.
Безопасность: API-токены наследуют права пользователя, который их создал. Для доступа через MCP убедитесь, что владелец токена имеет соответствующие роли в пространствах имён.
Частые ошибки
- Использование токена интеграции (
mki_*) для MCP. MCP требует пользовательский API-токен (mk_*). Токены интеграции предназначены только для нод resolver/runner. - Забыли перезапустить MCP-клиент после изменения файла конфигурации. Claude Desktop, Cursor и Windsurf требуют перезапуска для применения изменений.
- Неверный URL. Если
MCP_PORTне задан, MCP-сервер работает на порту 5772 по умолчанию. MCP всегда работает на отдельном выделенном порту, отдельно от основного HTTP-сервера. - Файрвол блокирует порт. Убедитесь, что порт 5772 (или ваш настроенный порт MCP) доступен с машины, на которой запущен AI-инструмент.
Интеграция с CI/CD
Пользовательские API-токены для автоматизации
Для CI/CD пайплайнов используйте пользовательские API-токены (mk_*),
а не токены интеграции. Создайте API-токен в Settings > API Tokens или через
административный API.
Создание моков в CI
Автоматизируйте создание моков как часть CI-пайплайна:
# Создание мока для endpoint пользователей
curl -X POST http://mockarty:5770/api/v1/mocks \
-H "Content-Type: application/json" \
-H "Authorization: Bearer mk_your_ci_token" \
-d '{
"id": "ci-users-get",
"http": {
"route": "/api/users/list",
"httpMethod": "GET"
},
"response": {
"statusCode": 200,
"payload": {
"id": "$.fake.UUID",
"name": "$.fake.FirstName",
"email": "$.fake.Email"
}
}
}'
Запуск коллекций тестов
Выполнение тестов запускается через систему Runner Agent (см. Runner Agent) или веб-интерфейс (страница API Tester). Прямого REST-эндпоинта для запуска коллекций тестов не существует — координатор автоматически отправляет задачи подключённым runner agent при инициации запуска тестов из UI.
Нагрузочные тесты через API
Запуск нагрузочных тестов:
curl -X POST http://mockarty:5770/api/v1/perf/run \
-H "Content-Type: application/json" \
-H "Authorization: Bearer mk_your_ci_token" \
-d '{
"script": {
"collectionId": "your-collection-uuid",
"environmentId": "your-env-uuid"
},
"options": {
"duration": "60s",
"concurrency": 10
}
}'
Импорт OpenAPI-спецификаций
Автоматическая генерация моков из OpenAPI-спецификаций в CI-пайплайне:
curl -X POST http://mockarty:5770/api/v1/api-tester/import/openapi \
-H "Authorization: Bearer mk_your_ci_token" \
-F "file=@./api/openapi.yaml" \
-F "namespace=ci-tests"
Пример GitHub Actions
name: Интеграционные тесты с Mockarty
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
services:
mockarty:
image: mockarty/mockarty:latest
ports:
- 5770:5770
env:
DB_DSN: "postgres://..."
steps:
- uses: actions/checkout@v4
- name: Ожидание Mockarty
run: |
for i in $(seq 1 30); do
curl -s http://localhost:5770/health && break
sleep 2
done
- name: Импорт OpenAPI-спецификации
run: |
curl -X POST http://localhost:5770/api/v1/api-tester/import/openapi \
-H "Authorization: Bearer ${{ secrets.MOCKARTY_TOKEN }}" \
-F "file=@./api/openapi.yaml"
- name: Запуск тестов
run: npm test
env:
API_BASE_URL: http://localhost:5770
Webhook-уведомления
Настройка
Подписки на событийные webhook хранятся в таблице webhook_subscriptions базы данных. Каждая подписка связывает пользователя с URL и набором типов событий. Webhook уровня namespace (срабатывающие при создании/обновлении/удалении моков) настраиваются отдельно в Settings > Webhooks в административном интерфейсе.

Каждая подписка на событийный webhook требует:
- URL: Endpoint для получения уведомлений
- Event Types: Какие события вызывают webhook (например,
test.run.completed,fuzzing.finding.new) - Secret (опционально): Используется для подписи payload с помощью HMAC-SHA256 для верификации
Типы событий
| Событие | Описание |
|---|---|
agent.task.created |
Создана задача агента |
agent.task.completed |
Задача агента успешно завершена |
agent.task.failed |
Задача агента завершилась с ошибкой |
agent.task.progress |
Задача агента сообщила о прогрессе |
test.run.completed |
Завершён запуск коллекции API-тестов |
perf.test.completed |
Завершён нагрузочный тест |
fuzzing.completed |
Завершена сессия фаззинга безопасности |
fuzzing.finding.new |
Обнаружена новая находка фаззинга |
system.alert |
Сработало системное оповещение |
Формат Payload
Payload webhook в формате JSON:
{
"id": "event-uuid",
"type": "test.run.completed",
"userId": "user-uuid",
"namespace": "production",
"payload": { ... },
"createdAt": "2026-03-13T10:30:00Z"
}
Поле payload содержит данные, специфичные для события (результаты тестов, аномалии фаззинга и т.д.).
Если настроен secret для webhook, payload подписывается с помощью HMAC-SHA256, и подпись
включается в заголовок X-Mockarty-Signature. Также отправляется заголовок X-Mockarty-Timestamp.
Поведение доставки
Доставка webhook выполняется в режиме fire-and-forget с таймаутом 10 секунд на запрос. Одновременно может доставляться до 10 webhook. При достижении лимита параллельности дополнительные доставки пропускаются для текущего цикла событий.
Примечание: Автоматического повтора для неудачных доставок webhook в настоящее время нет. Если целевой URL недоступен или возвращает ошибку, доставка логируется, но не повторяется. Убедитесь, что ваш приёмник webhook высокодоступен.
Сценарии использования
- Уведомления в Slack: Отправка сообщения в канал Slack при провале тестов (
test.run.completed) - Ворота CI/CD: Блокировка деплоев при обнаружении уязвимостей фаззингом (
fuzzing.finding.new) - Мониторинг агентов: Отслеживание прогресса и ошибок задач агентов (
agent.task.*) - Журнал аудита: Пересылка всех событий в сервис логирования для compliance
- Обновление dashboard: Запуск обновления dashboard при системных оповещениях (
system.alert)
Телеметрия и мониторинг
Интеграция с OpenTelemetry
Mockarty поддерживает OpenTelemetry для распределённой трассировки. Телеметрия настраивается через страницу Панель администратора > Телеметрия в веб-интерфейсе, а не через переменные окружения. Администратор может включать/выключать трассировку, настраивать endpoint экспортёра и частоту сэмплирования из UI.
Метрики Prometheus
Все компоненты Mockarty предоставляют метрики Prometheus по адресу /metrics:
# Административная нода
curl http://admin:5770/metrics
# Нода resolver
curl http://resolver:5780/metrics
Ключевые метрики:
mockarty_http_requests_total— Количество HTTP-запросов по методу, endpoint, коду статусаmockarty_http_request_duration_seconds— Гистограмма длительности HTTP-запросовmockarty_mock_requests_total— Количество запросов моков по ID мока, namespace, протоколуmockarty_mocks_total— Общее количество моков по namespace, протоколу, состоянию жизненного циклаmockarty_db_query_duration_seconds— Длительность запросов к базе данных по операции и таблицеmockarty_cache_hits_total/mockarty_cache_misses_total— Счётчики попаданий/промахов кешаmockarty_errors_total— Количество ошибок по типу и компонентуmockarty_users_total— Общее количество зарегистрированных пользователейmockarty_active_sessions— Активные пользовательские сессииmockarty_db_connections— Состояние пула подключений к базе данныхmockarty_rate_limit_hits_total— Отклонения по лимиту запросов
Endpoint здоровья
Все компоненты предоставляют endpoint здоровья для мониторинга и настройки балансировщика
нагрузки:
| Компонент | Endpoint | Порт |
|---|---|---|
| Административная нода | GET /health |
5770 |
| Mock Resolver | GET /health |
5780 |
| Runner Agent | GET /health |
6770 |
| Сгенерированные серверы | GET /health |
8080 (по умолчанию) |
Ответ health check:
{
"status": "pass",
"releaseId": "1.2.3",
"uptime": "72h15m30s"
}
Интеграция с Grafana
Вы можете создавать пользовательские дашборды Grafana, используя метрики Prometheus, перечисленные выше. Добавьте Mockarty как источник данных Prometheus в Grafana и создайте панели для нужных метрик. Все метрики из раздела Метрики Prometheus доступны для построения дашбордов.
Архитектурные диаграммы
Базовая конфигурация (одна нода)
┌──────────────┐ ┌──────────────────┐
│ Ваше прило- │──HTTP──▶│ Mockarty Admin │
│ жение/тесты │ │ :5770 │
└──────────────┘ │ │
│ - Обслуживание │
│ моков │
│ - Админ UI │
│ - API │
│ - Запуск тестов │
└──────────────────┘
Распределённая конфигурация (рекомендуется для продакшена)
┌──────────────┐
┌───▶│ Resolver 1 │
│ │ :5780 │
┌──────────────┐ │ └──────┬───────┘
│ Ваше прило- │────┤ │ gRPC :5773
│ жение/тесты │ │ ┌──────▼───────────────┐
└──────────────┘ │ │ Mockarty Admin │
│ │ :5770 │
└───▶│ │
│ - Админ UI │
┌──────│ - Координатор │
│ │ - Конфигурация │
│ └──────────────────────┘
│ gRPC :5773
│
┌──────▼───────┐
│ Runner Agent │
│ :6770 │
│ │
│ - API-тесты │
│ - Нагрузочные│
│ тесты │
└───────────────┘
Полная архитектура с Server Generator
┌─────────────────────────────────────────────────────────────────────┐
│ Среда разработки │
│ │
│ ┌────────────┐ ┌─────────────┐ ┌────────────────────────┐ │
│ │ Специфика- │───▶│ Server │───▶│ Сгенерированный │ │
│ │ ция API │ │ Generator │ │ сервер :8080 │ │
│ └────────────┘ └──────┬──────┘ │ │ │
│ │ │ Отдаёт ответы моков │ │
│ создаёт моки │ из Mockarty │ │
│ │ └───────────┬────────────┘ │
│ ▼ │ │
│ ┌──────────────┐ │ │
│ ┌──────────┐ │ Mockarty │◀───────────────┘ │
│ │ Frontend │────▶│ Admin │ запрашивает данные моков │
│ │ App │ │ :5770 │ │
│ └──────────┘ └──────┬───────┘ │
│ │ │
│ ┌──────┴───────┐ │
│ │ │ │
│ ┌──────▼──────┐ ┌────▼────────┐ │
│ │ Resolver │ │ Runner │ │
│ │ :5780 │ │ Agent │ │
│ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
Справочник портов
| Компонент | Порт по умолчанию | Назначение |
|---|---|---|
| Административная нода (HTTP) | 5770 | Админ UI, API, обслуживание моков |
| Административная нода (MCP) | 5772 | MCP-сервер для AI-инструментов |
| Административная нода (gRPC coordinator) | 5773 | Координация нод |
| Mock Resolver (HTTP) | 5780 | Обслуживание моков |
| Mock Resolver (Dashboard) | 6780 | Dashboard resolver |
| Runner Agent (Dashboard) | 6770 | Dashboard runner |
| Сгенерированный сервер (HTTP) | 8080 | Трафик сгенерированного сервера |
| Server Generator Orchestrator | 8888 | API и UI оркестратора |
Управление интеграциями в Kubernetes
В Kubernetes-средах CLI и Admin API Mockarty поддерживают динамическое управление интеграциями кластера – добавление, удаление и настройку нод resolver и runner-агентов без редактирования значений Helm или сырых манифестов.
Динамические команды управления интеграциями
# Добавить новую ноду resolver в кластер
mockarty-cli cluster add-resolver --namespace production --replicas 2
# Добавить нового runner-агента
mockarty-cli cluster add-runner --namespace staging --replicas 1
# Удалить интеграцию (resolver или runner) по имени
mockarty-cli cluster remove-integration --name resolver-production-3
# Показать все активные интеграции
mockarty-cli cluster status --integrations
Эти команды обновляют CR MockartyCluster, а оператор автоматически приводит изменения в соответствие с ресурсами Kubernetes.
Интеграции на уровне пространства имён и на уровне администратора
| Область | Описание | Тип токена | Видимость |
|---|---|---|---|
| На уровне пространства имён | Интеграция принадлежит конкретному пространству имён Mockarty. Резолверы обслуживают только моки из этого пространства имён. | mki_* (scoped) |
Администраторы пространства имён |
| На уровне администратора | Интеграция глобальная. Резолверы обслуживают моки из всех пространств имён. | mki_* (global) |
Только системные администраторы |
Интеграции на уровне пространства имён полезны в мультитенантных средах, где каждая команда управляет своими резолверами. Интеграции на уровне администратора предназначены для общей инфраструктуры.
Квоты ресурсов
Для предотвращения исчерпания ресурсов в общих кластерах настройте лимиты для каждого пространства имён:
| Переменная окружения | Значение по умолчанию | Описание |
|---|---|---|
K8S_MAX_RUNNERS_PER_NS |
5 | Максимальное количество runner-агентов на пространство имён Mockarty |
K8S_MAX_RESOLVERS_PER_NS |
10 | Максимальное количество нод resolver на пространство имён Mockarty |
Когда пространство имён превышает свою квоту, CLI и API возвращают ошибку, а оператор отклоняет обновление CR. Квоты применяются на уровне оператора, а не через Kubernetes ResourceQuotas.
Матрица RBAC для Kubernetes-операций
| Операция | Viewer | Editor | Namespace Admin | System Admin |
|---|---|---|---|---|
| Просмотр статуса кластера | Да | Да | Да | Да |
| Просмотр деталей интеграций | Нет | Да | Да | Да |
| Добавление resolver/runner (своё пространство имён) | Нет | Нет | Да | Да |
| Удаление интеграции (своё пространство имён) | Нет | Нет | Да | Да |
| Добавление resolver/runner (любое пространство имён) | Нет | Нет | Нет | Да |
| Удаление интеграции (любое пространство имён) | Нет | Нет | Нет | Да |
| Масштабирование интеграций | Нет | Нет | Да (свой NS) | Да |
| Просмотр логов кластера | Нет | Нет | Да (свой NS) | Да |
Роли RBAC управляются через авторизацию Admin Node на основе Casbin. Сам оператор использует выделенный ServiceAccount с минимально необходимыми разрешениями Kubernetes RBAC.
Подробнее о конфигурации CRD, автомасштабировании HPA и сетевых политиках см. руководство Архитектура масштабирования. Для первоначальной настройки кластера и установки через Helm см. Руководство по развёртыванию.
Смотрите также
- Установка и развёртывание — Примеры Docker Compose, переменные окружения и настройка TLS
- Руководство по генератору кода — Подробное руководство по CLI генератора серверов для всех поддерживаемых протоколов и брокеров
- Руководство администратора — Управление пользователями, пространствами имен, аутентификация и безопасность
- Справочник API — Полная документация REST API
- Быстрый старт — Начните работу за 20 минут
- Контрактное тестирование — Валидация моков по спецификациям API и обнаружение breaking changes
- Хаос-тестирование — Внедрение сбоев, задержек и ошибок для проверки устойчивости системы