Оглавление |
---|
Информация | ||
---|---|---|
|
ОС ОН Орёл 2.12
Для 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 нет, то добавить её, выполнив следующие команды
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
Предупреждение |
---|
При работе в 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 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, добавив параметры:
Блок кода |
---|
server = master.astra.lan
show_diff = true |
Для коммуникации агент, как и Puppet Server, использует IP-порт 8140. Если включен межсетевой экран, то разрешить коммуникации через этот порт. Для сетевого экрана ufw:
Command |
---|
sudo ufw allow 8140 |
Добавить службу Puppet Agent в автозагрузку и запустить её:
Command |
---|
sudo systemctl enable puppet sudo systemctl start puppet |
Настройка удаленного доступа по протоколу ssh на клиентской машине
Для настройки доступа к клиентской машине по протоколу 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 <имя_файла> 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ГБ оперативной памяти (как указано в инструкции).
Введение
Для управления конфигурациями серверов, их обслуживания на всём жизненном цикле имеет актуальное значение связка работы трёх компонентов: foreman, puppet, ansible.
- Foreman - инструмент, предназначенный для помощи системным администраторам в управлении серверами, обеспечивающий простой способ взаимодействия с системами управления конфигурациями (Ansible, Puppet и др.) для автоматизации задач администрирования и развертывания приложений. Foreman поддерживает WEB-интерфейс, API и CLI, которые можно использовать для предоставления, настройки и мониторинга серверов. Подходит для инфраструктур любых размеров.
- Puppet - инструмент управления конфигурацией, который помогает системным администраторам автоматизировать предоставление, настройку и управление серверной инфраструктурой.
- Ansible - система управления конфигурациями, использующаяся для автоматизации настройки и развертывания программного обеспечения. Позволяет автоматизировать сложные задачи, например, непрерывное развертывание или непрерывное обновление без простоев.
Установка
Puppet
Предварительная настройка
Коммуникация между Puppet Server и Puppet Agent осуществляется по имени хоста. Для правильной работы нужно либо настроить DNS-сервер, либо указать адреса хостов в файлах /etc/hosts на всех хостах.
Укажем для каждой машины hostname. Например, для Puppet Server команда будет иметь следующий вид:
sudo hostnamectl set-hostname master.astra.lan
Осуществим настройку каждой машины через /etс/hosts, добавив в конец файла FQDN строку с указанием IP-адреса Puppet Server (puppet_ip) и его имени хоста (puppet).
sudo echo -e 'puppet_ip\tmaster.astra.lan' >> /etc/hosts
Произведем настройку локалей.
Проверим наличие локали en_US.utf8 выполнив команду
locale -a
При ее отсутствии выполним следующие действия: sudo apt update
sudo apt install debconf
dpkg-reconfigure locales
Выбираем из списка локаль en_US.UTF-8, после установки выполняем перезагрузку.
2.1.2 Установка Puppet Server
Для установки выполним следующие команды:
sudo apt update
sudo apt install puppetserver
Для коммуникации Puppet Server использует 8140 порт. Откроем его:
sudo ufw allow 8140
Запустим Puppet Server:
sudo systemctl start puppetserver
Проверим статус сервиса:
sudo systemctl status puppetserver
● puppetserver.service - puppetserver Service Loaded: loaded (/lib/systemd/system/puppetserver.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2019-09-10 12:35:29 MSK; 49s ago Process: 1968 ExecStart=/opt/puppetlabs/server/apps/puppetserver/bin/puppetserver start (code=exited, status=0/SUCCESS) Main PID: 1975 (java) Tasks: 48 (limit: 4915) CGroup: /system.slice/puppetserver.service └─1975 /usr/bin/java -Xms2g -Xmx2g -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger -Djava.security.egd=file:/dev/urandom -XX:OnOutOfMemoryError=kill -9 %p -cp /
сен 10 12:35:07 puppet systemd[1]: Starting puppetserver Service...
сен 10 12:35:29 puppet systemd[1]: Started puppetserver Service.
При необходимости добавим его в автозагрузку:
sudo systemctl enable puppetserver
2.1.3 Установка Puppet Agent на клиентском компьютере
При установке сервера puppet клиент на компьютере-сервере устанавливается на этом компьютере автоматически.
Для установки агента на клиентском компьютере выполним на компьютере-агенте следующие команды:
sudo apt update
sudo apt-get install puppet-agent
Запустим Puppet Agent и добавим в автозагрузку:
sudo systemctl start puppet
Отредактируем файл /etc/puppetlabs/puppet/puppet.conf, добавив/заменив в секции main параметры:
server = master.astra.lan
show_diff = true
sudo /opt/puppetlabs/bin/puppet agent --test
Info: Downloaded certificate for ca from puppet
Info: Downloaded certificate revocation list for ca from puppet
Info: Creating a new RSA SSL key for agent1.astra.lan
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: Certificate for agent1.astra.lan has not been signed yet
Couldn't fetch certificate from CA server; you might still need to sign this agent's certificate (agent1.astra.lan).
Exiting now because the waitforcert setting is set to 0.
2.1.4 Подписание сертификатов
При первом запуске Puppet Agent отправляет на Puppet Server запрос на подпись сертификата.
Для просмотра списка запросов на подпись сертификата выполним следующую команду:
sudo /opt/puppetlabs/bin/puppetserver ca list
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
Подпишем сертификат:
sudo /opt/puppetlabs/bin/puppetserver ca sign --certname agent1.astra.lan
Successfully signed certificate request for agent1.astra.lan
Проверим работу Puppet Agent после подписания сертификата:
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
2.2 Ansible
Для установки выполним следующие команды:
sudo apt update
sudo apt install ansible
Отредактируем файл /etc/ansible/hosts, добавив секцию agents
[agents]
agent1.astra.lan ansible_ssh_host=agent1_server_ip
Ansible использует подключение ssh по ключу, поэтому сгенерируем его:
ssh-keygen -t rsa -b 4096
После создания ключа передадим его на нужные узлы:
ssh-copy-id user@agent1_server_ip
Проверим работу Ansible, выполнив пинг на группу серверов agents:
ansible -m ping agents
agent1.astra.lan | SUCCESS => {
"changed": false,
"ping": "pong"
}
2.3 Foreman
Для установки выполним следующие команды:
sudo apt update
sudo apt install foreman-installer
Запустим установщик:
sudo foreman-installer
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 8140The full log is at /var/log/foreman-installer/foreman.log
Проверим работоспособность foreman-proxy:
sudo curl -k -X GET -H Accept:application/json https://master.astra.lan:8443/features --tlsv1
["httpboot","logs","puppet","puppetca","tftp"]
3. Настройка
3.1 Foreman + Puppet
Откроем в браузере ссылку https://master.astra.lan
В качестве логина и пароля используем initial credentials, которые получили после выполнения установщика.
Перейдем в Infrastructure -> HTTP Proxies и добавим наш прокси:
Нажмем на кнопку Submit.
Теперь перейдем в Hosts -> All Hosts, где должен появится список доступных узлов:
Если узлы отсутствуют, то достаточно на нужных узлах выполнить команду sudo /opt/puppetlabs/bin/puppet agent --test
и обновить данную страницу.
3.2 Foreman + Ansible
Установим необходимые плагины:
для работы с Ansible: foreman-plugin-ansible, foreman-proxy-plugin-ansible;
для запуска Ansible playbooks как запланированные задачи: foreman-plugin-remote-execution, foreman-proxy-plugin-remote-execution-ssh
sudo foreman-installer --enable-foreman-plugin-ansible \
--enable-foreman-proxy-plugin-ansible \
--enable-foreman-plugin-remote-execution \
--enable-foreman-proxy-plugin-remote-execution-ssh
Проверим работу связки. Создадим файл cat_hosts.yml со следующим содержимым:
---
- hosts: all
become: true
tasks:
- name: cat /etc/hosts
command: cat /etc/hosts
register: cat_all_hosts
...
Выполним команду:ansible-playbook cat_file.yml -vv
В результате получим следующий вывод:
Using /etc/ansible/ansible.cfg as config file
PLAYBOOK: cat_file.yml *********************************************************
1 plays in cat_file.yml
PLAY [all] *********************************************************************
TASK [setup] *******************************************************************
ok: [agent1.astra.lan]
TASK [cat /etc/hosts] **********************************************************
task path: /home/user/cat_file.yml:6
changed: [agent1.astra.lan] => {"changed": true, "cmd": ["cat", "/etc/hosts"], "delta": "0:00:00.002691", "end": "2019-09-16 12:25:29.241611", "rc": 0, "start": "2019-09-16 12:25:29.238920", "stderr": "", "stdout": "127.0.0.1\tlocalhost\n127.0.1.1\tastra-orel\n\n172.16.119.182 master.astra.lan\n172.16.119.183 agent1.astra.lan\n\n# The following lines are desirable for IPv6 capable hosts\n::1 localhost ip6-localhost ip6-loopback\nff02::1 ip6-allnodes\nff02::2 ip6-allrouters", "stdout_lines": ["127.0.0.1\tlocalhost", "127.0.1.1\tastra-orel", "", "172.16.119.182 master.astra.lan", "172.16.119.183 agent1.astra.lan", "", "# The following lines are desirable for IPv6 capable hosts", "::1 localhost ip6-localhost ip6-loopback", "ff02::1 ip6-allnodes", "ff02::2 ip6-allrouters"], "warnings": []}
PLAY RECAP *********************************************************************
agent1.astra.lan : ok=2 changed=1 unreachable=0 failed=0
Возможные проблемы
При запуске сервиса 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 на '*'.
После этого выполнить команды:sudo systemctl restart postgresql
sudo systemctl restart foreman