Master-серверы
Интеграция существующего сервера Salt Master с Salt.Box
Данная инструкция предназначена для пользователей, которые хотят подключить существующий сервер Salt Master к развёрнутому программному комплексу Salt.Box.
Предполагается, что развёртывание Salt.Box выполнено в контейнеризаторе приложений Docker в соответствии с разделом онлайн-документации Развёртывание сервера Salt.Box.
Предварительные требования
-
Сервер Salt Master (хост с установленным из официального репозитория серверным компонентом системы SaltStack — пакетом
salt-masterверсии 3006.9 или выше). -
Сервер Salt.Box с доступом к его Redis-экземпляру из локальной сети.
Проверка доступности сервера Redis
Перед интеграцией рекомендуется проверить доступность сервера Redis на сервере Salt.Box.
Из командной оболочки сервера Salt.Box выполните проверку подключения к серверу Redis (на порт TCP/6379):
nc -vz <IP_или_HOSTNAME_Salt_Box> 6379
Убедитесь, что в выводе команды нет сообщений об ошибках, таких как, например, "Connection refused", "No route to host" и т. п.
1. Клонирование репозитория Salt.Box Bridge
На сервере Salt Master выполните команду:
git clone https://dev.saltbox.pro/salt.box/salt-box-bridge.git
2. Получение сертификата Redis
На сервере Salt.Box выполните команду:
sudo docker compose cp redis-salt:/etc/redis/certs/ca.crt ./redis-ca.crt
Скопируйте файл redis-ca.crt на сервер Salt Master в каталог /etc/salt/ssl/.
3. Создание необходимых каталогов
На сервере Salt Master последовательно выполните команды:
sudo mkdir -p /srv/salt_extmod/engines
sudo mkdir -p /srv/salt_extmod/runners
sudo mkdir -p /etc/salt/salt_box.d
sudo mkdir -p /etc/salt/ssl
4. Копирование файлов модуля Bridge
Скопируйте все файлы с расширением .py из каталогов engines/ и runners/ из репозитория salt-box-bridge в соответствующие каталоги на сервере Salt Master:
engines/→/srv/salt_extmod/engines/runners/→/srv/salt_extmod/runners/
Убедитесь, что файлы принадлежат пользователю root.
5. Установка сервисного модуля Bridge
Установите модуль salt_box_bridge_service с использованием утилиты pip, соответствующей версии Python вашего сервера Salt Master:
sudo /opt/saltstack/salt/bin/pip3.10 install /путь/до/salt-box-bridge/salt_box_bridge_service
6. Настройка конфигурации Salt Master
Создайте файл /etc/salt/master.d/master.conf со следующим содержимым:
salt_master_id: UNIQUE_NAME # Уникальный идентификатор мастера в системе Salt.Box
module_dirs:
- /srv/salt_extmod/ # Путь к каталогам с кастомными модулями (engines и runners)
auto_accept: true # Автоматически принимать ключи миньонов
presence_events: True # Отправка событий присутствия миньонов
engines:
- salt_box_redis_bridge: # Модуль для взаимодействия через Redis
salt_box_env_file: '/etc/salt/salt_box.d/.env'
- salt_box_service: # Модуль для регистрации мастера в Salt.Box
salt_box_env_file: '/etc/salt/salt_box.d/.env'
schedule:
salt_box_redis_bridge_cleanup: # Периодическая очистка устаревших команд в Redis
hours: 3
function: salt_box_redis_bridge.cleanup_expired_jobs
kwargs:
expire: 604800 # Время жизни команд в секундах
redis_host: redis-salt # Хост Redis (можно оставить как есть, если настроен в файле .env)
7. Создание файла .env
Создайте файл /etc/salt/salt_box.d/.env со следующим содержимым:
REDIS_HOST="Salt_Box_IP_or_hostname" # IP или имя хоста, на котором установлены Salt.Box и Redis
REDIS_USERNAME="Redis_user" # Имя пользователя Redis (переменная REDIS_SALT_USERNAME на Salt.Box)
REDIS_PASSWORD="Redis_password" # Пароль пользователя Redis (из secrets/redis_salt_password)
REDIS_SSL_USE=True # Использовать ли TLS для подключения к Redis
REDIS_SSL_CA_CERTS="/etc/salt/ssl/redis-ca.crt" # Путь к CA-сертификату Redis, полученному с Salt.Box
EXPIRE=604800 # Время жизни команд в Redis (в секундах)
MASTER_SECRET="Unique_secret" # Уникальный секретный ключ мастера (можно сгенерировать pwgen)
Убедитесь, что значения переменных соответствуют настройкам вашего сервера Salt.Box.
8. Генерация уникального идентификатора Master-сервера
Данный пункт выполняется опционально.
Выполните скрипт для генерации уникального идентификатора:
./make_master_id.sh > /etc/salt/salt_box.d/master_id.txt
Затем в файле master.conf укажите:
salt_master_id: /etc/salt/salt_box.d/master_id.txt
9. Перезапуск сервера Salt Master
Примените изменения, перезапустив службу salt-master:
sudo systemctl restart salt-master.service
После выполнения всех шагов ваш сервер Salt Master будет интегрирован с Salt.Box и сможет взаимодействовать с его компонентами через сервер Redis.
Назначение пилларов (pillars) миньонам
Пиллары (pillars) в SaltStack — защищённое хранилище данных на стороне мастер-сервера, предназначенное для определения и целевого распространения структурированных данных на конкретные миньоны.
Назначение pillars выполняется на стороне мастера и позволяет:
- централизованно хранить и управлять конфигурационными данными миньонов;
- передавать структурированные данные строго определённым миньонам;
- безопасно хранить чувствительную информацию (пароли, ключи, токены);
- описывать роли, типы и назначение миньонов (web, db, cache и др.);
- переопределять параметры конфигурации без изменения состояний (SLS);
- формировать логические коллекции миньонов на основе данных pillars;
- обеспечивать гибкость и масштабируемость управления инфраструктурой;
- использовать данные для условной логики в состояниях и шаблонах Jinja;
- интегрировать внешние источники данных через ext_pillar.
Назначение pillars доступно после этапа допуска мастера к управлению миньонами, см. раздел Допуск мастера к управлению миньонами
Чтобы назначить pillars миньонам, выполните следующие действия:
-
В главном меню системы выберите пункт Мастера Рис. 1.
Рисунок 1. Выбор пункта Мастера в главном меню
Вы перейдёте на страницу управления мастерами Рис. 2.
Рисунок 2. Страница управления мастерами
-
В таблице на странице управления мастерами в колонке ID мастера нажмите ссылку с идентификатором (ID) Рис. 2.
-
На открывшейся странице карточки мастера нажмите вкладку Данные Pillars Рис. 3 [1].
Рисунок 3. Страница карточки мастера
-
Нажмите кнопку
+ Создать PillarРис. 3 [2]. -
В диалоговом окне создания нового pillar заполните поля Рис. 4:
-
ID клиента— необязательное.
Если не указано, данные pillar будут применены ко всем клиентам Рис. 4 [1]. -
Имя— обязательное.
Имя pillar (ключ) — уникальное логическое имя pillar, используемое для обращения к данным в SLS-файлах, шаблонах и при нацеливании Рис. 4 [2]. -
Значение— обязательное.
Значение pillar — здесь задаётся значение pillar. Рис. 4 [3].
Рисунок 4. Диалоговое окно создания нового pillar. Кнопка
Подтвердить
-
-
Нажмите кнопку
ПодтвердитьРис. 4 [4].
В результате созданный pillar отобразится на странице карточки мастера Рис. 5.
![]() |
|---|
После создания pillar информация о добавленном pillar появится в карточке миньона.
Более подробную информацию о карточке миньона см. в разделе Информация о миньоне.
На вкладке Pillars появится таблица с данными pillars Рис. 6.
![]() |
|---|

