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

Подключение контроллера SALT.BOX

к сведению

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

ВНИМАНИЕ

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

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

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

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

Перед подключением контроллера SALT.BOX проверьте с него сетевой доступ к экземпляру Redis на сервере SALT.BOX.
Для этого из командной строки контроллера SALT.BOX выполните проверку подключения к порту 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.BOX.

    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/ и ./pillar/ в каталог /srv/salt_extmod на контроллере SALT.BOX:

    sudo mkdir -p /srv/salt_extmod

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

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

    sudo /opt/saltstack/salt/bin/pip3 install ./saltbox_bridge/
  8. На подключаемом контроллере SALT.BOX создайте каталог /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/redis-ca.crt:

    cp redis-ca.crt /etc/salt/ssl/redis-ca.crt
ВНИМАНИЕ

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

Обновление модуля SALT.BOX Bridge

  1. Скопируйте на все контроллеры обновлённый модуль saltbox-bridge.

  2. На каждом контроллере перейдите в каталог модуля (./saltbox-bridge) и обновите существующие файлы:

    cd ./saltbox-bridge

    sudo cp --parents ./runners/*.py /srv/salt_extmod/
    sudo cp --parents ./engines/*.py /srv/salt_extmod/
    sudo cp --parents ./pillar/*.py /srv/salt_extmod/
    sudo /bin/cp -rf ./master/salt_master_local/* /srv/salt_master_local/
  3. Перезапустите службу salt-master:

    sudo systemctl restart salt-master

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

Службы 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>

    user: root

    ## 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

    minion_data_cache: True
    minimum_auth_version: 2

    ## Logging
    log_level: warning
    log_level_logfile: quiet
    log_fmt_console: '%(asctime)s %(colorlevel)s %(colorname)s %(colormsg)s'

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

    ext_pillar:
    - core_pillar: {}

    gpg_keydir: '/etc/salt/gpgkeys'

    file_roots:
    base:
    - /srv/salt_local/
    - /srv/saltbox_salt/
    - /srv/sshfs/
    - /srv/salt_custom/

    file_ignore_glob:
    - '*/.git/*'
    - '*.pyc'
    - '*.swp'

    ## 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
    id: saltbox-main-minion
    master: localhost

    file_client: local

    file_roots:
    base:
    - /srv/salt_master_local/

    log_level: warning

    master_tries: -1
    retry_dns: 5
    recon_randomize: False
    recon_max: 0
  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>' # CHANGE ME
    ## REDIS_USERNAME is REDIS_SALT_USERNAME from saltbox-compose `.env` file
    redis_username: '<REDIS_USERNAME>' # CHANGE ME
    ## REDIS_PASSWORD is in `secrets/redis_salt_password`
    redis_password: '<REDIS_PASSWORD>' # CHANGE ME
    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_IP>' # CHANGE ME
    ## Port of SALT.BOX main server which sshfs service listen
    salt_conf_port: 1022
    ## Enable custom sync (added from template)
    salt_conf_custom_sync_on: false

    ## 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: false
    ## Address of SALT.BOX main server to sync FROM
    sshfs_server: '<SaltBox IP>' # 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
  5. Остановите и отключите службу salt-minion:

    sudo systemctl disable --now salt-minion

Служба sshd

к сведению

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

Для работы функции синхронизации файлов между сервером SALT.BOX и подключаемым контроллером SALT.BOX, а также для дальнейшего использования SSHFS-хранилища контроллера SALT.BOX его клиентами необходимо выполнить настройку службы 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 -k /dev/null -s /bin/bash -d /srv/migrator migrator
    sudo useradd -m -k /dev/null -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.BOX.

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

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

    sudo systemctl restart ssh

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