Документация Руководство по интеграциям

Руководство по интеграциям

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). Подробнее — в разделе Полезные функции и советы.

Содержание


Обзор

Mockarty поддерживает распределённую архитектуру, которая позволяет масштабировать обработку
моков, выполнение тестов и генерацию кода на нескольких нодах. Это руководство описывает,
как подключить внешние компоненты к административной ноде Mockarty и внедрить API-first подход
в разработке.

Admin Node :5770 UI, API, Координатор gRPC :5773 MCP :5772 Prometheus /metrics Mock Resolver :5780 HTTP mki_* токен gRPC Runner Agent :6770 Dashboard mki_* токен gRPC Server Generator :8888 Orchestrator mk_* токен HTTP API AI-инструменты (MCP) Claude, Cursor, Windsurf mk_* токен MCP CI/CD пайплайн mk_* токен | REST API Приложение / Тесты запросы к мокам

Существует три типа внешних компонентов, подключаемых к 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 никогда не хранит
токен в открытом виде. Токен отображается только один раз при создании. Скопируйте его
немедленно.

Создание токенов интеграции

Через интерфейс

  1. Перейдите в Settings > Integrations
  2. Нажмите Create Integration
  3. Выберите тип токена:
    • mock_resolver — для нод Mock Resolver
    • test_runner — для Runner Agent
    • orchestrator — для оркестратора Server Generator
  4. Введите описательное имя (например, resolver-eu-west-1, runner-ci-pipeline)
  5. Нажмите Create
  6. Скопируйте токен из диалога подтверждения

Панель администратора — создание токена интеграции

Через 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
  • Создание и управление сгенерированными серверами
  • Синхронизацию определений моков для сгенерированных серверов

Отзыв токенов

Чтобы отозвать токен интеграции:

  1. Перейдите в Settings > Integrations
  2. Найдите интеграцию в списке
  3. Нажмите 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

Маршрутизация трафика

После запуска 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/

Дашборд — метрики resolver

Пример 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

Настройка интеграций — подключённый runner agent

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/

Дашборд — метрики runner agent

Пример 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 до написания кода реализации:

  1. Определите спецификацию API (OpenAPI, .proto, GraphQL schema и др.)
  2. Сгенерируйте автономный сервер из спецификации с помощью mockarty-server-generator
  3. Ответы моков автоматически создаются в Mockarty на основе спецификации
  4. Разрабатывайте клиентское приложение, работая с сгенерированным сервером
  5. Замените сгенерированный сервер реальной реализацией, когда она будет готова

Этот подход позволяет 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

Порядок выбора пространства имён (от наибольшего приоритета):

  1. Аргумент namespace в вызове инструмента (когда LLM передаёт его
    явно).
  2. Заголовок X-Mockarty-Namespace (этот раздел — задаётся один раз в
    конфиге клиента, применяется ко всем вызовам).
  3. Привязанное к API-токену пространство имён, если токен выпущен
    namespace-scoped (CI/CD режим).
  4. Первое не-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:

  1. Откройте Cursor Settings → FeaturesMCP Servers
  2. Нажмите + Add new MCP server
  3. Выберите Type: sse (для Streamable HTTP)
  4. Заполните:
    • Name: mockarty
    • Server URL: http://localhost:5772/mcp
  5. Нажмите 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 перейдите в SettingsCascadeMCP 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

Создание API-токена

  1. Перейдите в Settings > API Tokens в интерфейсе Mockarty.
  2. Нажмите Create Token.
  3. Введите имя (например, claude-desktop-mcp).
  4. Скопируйте сгенерированный токен (начинается с mk_).
  5. Используйте этот токен в конфигурации 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 в административном интерфейсе.

Панель администратора — настройка callback-уведомлений

Каждая подписка на событийный 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 см. Руководство по развёртыванию.


Смотрите также