Перейти к основному содержимому
Версия: Новая

Архитектура Salt.Box

Архитектура программного комплекса Salt.Box
Рисунок 1. Архитектура программного комплекса Salt.Box

Таблица 1. Взаимодействия компонентов, контейнеров и подсистем программного комплекса Salt.Box
Описание
1Взаимодействие пользователя с веб-приложением по протоколу http или https
2Веб-приложение работает с API-шлюзом через обратный прокси
3Для выполнения процедуры аутентификации логин и пароль пользователя передаются системе KeyCloak
4KeyCloak использует СУБД PostgreSQL для хранения регистрационных данных пользователя и хеша его пароля
5Интеграция KeyCloak с корпоративным каталогом LDAP позволяет использовать существующие учетные записи пользователей. Использование OpenID Connect обеспечивает единый вход для всех подключённых приложений
7KeyCloak выдаёт JSON Web Token (JWT) для доступа веб-приложения к компонентам Salt.Box
8Передача JWT в составе любого запроса, совершаемого веб-приложением
9API-шлюз выполняет валидацию JWT, полученного в составе любого запроса, в стистеме KeyCloak
10Если JWT валиден, API-шлюз запрашивает у OPA (Open Policy Agent) политику доступа пользователя-владельца токена к Salt.Box
11Проверка обновлений, получение, упаковка и сохранение изменений в бандлах (bundles)
12Если политика доступа разрешает пользователю выполнение запроса, API-шлюз транслирует запрос компоненту Core — интерфейсу ядра программного комплекса Salt.Box
13Сервис Core сохраняет временные данные (данные pillars, команды, результаты выполнения команд), в Redis store — хранилище ключ-значение на базе Redis
14«Движки» (engines) Salt Master-сервера также имеет доступ к хранилищу Redis store, получают из него и сохранят результаты выполнения — Job Return — и прочие структуры данных. Результаты выполнения задач сохраняются с заданным временем жизни (TTL)
15, 16Сервис Core осуществляет синхронные вызовы (RPC) и обработку событий (Events) через брокер сообщений на базе Redis Pub/Sub channels, управляемый фреймворком FastStream
17Статические данные (коллекции, параметры миньонов и мастер-серверов, схемы команд, шаблоны задач, настройки Salt.Box) хранятся в БД под управлением MongoDB
18Сервис Core после обработки запроса и выполнения соответствующих команд на стороне миньонов SaltStack возвращает ответ API-шлюзу
19API-шлюз транслирует ответ веб-приложению для отображения результата пользователю
20Сервис Core осуществляет запуск продолжительных асинхронных задач посредством Taskiq, используя RabbitMQ в качестве брокера сообщений. Дополнительно Taskiq предоставляет планировщик для выполнения задач по расписанию
21Запрос к модулю расширения Salt.Box выполняется по аналогии с п. 12
22Модуль расширения Salt.Box осуществляет запуск продолжительных асинхронных задач по аналогии с п. 20
23Модуль расширения Salt.Box после обработки запроса и выполнения соответствующих команд на стороне миньонов SaltStack возвращает ответ API-шлюзу
24Salt Master публикует задания (Jobs), получает события, созданные миньоном, генерирует собственные события
25Мииньон получает задания (Jobs), получает события, созданные мастером, генерирует собственные события
26Получение данных от встроенного в Salt Master файл-сервера
27Данные, возвращаемые миньоном (Job returns)