Оглавление |
---|
Информация | ||
---|---|---|
|
ОС ОН Орёл 2.12 (начиная с версии 2.12.17)
Для Astra Linux Special Edition РУСБ.10015-01 x.7 требуется подключение расширенного репозитория (см. Репозитории Astra Linux Special Edition x.7: структура, особенности подключения и использования). |
Предупреждение |
---|
Развертывание службы Foreman следует выполнять на отдельном сервере, без работающих служб, использующих web-сервер apache2. В частности, не следует применять настоящую инструкция на контроллерах домена 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 на сервере и на клиенте.
Информация |
---|
На сервере должно быть установлено не менее 3ГБ оперативной памяти. |
Установка Puppet
Настройка сервера
Имя и адрес сервера
Коммуникация между службами Puppet Server и Puppet Agent осуществляется по имени хоста, на котором расположена служба. Для правильной работы служб нужно:
- либо настроить разрешение имен в службе DNS;
- либо указать адреса хостов в файлах /etc/hosts на всех хостах (этот вариант используется далее).
Серверу назначается имя master.astra.lan. Команда назначения имени будет иметь следующий вид (команда выполняется на сервере):
Command |
---|
sudo hostnamectl set-hostname master.astra.lan |
На каждом хосте необходимо осуществить настройку разрешения имен через файл /etс/hosts. Для этого внести в файл строку с указанием IP-адреса хоста (10.0.2.120) и его имен (master.astra.lan, master и puppet). В итоге файл /etc/hosts должен выглядеть примерно так:
Блок кода |
---|
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 выполнив команду:
Command |
---|
locale -a | grep en_US.utf8 |
Если региональной настройки en_US.utf8 нет, то добавить
Введение
Для управления конфигурациями серверов, их обслуживания на всём жизненном цикле имеет актуальное значение связка работы трёх компонентов: foreman, puppet, ansible.
- 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 на сервере и на клиенте.
Информация |
---|
На сервере должно быть установлено не менее 3ГБ оперативной памяти. |
Установка Puppet
Настройка сервера
Имя и адрес сервера
Коммуникация между Puppet Server и Puppet Agent осуществляется по имени хоста. Для правильной работы нужно либо настроить DNS-сервер, либо указать адреса хостов в файлах /etc/hosts на всех хостах.
Для сервера используем имя master.astra.lan, и команда назначения имени будет иметь следующий вид (команда выполняется на сервере):
Command |
---|
sudo hostnamectl set-hostname master.astra.lan |
Осуществить настройку каждой машины через файл /etс/hosts, для чего внести в файл указание IP-адреса Puppet Server (10.0.2.120) и его имён (master.astra.lan, master и pupet). В итоге файл /etc/hosts на сервере должен выглядеть примерно так:
Блок кода |
---|
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.
Настройка локалей на сервере.
Проверить наличие локали en_US.utf8 выполнив команду:
Command |
---|
locale -a | grep en_US.utf8 |
Если локали en_US.utf8 нет, то добавить её, выполнив следующие команды
Command |
---|
echo "en_US.UTF-8 UTF-8" | sudo tee -a /etc/locale.gen |
Или можно выбрать нужные локалирегиональные настройки, включая локаль региональную настройку en_US.UTF-8 UTF-8 , в интерактивном режиме, выполнив следующие команды:
Command |
---|
sudo apt update sudo dpkg-reconfigure locales |
Установка Puppet Server
Для установки выполнить на сервере следующие команды:
Command |
---|
sudo apt update |
Для коммуникации Puppet Server использует 8140 порт. Если включен межсетевой экран, то разрешить коммуникации через этот порт. Для сетевого экрана ufw:
Command |
---|
sudo ufw allow 8140 |
Разрешить автоматический запуск Puppet Server и запустим его:
Command |
---|
sudo systemctl enable puppetserver |
Проверить статус сервиса:
Предупреждение |
---|
При работе в Astra Linux Special Edition x.7.0 и x.7.1 подключить расширенный репозиторий, для обновлений выпущенный ранее обновления БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2) также подключить компонент расширенного репозитория astra-ce (см. Репозитории Astra Linux Special Edition x.7: структура, особенности подключения и использования). |
Для установки выполнить на сервере следующие команды:
Command |
---|
sudo apt update |
Указание пакета в команде установки пакета openjdk-11-jre-headless необходимо для того, чтобы он обновился из расширенного репозитория если был установлен ранее.
Для коммуникации Puppet Server использует IP-порт 8140. Если включен межсетевой экран, то разрешить коммуникации через этот порт. Для сетевого экрана ufw:
Command |
---|
sudo ufw allow 8140 |
Разрешить автоматический запуск Puppet Server и запустим его:
Command |
---|
sudo systemctl enable puppetserver |
Проверить статус сервиса:
Command |
---|
systemctl |
Command |
sudo systemctl status puppetserver |
Установка Puppet Agent на клиентском компьютере
Имя и адрес клиентского компьютера
Настроить статический IP-адрес сервера (далее - 10.0.2.121)
Задать имя компьютера:
Command |
---|
sudo hostnamectl set-hostname agent1.astra.lan |
Настроить разрешение имён сервера и клиента с помощью файла /etc/hosts. Файл /etc/hosts на клиентском компьютере должен иметь примерно такой вид:
Блок кода |
---|
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 для удалённого управления агентом):
Command |
---|
sudo apt update |
Отредактировать файл /etc/puppetlabs/puppet/puppet.conf, добавив /заменив в секции main параметры:
Блок кода |
---|
server = master.astra.lan show_diff = true |
Для коммуникации агент, как и Puppet Server, использует IP-порт 8140. Если включен межсетевой экран, то разрешить коммуникации через этот порт. Для сетевого экрана ufw:
Command |
---|
sudo ufw allow 8140 |
Добавить службу Puppet Agent в автозагрузку и запустить её:Добавить службу Puppet Agent в автозагрузку и запустить её:
Command |
---|
sudo systemctl enable puppet sudo systemctl start puppet |
Настройка удаленного доступа по протоколу ssh
На клиентской машине задать пароль root и разрешить root-доступ по ssh (команды выполняются на клиентской машине):
Command |
---|
sudo passwd root |
Подписание сертификатов клиента
При первом запуске служба Puppet Agent отправит на Puppet Server запрос на подпись сертификата.
Для просмотра списка запросов на подпись сертификата выполнить на сервере следующую команду:
Command | ||
---|---|---|
| ||
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 |
В примере выше сервер сообщает, что у него имеется один запрос на подпись сертификата от клиента с именем agent1.astra.lan.
Подписать сертификат:
Command | ||
---|---|---|
| ||
Successfully signed certificate request for agent1.astra.lan |
Для проверки правильности работы агента можно на клиентской машине после подписания сертификата выполнить следующие команды:
Остановить службу
Command |
---|
sudo systemctl stop puppet |
Выполнить тестирование работы службы, в процессе которого служба запросит и получит сертификат:
Command | ||
---|---|---|
| ||
Info: csr_attributes file loading from /etc/puppetlabs/puppet/csr_attributes.yaml |
Повторно запустить службу:
Command |
---|
sudo systemctl start puppet |
Установка пакетов Ansible и Foreman
Установить пакеты Ansible и Foreman, выполнив на сервере следующие действия:
Загрузить архив с исправленными версиями пакетов Ansible и Foreman по ссылке: https://nas01.astralinux.ru:5001/sharing/VtRvTRsrn
Распаковать полученный архив:
Command |
---|
tar xf ansible-and-foreman.tar |
Установить пакеты ansible и foreman-installer из репозитория, и пакеты из архива:
Command |
---|
sudo apt install ansible foreman-installer |
Настройка /etc/ansible/hosts
Отредактировать файл /etc/ansible/hosts, добавив в файл секцию [agents] (т.е. добавив группу серверов, с названием этой группы agents). В этой группе пока будет один сервер с именем agent1.astra.lan и IP-адресом 10.0.2.121:
Command |
---|
echo -e "[agents]\n agent1.astra.lan ansible_ssh_host=10.0.2.121" | sudo tee -a /etc/ansible/hosts |
Ansible использует подключение ssh по ключу, поэтому нужно сгенерировать ключ:
Command |
---|
ssh-keygen -t rsa -b 4096 |
И после создания ключа передать его на нужные узлы:
Command |
---|
ssh-copy-id $USER@agent1.astra.lan |
Подразумевается, что на сервере и клиенте используются одинаковые имена пользователей. Если имена разные нужно соответствующим образом изменить команды передачи ключей SSH.
Проверить работу Ansible, выполнив пинг на группу серверов agents:
Command |
---|
ansible -m ping agents agent1.astra.lan | SUCCESS => { "changed": false, "ping": "pong" } |
Базовая настройка Foreman
Запустить установщик:
После установки в строке "Initial credentials are admin / ...." будет указан логин admin и указан автоматически созданный пароль для входа в WEB-интерфейс, его рекомендуется запомнить чтобы использовать для входа в WEB-интерфейс.В дальнейшем пароль возможно изменить с помощью команды:
Command |
---|
sudo foreman-rake permissions:reset username=admin password=<новый_пароль> |
на клиентской машине
Для настройки доступа к клиентской машине по протоколу ssh:
Создать отдельного пользователя с домашним каталогом:
Command sudo useradd -m <имя_пользователя> опция -m указывает на необходимость создания домашнего каталога. Далее выбранное имя пользователя должно быть указано реестре клиентских машин на сервере (файле /etc/ansible/hosts);
Задать пароль для этого пользователя:
Command sudo passwd <имя_пользователя> Разрешить пользователю выполнять команды с использованием sudo. Это можно сделать создав файл /etc/sudoers.d/<имя_пользователя> с указанием привилегии выполнять любые команды без запроса пароля ALL=NOPASSWD: ALL:
Command echo "<имя_пользователя> ALL=NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/<имя_пользователя>
Информация | ||
---|---|---|
Часто предлагаемый для упрощения вариант использования на клиентской машине пользователя root является нежелательным с точки зрения безопасности. При использовании этого варианта помимо задания пароля для пользователя root необходимо разрешить доступ пользователю root через ssh. Для включения доступа root через ssh в файле /etc/ssh/sshd_config раскомментировать параметр PermitRootLogin, изменить его значение на yes и перезапустить службу SSH (команды выполняются на клиентской машине):
|
Подписание сертификатов клиента
При первом запуске клиентская служба Puppet Agent отправит на Puppet Server запрос на подпись сертификата. Для просмотра списка запросов на подпись сертификата выполнить на сервере следующую команду:
Command | ||
---|---|---|
| ||
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 |
В примере выше сервер сообщает, что у него имеется один запрос на подпись сертификата от клиента с именем agent1.astra.lan.
Подписать сертификат:
Command | ||
---|---|---|
| ||
Successfully signed certificate request for agent1.astra.lan |
Для проверки правильности работы агента можно на клиентской машине после подписания сертификата выполнить следующие команды:
Остановить службу
Command sudo systemctl stop puppet
Выполнить тестирование работы службы, в процессе которого служба запросит и получит сертификат:
Command Title 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Повторно запустить службу:
Command sudo systemctl start puppet
Установка пакетов Ansible и Foreman
Установить пакеты Ansible и Foreman, выполнив на сервере следующие действия:
Установить пакет ansible из репозитория:
Command |
---|
sudo apt install ansible |
Настройка /etc/ansible/hosts
Отредактировать файл /etc/ansible/hosts, добавив в файл секцию [agents] (т.е. добавив группу серверов, с названием этой группы agents). В этой группе пока будет один сервер с именем agent1.astra.lan и IP-адресом 10.0.2.121:
Command |
---|
echo -e "agents:\n hosts:\n agent1.astra.lan:\n ansible_user: <имя_пользователя>" | sudo tee -a /etc/ansible/hosts |
В качестве значения параметра ansible_user вместо <имя_пользователя> должно быть указано имя пользователя, созданного на клиенте для удаленного доступа.
В результате файл /etc/ansible/hosts должен иметь следующий вид (пользователь для удаленного доступа - username):
Блок кода |
---|
agents:
hosts:
agent1.astra.lan:
ansible_user: username |
Предупреждение |
---|
В примере используется YAML-формат файла. Отступы (количество пробелов в начале строки) должны быть соблюдены. Использование символов табуляции не допускается. |
Ansible использует подключение ssh без запроса пароля по ключу, поэтому нужно сгенерировать ключ:
Command |
---|
ssh-keygen -f ~/.ssh/id_rsa -N '' |
Информация |
---|
Ключ должен быть сгенерирован и передан от имени пользователя, от которого будут выполняться команды ansible. Если команды ansible предполагается выполнять от sudo, то генерировать и передавать ключ следует также от sudo (можно сгенерировать и передать ключи для нескольких пользователей ). |
После создания ключа передать его на нужные узлы, подключаясь к ним от имени пользователя, созданного для удаленного доступа:
Command |
---|
ssh-copy-id -i ~/.ssh/id_rsa <имя_пользователя>@agent1.astra.lan |
Проверить работу Ansible, выполнив пинг на группу серверов agents:
Command | ||
---|---|---|
| ||
agent1.astra.lan | SUCCESS => { "changed": false, "ping": "pong" } |
Базовая настройка Foreman
Установить на сервере пакеты:
В случае, если ОС была установлена без графической оболочки, установить пакет shared-mime-info, команда:
Command |
---|
sudo apt install shared-mime-info |
Установить пакет foreman-installer:
Command |
---|
sudo apt install foreman-installer |
Предупреждение |
---|
Перед выполнением дальнейших действий следует проверить, что в файле /etc/debian_version указано значение 9.0, и, если там указано иное значение, заменить его на 9.0. |
Запустить установщик:
Предупреждение | ||
---|---|---|
После установки в строке "Initial credentials are admin / ...." будет указан логин admin и указан автоматически созданный пароль для входа в web-интерфейс, его рекомендуется запомнить чтобы использовать для входа в web-интерфейс.В дальнейшем пароль возможно изменить с помощью команды:
|
Command | ||
---|---|---|
| ||
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 |
Предупреждение |
---|
В строке "Initial credentials are admin / ...." указан логин admin и указан автоматически созданный пароль для входа в web-интерфейс, его рекомендуется запомнить чтобы использовать для входа в web-интерфейс. |
Проверить работоспособность foreman-proxy:
Command | ||
---|---|---|
| ||
["httpboot","logs","puppet","puppetca","tftp"] |
Настройка
Foreman + Puppet
Открыть в браузере ссылку https://master.astra.lan (подтвердить согласие на подключение)
В качестве логина и пароля использовать имя admin и автоматически созданный пароль, полученный после выполнения установщика.
Перейти в "Узлы" - "All hosts" ("Hosts" -> "All Hosts" в английском варианте), где должен появится список доступных узлов:
Если узлы отсутствуют, то подождать, пока информация обновится, или на нужных узлах (на клиенте) выполнить команду:
Command |
---|
sudo systemctl restart puppet |
После чего обновить страницу web-интерфейса.
Убедиться, что в "Инфраструктура" - "Капсулы" ( в английском варианте "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
Command |
---|
sudo foreman-installer --enable-foreman-plugin-ansible \ --enable-foreman-proxy-plugin-ansible \ --enable-foreman-plugin-remote-execution \ --enable-foreman-proxy-plugin-remote-execution-ssh |
Создать и скопировать ключ для работы каждого клиента с сервера (команда выполняется на сервере от имени пользователя foreman-proxy, подключение выполняется от имени пользователя для удаленного доступа):
Command |
---|
sudo -u foreman-proxy ssh-keygen -f ~foreman-proxy/.ssh/id_rsa_foreman_proxy -N '' |
Проверить работу связки можно запустив 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
команда для добавления указанных строк:
Command 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
команда для добавления:
Command echo "[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" | sudo tee -a /etc/ansible/ansible.cfgПараметры для добавления секции можно скопировать из одноименной секции файла /etc/foreman-proxy/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;
Для проверки работы выполнить команду:
Command sudo ansible -m setup localhost После выполнения команды в графическом интерфейсе foreman в списке хостов должен появиться новый хост (для команды выше - localhost). Если в команде указать имя клиента, например:
Command sudo ansible -m setup client.example.com то в список хостов добавится хост с указанным именем (для команды выше - client.example.com)
Массовая настройка беспарольного доступа SSH
Предупреждение |
---|
Далее приводятся примеры команд, выполняющихся без проверки и подтверждения подлинности. Это небезопасно, но может быть необходимо для создания автоматических сценариев массового развертывания и настройки клиентских машин. |
Автоматическую передачу паролей для подключения клиенту ssh и инструменту передачи ключей ssh-copy-id обеспечивает инструмент sshpass (пакет sshpass). Пакет может быть установлен командой:
Command |
---|
sudo apt install sshpass |
Для использования инструмента:
Создать файл для хранения паролей:
Command touch <имя_файла> Запретить чтение файла всем, кроме владельца:
Command chmod 600 <имя_файла> - Записать в файл пароль, который будет использоваться для подключения;
Команды передачи ключей, приведенные выше, использовать в виде:
Command sshpass -f <имя_файла> ssh-copy-id -i ~/.ssh/id_rsa <имя_пользователя>@agent1.`hostname -d` -o StrictHostKeyChecking=no или
Command sudo -u foreman-proxy sshpass -f <имя_файла>
Command | ||
---|---|---|
| ||
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 |
Предупреждение |
---|
В строке "Initial credentials are admin / ...." указан логин admin и указан автоматически созданный пароль для входа в WEB-интерфейс, его рекомендуется запомнить чтобы использовать для входа в WEB-интерфейс. |
Command | ||
---|---|---|
| ||
["httpboot","logs","puppet","puppetca","tftp"] |
Настройка
Foreman + Puppet
Открыть в браузере ссылку https://master.astra.lan (подтвердить согласие на подключение)
В качестве логина и пароля использовать имя admin и автоматически созданный пароль, полученный после выполнения установщика.
Перейти в "Узлы" - "All hosts" ("Hosts" -> "All Hosts" в английском варианте), где должен появится список доступных узлов:Если узлы отсутствуют, то подождать, пока информация обновится, или на нужных узлах (на клиенте) выполнить команду:
Command |
---|
sudo systemctl restart puppet |
После чего обновить страницу WEB-интерфейса.
Убедиться, что в "Инфраструктура" - "Капсулы" ( в английском варианте "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
Command |
---|
sudo foreman-installer --enable-foreman-plugin-ansible \ --enable-foreman-proxy-plugin-ansible \ --enable-foreman-plugin-remote-execution \ --enable-foreman-proxy-plugin-remote-execution-ssh |
Скопировать ключ для работы с ansible для каждого клиента с сервера (команда выполняется на сервере):
ssh-copy-id -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy
<имя_пользователя>@agent1.astra.lan
-o StrictHostKeyChecking=no где:
опция -f <имя_файла> указывает из какого файла брать пароль для подключения;
опция -o StrictHostKeyChecking=no отключает запрос подтверждения подлинности сервера и разрешает автоматическую регистрацию сервера как известного;
Другие возможности инструмента sshpass см. в справке:
Command |
---|
man sshpass |
Пример использования
См. Настройки служб времени с помощью Ansible и Puppet.
Возможные проблемы
Проблема:
При запуске сервиса foreman появляется ошибка:
Информация |
---|
/usr/share/foreman/vendor/ruby/2.3.0/gems/pg-1.1.4/lib/pg.rb:56:in `initialize': could not connect to server: No such file or directory (PG::ConnectionBad) |
Решение:
Отредактировать файл /etc/postgresql/*/main/postgresql.conf, изменив значение параметра listen_addresses на '*'.
После этого выполнить команду:
Command |
---|
sudo systemctl restart postgresql foreman |
Проблема:
Не стартует puppetserver.service. В /var/log/syslog сообщения:
|
Решение:
На сервере должно быть установлено не менее 3ГБ оперативной памяти (как указано в инструкции).
Проверить работу связки можно запустив Ansible playbook. Запустить Ansible playbook можно несколькими способами:
- Через список узлов (хостов):
- открыть страницу "Узлы" ("Узлы" -> "All Hosts");
- выбрать необходимые узлы;
- нажать "Действия" -> "Scheduled Remote Job";
- Через страницу узла:
- открыть страницу "Узлы" ("Узлы" -> "All Hosts");
- перейти на страницу нужного узла и нажать "Scheduled Remote Job" -> "Run Ansible roles";
- Через список заданий:
- открыть страницу "Шаблоны заданий"
- напротив нужного шаблона нажать "Выполнить"
Ansible-роли могут быть импортированы из смарт-прокси. Для этого необходимо:
- перейти на страницу "Ansible roles" ("Настройки" -> "Роли")
- выбрать источник импорта из выпадающего меню справа.
Возможные проблемы
При запуске сервиса foreman появляется ошибка:
Информация |
---|
/usr/share/foreman/vendor/ruby/2.3.0/gems/pg-1.1.4/lib/pg.rb:56:in `initialize': could not connect to server: No such file or directory (PG::ConnectionBad) |
Для устранения ошибки отредактировать файл /etc/postgresql/9.6/main/postgresql.conf, изменив значение параметра listen_addresses на '*'.
После этого выполнить команду: