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