Подключение 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
-
Получите корневой сертификат Redis, выполнив в каталоге проекта
saltbox-composeна сервере Salt.Box команду:sudo docker compose cp redis-salt:/etc/redis/certs/ca.crt ./redis-ca.crt -
Клонируйте репозиторий
saltbox-bridgeили скопируйте иным способом файлы проектаsaltbox-bridgeна подключаемый сервер Salt Master.git clone https://dev.saltbox.pro/saltbox/saltbox-bridge.git -
Перейдите в каталог проекта (в данном примере —
saltbox-bridge):cd ./saltbox-bridge -
Если Вы работаете с веткой
devрепозиторияsaltbox-bridge, не забудьте выполнить переключение на неё:git checkout dev -
Скопируйте все файлы с расширением
.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/ -
Поместите содержимое каталога
./master/salt_master_localв каталог/srv/salt_master_local/:sudo cp -r ./master/salt_master_local /srv -
Установите модуль saltbox_bridge с использованием Python-утилиты pip3, установленной в составе компонентов
salt:sudo /opt/saltstack/salt/bin/pip3 install ./saltbox_bridge/ -
На подключаемом сервере 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
-
Настройте файл конфигурации сервиса
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 -
Приведите конфигурацию службы миньона к виду:
/etc/salt/minionfile_roots:
base:
- /srv/salt_master_local/ -
Создайте 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 -
Примените изменения, перезапустив службу
salt-master:sudo systemctl restart salt-master.service -
Остановите и отключите службу
salt-minion:sudo systemctl disable --now salt-minion.service
Служба sshd
В данной инструкции дан пример настройки конфигурации SFTP на дополнительном сервере Salt Master с использованием подсистемы sftp сервера OpenSSH как наиболее широко распространённой реализации протокола SFTP.
Для работы функции синхронизации файлов между сервером Salt.Box и подключаемым сервером Salt Master, а также для дальнейшего использования SSHFS-хранилища сервера Salt Master его клиентами необходимо выполнить настройку службы sshd:
-
Убедитесь, что в файле конфигурации
/etc/ssh/sshd_configвключена подсистемаsftp:/etc/ssh/sshd_configSubsystem sftp /usr/lib/openssh/sftp-server -
В файле конфигурации
/etc/ssh/sshd_configпортом службыsshdрекомендуется назначить порт 1022/TCP для унификации настроек с сервером Salt.Box:/etc/ssh/sshd_configPort 1022 -
Создайте системные учётные записи пользователей
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, можно задать собственные пароли.
-
Перезапустите службу
sshd:sudo systemctl restart ssh
После выполнения всех шагов ваш сервер Salt Master будет интегрирован с Salt.Box и сможет взаимодействовать с его компонентами через сервер Redis.