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

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

к сведению

Данная инструкция предназначена для пользователей, которые хотят подключить существующий сервер Salt Master к развёрнутому программному комплексу Salt.Box.

ВНИМАНИЕ

Для подключения сервера Salt Master необходимо, чтобы выполнялись следующие требования:

  • На подключаемом сервере Salt Master установлены пакеты salt-master и salt-minion версии 3006.9.
  • На подключаемом сервере Salt Master установлены пакеты git и rsync.
  • Обеспечен сетевой доступ с подключаемого сервера Salt Master к экземпляру Redis сервера Salt.Box, к которому выполняется подключение.
примечание

Предполагается, что развёртывание Salt.Box выполнено в контейнеризаторе приложений Docker в соответствии с разделом онлайн-документации Развёртывание сервера Salt.Box.

Проверка доступности сервера Redis

Перед подключением сервера Salt Master проверьте с него сетевой доступ к экземпляру Redis на сервере Salt.Box.
Для этого из командной строки сервера Salt Master выполните проверку подключения к порту 6379/TCP сервера Salt.Box:

nc -vz <IP_или_HOSTNAME_Salt_Box> 6379

Убедитесь, что в выводе команды нет сообщений об ошибках, таких как, например, "Connection refused", "No route to host" и т. п.

подсказка

Для того чтобы экземпляр Redis сервера Salt.Box принимал соединения на всех сетевых интерфейсах, проект saltbox-compose должен быть запущен с параметром REDIS_SALT_EXPOSE_SOCKET='0.0.0.0:6379' в файле .env

