Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
- Astra Linux Special Edition РУСБ.10015-17
- Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
- Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
- Astra Linux Common Edition 2.12.30 и более поздним обновлениям
Для Astra Linux Special Edition РУСБ.10015-01 x.7 требуется подключение расширенного репозитория (см. Репозитории Astra Linux Special Edition x.7: структура, особенности подключения и использования).
В частности, не следует применять настоящую инструкция на контроллерах домена FreeIPA (см. Контроллер ЕПП FreeIPA в Astra Linux).
Введение
Для управления конфигурациями серверов и их обслуживания на всем жизненном могут использоваться следующие программные компоненты.
- Foreman - инструмент, предназначенный для помощи системным администраторам в управлении серверами, обеспечивающий простой способ взаимодействия с системами управления конфигурациями (Ansible, Puppet и др.) для автоматизации задач администрирования и развертывания приложений. Foreman поддерживает web-интерфейс, API и CLI, которые можно использовать для предоставления, настройки и мониторинга серверов. Подходит для инфраструктур любых размеров.
- Инструменты управления конфигурациями, позволяющие системным администраторам автоматизировать развертывание и настройку серверной инфраструктуры. Обычно используется один из этих инструментов:
- Puppet — требует установки агентского ПО на управляемые компьютеры.
- Ansible — не требует установки агентского ПО на управляемые компьютеры.
Описание стенда
Сервер: 10.0.2.120 master.astra.lan
Клиент: 10.0.2.121 agent1.astra.lan
Далее подразумевается, что на сервере и клиенте используются одинаковые имена пользователей. Если имена пользователей разные, то необходимо использовать актуальные имена, соответствующим образом изменив команды передачи ключей SSH.
На стенде отсутствует настроенный DNS-сервер, поэтому для разрешения IP-адресов используются файлы /etc/hosts на сервере и на клиенте.
Установка Puppet
Настройка сервера
Имя и адрес сервера
Коммуникация между службами Puppet Server и Puppet Agent осуществляется по имени хоста, на котором расположена служба. Для правильной работы служб нужно:
- либо настроить разрешение имен в службе DNS;
- либо указать адреса хостов в файлах /etc/hosts на всех хостах (этот вариант используется далее).
Серверу назначается имя master.astra.lan. Команда назначения имени будет иметь следующий вид (команда выполняется на сервере):
127.0.0.1 localhost 10.0.2.120 master.astra.lan master puppet 10.0.2.121 agent1.astra.lan agent1 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Подразумевается, что серверу назначен статический IP-адрес 10.0.2.120, а клиенту - 10.0.2.121.
Коррекция региональных настроек (locales) на сервере
Проверить наличие региональной настройки en_US.utf8 выполнив команду:
sudo locale-gen
sudo dpkg-reconfigure locales
Установка Puppet Server
Для установки выполнить на сервере следующие команды:
sudo apt install openjdk-11-jre-headless puppetserver
Для коммуникации Puppet Server использует IP-порт 8140. Если включен межсетевой экран, то разрешить коммуникации через этот порт. Для сетевого экрана ufw:
sudo systemctl start puppetserver
Установка Puppet Agent на клиентском компьютере
Имя и адрес клиентского компьютера
Настроить статический IP-адрес сервера (далее - 10.0.2.121)
Задать имя компьютера:
127.0.0.1 localhost 10.0.2.121 agent1.astra.lan agent1 10.0.2.120 master.astra.lan master puppet # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Можно просто скопировать ранее созданный файл /etc/hosts с сервера.
Установка агента
Для установки агента выполнить на компьютере-агенте следующие команды (при этом будет установлен агент и сервер SSH для удалённого управления агентом):
sudo apt install puppet-agent ssh
server = master.astra.lan show_diff = true
Для коммуникации агент, как и Puppet Server, использует IP-порт 8140. Если включен межсетевой экран, то разрешить коммуникации через этот порт. Для сетевого экрана ufw:
sudo systemctl start puppet
Настройка удаленного доступа по протоколу ssh на клиентской машине
Для настройки доступа к клиентской машине по протоколу ssh:
Создать отдельного пользователя с домашним каталогом:
sudo useradd -m <имя_пользователя>опция -m указывает на необходимость создания домашнего каталога. Далее выбранное имя пользователя должно быть указано реестре клиентских машин на сервере (файле /etc/ansible/hosts);Задать пароль для этого пользователя:
sudo passwd <имя_пользователя>Разрешить пользователю выполнять команды с использованием sudo. Это можно сделать создав файл /etc/sudoers.d/<имя_пользователя> с указанием привилегии выполнять любые команды без запроса пароля ALL=NOPASSWD: ALL:
echo "<имя_пользователя> ALL=NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/<имя_пользователя>
Часто предлагаемый для упрощения вариант использования на клиентской машине пользователя root является нежелательным с точки зрения безопасности. При использовании этого варианта помимо задания пароля для пользователя root необходимо разрешить доступ пользователю root через ssh. Для включения доступа root через ssh в файле /etc/ssh/sshd_config раскомментировать параметр PermitRootLogin, изменить его значение на yes и перезапустить службу SSH (команды выполняются на клиентской машине):
sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd
Подписание сертификатов клиента
При первом запуске клиентская служба Puppet Agent отправит на Puppet Server запрос на подпись сертификата. Для просмотра списка запросов на подпись сертификата выполнить на сервере следующую команду:
Requested Certificates: agent1.astra.lan (SHA256) F7:D5:E5:AB:AA:86:7F:EF:19:3D:D9:B9:E3:E9:63:DC:AE:31:17:57:67:3D:2B:D7:A5:1C:71:E3:46:E0:A7:1E
Подписать сертификат:
Successfully signed certificate request for agent1.astra.lan
Остановить службу
sudo systemctl stop puppetВыполнить тестирование работы службы, в процессе которого служба запросит и получит сертификат:
sudo /opt/puppetlabs/bin/puppet agent --test
Info: csr_attributes file loading from /etc/puppetlabs/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for agent1.astra.lan
Info: Certificate Request fingerprint (SHA256): F7:D5:E5:AB:AA:86:7F:EF:19:3D:D9:B9:E3:E9:63:DC:AE:31:17:57:67:3D:2B:D7:A5:1C:71:E3:46:E0:A7:1E
Info: Downloaded certificate for agent1.astra.lan from puppet
Info: Using configured environment 'production'
Info: Retrieving pluginfacts Info: Retrieving plugin
Info: Retrieving locales
Info: Caching catalog for agent1.astra.lan
Info: Applying configuration version '1568370748'
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml Notice: Applied catalog in 0.02 secondsПовторно запустить службу:
sudo systemctl start puppet
Установка пакетов Ansible и Foreman
Установить пакеты Ansible и Foreman, выполнив на сервере следующие действия:
Установить пакет ansible из репозитория:
Настройка /etc/ansible/hosts
Отредактировать файл /etc/ansible/hosts, добавив в файл секцию [agents] (т.е. добавив группу серверов, с названием этой группы agents). В этой группе пока будет один сервер с именем agent1.astra.lan и IP-адресом 10.0.2.121:
В результате файл /etc/ansible/hosts должен иметь следующий вид (пользователь для удаленного доступа - username):
agents: hosts: agent1.astra.lan: ansible_user: username
Ansible использует подключение ssh без запроса пароля по ключу, поэтому нужно сгенерировать ключ:
После создания ключа передать его на нужные узлы, подключаясь к ним от имени пользователя, созданного для удаленного доступа:
agent1.astra.lan | SUCCESS => {
"changed": false,
"ping": "pong"
}
Базовая настройка Foreman
Установить на сервере пакеты:
В случае, если ОС была установлена без графической оболочки, установить пакет shared-mime-info, команда:
Запустить установщик:
После установки в строке "Initial credentials are admin / ...." будет указан логин admin и указан автоматически созданный пароль для входа в web-интерфейс, его рекомендуется запомнить чтобы использовать для входа в web-интерфейс.В дальнейшем пароль возможно изменить с помощью команды:
Preparing installation Done *
Foreman is running at https://master.astra.lan
Initial credentials are admin / NRLJth9ufmAkTsF5 *
Foreman Proxy is running at https://master.astra.lan:8443 *
Puppetmaster is running at port 8140 The full log is at /var/log/foreman-installer/foreman.log
Проверить работоспособность foreman-proxy:
["httpboot","logs","puppet","puppetca","tftp"]
Настройка
Foreman + Puppet
Открыть в браузере ссылку https://master.astra.lan (подтвердить согласие на подключение)
В качестве логина и пароля использовать имя admin и автоматически созданный пароль, полученный после выполнения установщика.
Перейти в "Узлы" - "All hosts" ("Hosts" -> "All Hosts" в английском варианте), где должен появится список доступных узлов:
Если узлы отсутствуют, то подождать, пока информация обновится, или на нужных узлах (на клиенте) выполнить команду:
Убедиться, что в "Инфраструктура" - "Капсулы" ( в английском варианте "Infrastructure" -> "Smart Proxies") имеется отображение созданного по умолчанию proxy. Если proxy не создан, то:
- Перейти в "Администратор" - "Местоположения" ("Administer" - "Locations");
- Выбрать Default location;
- Нажать кнопку "Устранить несоответствия" ("Fix mismatches");
- Нажать кнопку "Применить" ("Submit");
- Аналогично "Администратор" - "Организации" ("Administer" - "Organizations");
- Выбрать Default organization;
- Нажать кнопку "Устранить несоответствия" ("Fix mismatches");
- Нажать кнопку "Применить" ("Submit");
После выполнения этих шагов в "Инфраструктура" - "Капсулы" ( в английском варианте "Infrastructure" -> "Smart Proxies") появится отображение созданного по умолчанию proxy.
Foreman + Ansible
Установить необходимые плагины:
для работы с Ansible: foreman-plugin-ansible, foreman-proxy-plugin-ansible;
для запуска Ansible playbooks как запланированные задачи: foreman-plugin-remote-execution, foreman-proxy-plugin-remote-execution-ssh
--enable-foreman-proxy-plugin-ansible \
--enable-foreman-plugin-remote-execution \
--enable-foreman-proxy-plugin-remote-execution-ssh
sudo -u foreman-proxy ssh-copy-id -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy <имя_пользователя>@agent1.astra.lan
Проверить работу связки можно запустив Ansible playbook. Запустить Ansible playbook можно несколькими способами (при этом нужно будет указать команду или сценарий для выпонения на удалённой машине):
- Через список узлов (хостов):
- открыть страницу "Узлы" ("Узлы" -> "All Hosts");
- выбрать необходимые узлы;
- нажать "Действия" -> "Scheduled Remote Job";
- Через страницу узла:
- открыть страницу "Узлы" ("Узлы" -> "All Hosts");
- перейти на страницу нужного узла и нажать "Scheduled Remote Job" -> "Run Ansible roles";
- Через список заданий:
- открыть страницу "Шаблоны заданий"
- напротив нужного шаблона нажать "Выполнить"
Роли ansible могут быть импортированы из смарт-прокси. Для этого необходимо:
- перейти на страницу "Ansible roles" ("Настройки" -> "Роли")
- выбрать источник импорта из выпадающего меню справа.
Настройка интеграции ansible и foreman
Для настройки передачи данных из ansible в foreman:
При работе в Astra Linux Common Edition 2.12 (и в любых ОС с отсутствующей версией python2) в настройки ansible (файл /etc/ansible/hosts) добавить директиву:
ansible_python_interpreter: /usr/bin/python3 Например agents: hosts: client.astra.lan: ansible_user: vagrant client2.astra.lan: # ALSE 1.7 ansible_user: vagrant alce.astra.lan: # ALCE 2.12.44 ansible_user: vagrant ansible_python_interpreter: /usr/bin/python3
Иначе при добавлении хоста с помощью ansible (см. ниже) будет возникать ошибка:
"module_stderr": "Shared connection to alce.astra.lan closed.\r\n", "module_stdout": "/bin/sh: /usr/bin/python: Нет такого файла или каталога\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
- В файл /etc/ansible/ansible.cfg:
в секцию [defaults] добавить строки:
bin_ansible_callbacks = True callback_whitelist = foreman
команда для добавления указанных строк:
sudo sed -i "/\[defaults\]/a bin_ansible_callbacks = True\ncallback_whitelist = foreman" /etc/ansible/ansible.cfgДобавить секцию [callback_foreman] следующего вида:
[callback_foreman] url = https://`hostname` ssl_cert = /etc/puppetlabs/puppet/ssl/certs/master.astra.lan.pem ssl_key = /etc/puppetlabs/puppet/ssl/private_keys/master.astra.lan.pem verify_certs = /etc/puppetlabs/puppet/ssl/certs/ca.pem
команда для добавления:
echo "[callback_foreman]Параметры для добавления секции можно скопировать из одноименной секции файла /etc/foreman-proxy/ansible.cfg;
url = https://`hostname`
ssl_cert = /etc/puppetlabs/puppet/ssl/certs/master.astra.lan.pem
ssl_key = /etc/puppetlabs/puppet/ssl/private_keys/master.astra.lan.pem
verify_certs = /etc/puppetlabs/puppet/ssl/certs/ca.pem" | sudo tee -a /etc/ansible/ansible.cfg
В графическом интерфейсе foreman добавить хост, с которого будет приниматься информация: "Администратор" - "Параметры" - закладка "Безопасность и проверка подлинности" - "Trusted hosts":List of hostnames, IPv4, IPv6 addresses or subnets to be trusted in addition to Smart Proxies for access to fact/report importers and ENC output. Имя хоста указать в квадратных скобках (синтаксис списка python). При необходимости указания подсетей использовать формат бесклассовой адресации (Classless Inter-Domain Routing, CIDR), например 10.2.0.0/24;
Для проверки работы выполнить команду:
sudo ansible -m setup localhostПосле выполнения команды в графическом интерфейсе foreman в списке хостов должен появиться новый хост (для команды выше - localhost). Если в команде указать имя клиента, например:sudo ansible -m setup client.example.comто в список хостов добавится хост с указанным именем (для команды выше - client.example.com)
Массовая настройка беспарольного доступа SSH
Автоматическую передачу паролей для подключения клиенту ssh и инструменту передачи ключей ssh-copy-id обеспечивает инструмент sshpass (пакет sshpass). Пакет может быть установлен командой:
Создать файл для хранения паролей:
touch <имя_файла>Запретить чтение файла всем, кроме владельца:
chmod 600 <имя_файла>- Записать в файл пароль, который будет использоваться для подключения;
Команды передачи ключей, приведенные выше, использовать в виде:
sshpass -f <имя_файла> ssh-copy-id -i ~/.ssh/id_rsa <имя_пользователя>@agent1.`hostname -d` -o StrictHostKeyChecking=noилиsudo -u foreman-proxy sshpass -f <имя_файла> ssh-copy-id -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy <имя_пользователя>@agent1.astra.lan -o StrictHostKeyChecking=noгде:
опция -f <имя_файла> указывает из какого файла брать пароль для подключения;
опция -o StrictHostKeyChecking=no отключает запрос подтверждения подлинности сервера и разрешает автоматическую регистрацию сервера как известного;
Другие возможности инструмента sshpass см. в справке:
Пример использования
См. Настройки служб времени с помощью Ansible и Puppet.
Возможные проблемы
Проблема:
При запуске сервиса foreman появляется ошибка:
Решение:
Отредактировать файл /etc/postgresql/*/main/postgresql.conf, изменив значение параметра listen_addresses на '*'.
После этого выполнить команду:
Проблема:
Не стартует puppetserver.service. В /var/log/syslog сообщения:
|
Решение:
На сервере должно быть установлено не менее 3ГБ оперативной памяти (как указано в инструкции).