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

Подключение Master-сервера

к сведению

Данная инструкция предназначена для пользователей, которые хотят подключить существующий сервер 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" и т. п.

Установка модуля Salt.Box Bridge

  1. Получите корневой сертификат Redis, выполнив в каталоге проекта saltbox-compose на сервере Salt.Box команду:

    sudo docker compose cp redis-salt:/etc/redis/certs/ca.crt ./redis-ca.crt
  2. Клонируйте репозиторий saltbox-bridge или скопируйте иным способом файлы проекта saltbox-bridge на подключаемый сервер Salt Master.

    git clone https://dev.saltbox.pro/salt.box/saltbox-bridge.git
  3. Скопируйте все файлы с расширением .py из каталогов engines/ и runners/ из репозитория saltbox-bridge в соответствующие каталоги на сервере Salt Master:

    • engines//srv/salt_extmod/engines/
    • runners//srv/salt_extmod/runners/
  4. Установите модуль saltbox_bridge с использованием Python-утилиты pip3, соответствующей версии Python вашего сервера Salt Master:

    sudo pip3 install `./saltbox_bridge/`
  5. Скопируйте файл redis-ca.crt на подключаемый сервер Salt Master в каталог /etc/salt/ssl/.

    примечание

    Владелец копируемых файлов (шаги 1-5) должен совпадать с пользователем-владельцем процесса salt-master (обычно это root).

  6. Настройте файл конфигурации сервиса salt-master:

    /etc/salt/master
    # /etc/salt/master

    ## Уникальный идентификатор мастера в системе Salt.Box
    ## Может содержать латинские буквы, цифры, подчёркивание, знак "минус" и точку
    salt_master_id: UNIQUE_NAME

    ## Где находятся подкаталоги с модулями Salt.Box Bridge:
    module_dirs:
    - /srv/salt_extmod/

    ## Автоматически принимать открытые ключи от миньонов. `false` для ручного приёма ключей
    auto_accept: true

    ## Периодическая отправка событий "Присутствие миньона" (миньон находится в сети)
    presence_events: True

    ## Установите действительные значения
    engines:
    - saltbox_delator:
    - saltbox_agent:
    ext_pillar:
    - redis_pillar:

    ## Периодическая очистка устаревших команд в Redis
    schedule:
    saltbox_delator_cleanup:
    hours: 3
    function: saltbox_delator.cleanup_expired_jobs
  7. Поместите содержимое каталога master/states/ в каталог file_roots миньона.
    По умолчанию корневым каталогом миньона является /srv/salt/, но предпочтительнее изменить его, чтобы он не конфликтовал с корневым каталогом мастера:

    /etc/salt/minion
    # /etc/salt/minion on master host

    file_roots:
    base:
    - '/srv/salt_master_local/'
  8. Создайте YAML-файл конфигурации saltbox:

    /etc/salt/saltbox
    # /etc/salt/saltbox

    ## Конфигурация Salt.Box
    ## Файл в формате YAML

    ## Конфигурация Redis
    ## REDIS_HOST - хост с развернутым saltbox-compose
    redis_host: 'REDIS_HOST'
    ## REDIS_USERNAME - имя пользователя REDIS_SALT_USERNAME из файла `.env` saltbox-compose
    redis_username: 'REDIS_USERNAME'
    ## REDIS_PASSWORD - пароль из `secrets/redis_salt_password`
    redis_password: 'REDIS_PASSWORD'
    redis_ssl_use: true
    ## Каталог с сертификатом
    redis_ssl_ca_certs: '/etc/salt/ssl/redis-ca.crt'


    ## Время жизни для ответов команд (job returns) и grains (сек)
    ## `null` (без кавычек) - TTL не ограничен
    ## ВНИМАНИЕ! Значение `null` может привести к ухудшению производительности и интенсивному использованию памяти.
    expire: 604800

    ## Опции для получения SLS-файлов и модулей Salt.Box
    ## Адрес сервера Salt.Box
    salt_conf_server: 'saltbox.local' # УКАЖИТЕ РЕАЛЬНОЕ ЗНАЧЕНИЕ
    ## Порт основного сервера Salt.Box, на котором работает служба sshfs
    salt_conf_port: 1022
    ## Имя пользователя SSH для доступа к файлам
    salt_conf_user: 'master'
    ## Путь на УДАЛЕННОМ сервере, где хранятся файлы
    salt_conf_source: '/srv/master/salt/'
    ## Путь на ЛОКАЛЬНОМ сервере, который находится в каталоге `file_root` Salt Master
    salt_conf_destination: '/srv/saltbox_salt/'

    ## Настройки репликации файлов из службы sshfs Salt.Box
    ## Репликация должна быть включена для удаленного Master-сервера
    sshfs_sync_on: true
    ## Адрес сервера-источника Salt.Box для синхронизации
    sshfs_server: 'saltbox.local' # УКАЖИТЕ РЕАЛЬНОЕ ЗНАЧЕНИЕ
    ## Порт сервера Salt.Box, на котором работает служба sshfs
    sshfs_port: 1022
    ## Имя пользователя SSH для доступа к файлам
    sshfs_user: 'saltbox'
    ## Путь на УДАЛЕННОМ сервере, где хранятся файлы
    sshfs_source: '/srv/sshfs/'
    ## Путь на ЛОКАЛЬНОМ сервере, куда будут помещены файлы
    sshfs_destination: '/srv/sshfs/' # УКАЖИТЕ РЕАЛЬНОЕ ЗНАЧЕНИЕ
  9. Используйте вспомогательный скрипт ./make_master_id.sh для создания идентификатора с именем хоста и меткой времени и сохранения его в отдельный файл вместо ручного указания salt_master_id в основном файле конфигурации:

    ./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
  10. Примените изменения, перезапустив службу salt-master:

    sudo systemctl restart salt-master.service
к сведению

Демон SSH должен быть настроен для обслуживания каталога SSHFS_DESTINATION, должны быть установлены соответствующие параметры Pillars, чтобы миньоны могли получать файлы от своего Master-сервера.


После выполнения всех шагов ваш сервер Salt Master будет интегрирован с Salt.Box и сможет взаимодействовать с его компонентами через сервер Redis.