Установка модуля 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/saltbox/saltbox-bridge.git
  3. Перейдите в каталог проекта (в данном примере — saltbox-bridge):

    cd ./saltbox-bridge
  4. Если Вы работаете с веткой dev репозитория saltbox-bridge, не забудьте выполнить переключение на неё:

    git checkout dev
  5. Скопируйте все файлы с расширением .py из каталогов ./engines/ и ./runners/ в каталог /srv/salt_extmod на сервере Salt Master:

    sudo mkdir -p /srv/salt_extmod

    sudo cp --parents ./runners/*.py /srv/salt_extmod/
    sudo cp --parents ./engines/*.py /srv/salt_extmod/
  6. Поместите содержимое каталога ./master/salt_master_local в каталог /srv/salt_master_local/:

    sudo cp -r ./master/salt_master_local /srv
  7. Установите модуль saltbox_bridge с использованием Python-утилиты pip3, установленной в составе компонентов salt :

    sudo /opt/saltstack/salt/bin/pip3 install ./saltbox_bridge/
  8. На подключаемом сервере Salt Master создайте каталог /var/lib/saltbox-bridge/ для хранения ssh-ключей и каталог /etc/salt/ssl/ для размещения корневого сертификата Redis:

    sudo mkdir -p /var/lib/saltbox-bridge/
    sudo mkdir -p /etc/salt/ssl/

    Скопируйте ранее полученный сертификат redis-ca.crt в каталог /etc/salt/ssl/.

ВНИМАНИЕ

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

Настройка служб

Службы Salt

  1. Настройте файл конфигурации сервиса salt-master, указав нужные значения в заполнителях < ... >:

    /etc/salt/master
    ## Unique master identifier in Salt.Box
    ## Latin letters, digits, underscore, minus and dot
    salt_box_master_id: <UNIQUE_NAME>

    ## Where subdirs with bridge modules are
    module_dirs:
    - /srv/salt_extmod/

    ## Accept pubkeys from minions. Turn off to manage manually.
    auto_accept: true

    ## Special minion precense periodic event means the minion is online
    presence_events: True

    ## Set real values
    engines:
    - saltbox_delator: {}
    - saltbox_agent: {}
    - saltbox_job_runner: {}
    ext_pillar:
    - redis_pillar: {}

    file_roots:
    base:
    - /srv/salt_master_local/
    - /srv/salt/
    - /srv/salt_local/
    - /srv/saltbox_salt/
    - /srv/sshfs/

    ## Strictly recommended to cleanup historical data
    schedule:
    saltbox_delator_cleanup:
    hours: 3
    function: saltbox_delator.cleanup_expired_jobs
    к сведению

    Вы можете использовать вспомогательный скрипт make_master_id.sh для создания идентификатора с именем хоста и меткой времени и сохранения его в отдельный файл вместо ручного указания salt_box_master_id в основном файле конфигурации.

    В каталоге проекта saltbox-bridge выполните:

    sudo ./make_master_id.sh

    Затем в файле /etc/salt/master укажите:

    salt_box_master_id: /etc/salt/master.d/master_id.conf
  2. Приведите конфигурацию службы миньона к виду:

    /etc/salt/minion
    file_roots:
    base:
    - /srv/salt_master_local/
  3. Создайте YAML-файл конфигурации saltbox, доступный для чтения только пользователю root:

    sudo touch /etc/salt/saltbox && sudo chmod 600 /etc/salt/saltbox

    Приведите файл конфигурации к виду, указанному ниже, указав реальные значения в заполнителях < ... > и в переменных salt_conf_server, sshfs_server, sshfs_destination:

    /etc/salt/saltbox
    ## Salt.Box config
    ## File is YAML formatted.

    ## Redis config
    ## REDIS_HOST is host with deployed saltbox-compose
    redis_host: '<REDIS_HOST>'
    ## REDIS_USERNAME is REDIS_SALT_USERNAME from saltbox-compose `.env` file
    redis_username: '<REDIS_USERNAME>'
    ## REDIS_PASSWORD is in `secrets/redis_salt_password`
    redis_password: '<REDIS_PASSWORD>'
    redis_ssl_use: true
    ## Where the cert had been saved before
    redis_ssl_ca_certs: '/etc/salt/ssl/redis-ca.crt'

    ## Time to live for job returns and grains (sec)
    ## `null` (with no quotes) to not expire.
    ## WARNING! `null` value may lead to worse perfomance and intensive storage usage.
    expire: 604800

    ## Salt.Box SLS files and Salt modules obtaining options.
    ## Address of Salt.Box main server
    salt_conf_server: 'saltbox.local' # CHANGE ME
    ## Port of Salt.Box main server which sshfs service listen
    salt_conf_port: 1022
    ## SSH user name to access files
    salt_conf_user: 'master'
    ## Path on REMOTE server where files kept
    salt_conf_source: '/srv/master/salt/'
    ## Path on LOCAL server which is in Salt Master `file_root`
    salt_conf_destination: '/srv/saltbox_salt/'

    ## Settings of files replication from Salt.Box sshfs service
    ## Replication should be enabled for remote master
    sshfs_sync_on: true
    ## Address of Salt.Box main server to sync FROM
    sshfs_server: 'saltbox.local' # CHANGE ME
    ## Port of Salt.Box main server which sshfs service listen
    sshfs_port: 1022
    ## SSH user name to access files
    sshfs_user: 'saltbox'
    ## Path on REMOTE server where files kept
    sshfs_source: '/srv/sshfs/'
    ## Path on LOCAL server where files will be placed
    sshfs_destination: '/srv/sshfs/' # CHANGE ME
  4. Примените изменения, перезапустив службу salt-master:

    sudo systemctl restart salt-master.service
  5. Остановите и отключите службу salt-minion:

    sudo systemctl disable --now salt-minion.service

Служба sshd

к сведению

В данной инструкции дан пример настройки конфигурации SFTP на дополнительном сервере Salt Master с использованием подсистемы sftp сервера OpenSSH как наиболее широко распространённой реализации протокола SFTP.

Для работы функции синхронизации файлов между сервером Salt.Box и подключаемым сервером Salt Master, а также для дальнейшего использования SSHFS-хранилища сервера Salt Master его клиентами необходимо выполнить настройку службы sshd:

  1. Убедитесь, что в файле конфигурации /etc/ssh/sshd_config включена подсистема sftp:

    /etc/ssh/sshd_config
    Subsystem   sftp    /usr/lib/openssh/sftp-server
  2. В файле конфигурации /etc/ssh/sshd_config портом службы sshd рекомендуется назначить порт 1022/TCP для унификации настроек с сервером Salt.Box:

    /etc/ssh/sshd_config
    Port   1022
  3. Создайте системные учётные записи пользователей migrator и saltbox, выполняющих синхронизацию файлов в различных задачах и сценариях Salt.Box:

    sudo useradd -M -s /bin/bash -d /srv/migrator migrator
    sudo useradd -M -s /bin/bash -d /srv/sshfs saltbox

    sudo passwd migrator
    sudo passwd saltbox
    примечание

    Пароли пользователей хранятся в файлах в каталоге проекта saltbox-compose на сервере Salt.Box:
    migrator: secrets/sshfs_user_migrator_password
    saltbox: secrets/sshfs_user_saltbox_password

    Применение паролей пользователей migrator и saltbox, совпадающих с паролями аналогичных пользователей сервера Salt.Box, позволяет унифицировать данные Pillars для коллекций клиентов серверов Salt.Box и Salt Master.

    Если необходимо обеспечить дополнительную защиту данных на подключаемом сервере Salt Master, можно задать собственные пароли.

  4. Перезапустите службу sshd:

    sudo systemctl restart ssh

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