| Оглавление |
|---|
| Информация | ||
|---|---|---|
| ||
| Предупреждение |
|---|
| При работе в |
| Информация | ||
|---|---|---|
| ||
|
Аннотация
Puppet — нструмент управления конфигурацией, позволяющий системным администраторам автоматизировать предоставление, настройку и управление серверной инфраструктурой. Требует установки агентского ПО на управляемые компьютеры. Puppet позволяет описывать желаемое состояние систем в виде кода и применяет этот код для настройки серверов, рабочих станций и т. д. Puppet функционирует по принципу взаимодействия двух компонентов: Puppet Server и Puppet Agent. Puppet Server выступает в роли центрального узла, который хранит конфигурации и управляет их распространением. Puppet Agent работает на управляемых узлах и отвечает за применение конфигураций, полученных от сервера.
Основные термины:
- Агент (Agent) — компонент Puppet, работающий на управляемых узлах. Агент периодически отправляет запросы на сервер для получения обновлений и отправляет отчеты о состоянии системы после применения изменений.
- Сервер (Server) — центральный компонент Puppet, который хранит и распространяет конфигурации по запросу агентов.
- Манифест (Manifest) — файл с расширением .pp, содержащий описание желаемого состояния системы на декларативном языке Puppet DSL.
- Модуль (Module) — структурированный набор манифестов, файлов и шаблонов для решения конкретной задачи. Существуют готовые модули Puppet.
- Ресурс (Resource) — единица конфигурации в Puppet (например, файл, пакет, служба). Puppet Agent проверяет состояние каждого ресурса перед выполнением действий из манифеста.
Принцип работы Puppet:
- Описание состояния. Администратор описывает желаемое состояние системы в манифесте.
- Распространение конфигурации. После запроса агентов Puppet Server распространяет на них манифесты, содержащие программную конфигурацию операционной системы.
- Применение изменений. Puppet Agent применяет изменения для достижения желаемого состояния операционной системы.
- Проверка соответствия. Puppet Agent периодически проверяет соответствие текущего состояния системы заданному. Если Puppet Agent не может получить обновления от сервера то, по умолчанию, система остаётся в состоянии, актуализированном на момент последнего успешного запроса.
Взаимодействие между сервером и агентами осуществляется через HTTPS (порт 8140) с использованием SSL/TLS. Puppet Server выполняет роль центра сертификации, управляя подписью сертификатов агентов для аутентификации.
Описание стенда
| Параметр | Puppet Server(сервер) | Puppet Agent(агент) |
| Имя узла | master.astra.lan | agent1.astra.lan |
| Статический IP-адрес узла | 10.0.2.120 | 10.0.2.121 |
На стенде отсутствует настроенный DNS-сервер, поэтому для разрешения IP-адресов используются файлы /etc/hosts на сервере и на клиенте.
| Информация |
|---|
| На сервере должно быть установлено не менее 3ГБ оперативной памяти. |
Настройка стенда
Для правильной работы служб Puppet Server и Puppet Agent необходимо настроить разрешение имён одним из способов:
- либо в службе DNS;
- либо указать адреса и имена узлов в файлах
/etc/hostsна всех узлах (этот вариант используется в данной статье):
| Предупреждение |
|---|
В Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений необходимо задать полное имя узла сервера как |
| Блок кода | ||
|---|---|---|
| ||
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
|
| Command |
|---|
sudo hostnamectl set-hostname master.astra.lan |
и на агенте:
| Command |
|---|
sudo hostnamectl set-hostname agent1.astra.lan |
Если включен межсетевой экран, то на узлах необходимо разрешить коммуникации через порт 8140
| Предупреждение |
|---|
| Развертывание службы 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
На стенде отсутствует настроенный 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 apt update
sudo apt install default-jre-headless puppetserverУказание пакета в команде установки пакета openjdk-jre-headless необходимо для того, чтобы он обновился из расширенного репозитория если был установлен ранее.
- Разрешить автоматический запуск Puppet Server и запустить его:
Command sudo systemctl enable puppetserver
sudo systemctl start puppetserver - Проверить статус
- службы:
Command Title systemctl
is-active puppetserver
Установка Puppet Agent на клиентском компьютере
Имя и адрес клиентского компьютера
Настроить статический IP-адрес сервера (далее - 10.0.2.121)
active
Информация После запуска Puppet Server самостоятельно выпустит собственный сертификат и подпишет его. Сертификат сервера может появиться не сразу, а в течении одной минуты.
- Проверить наличие сертификата сервера
- :
Command
Настроить разрешение имён сервера и клиента с помощью файла /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
|
Установка агента
Для установки агента выполнить на компьютере-агенте следующие команды (при этом будет установлен агент и сервер 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 |
|---|
| sudo foreman-rake permissions:reset username=admin password=<новый_пароль> |
| 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 '' |
Title sudo puppetserver ca list --all Signed Certificates:
master.astra.lan (SHA256) D0:9D:AC:79:E4:C0:23:D2:42:EC:B0:1E:A0:5B:BB:EC:D9:B0:14:90:2A:8B:E3:E1:E4:76:E6:6A:BA:9B:86:4B
Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений:
Command sudo /opt/puppetlabs/bin/puppetserver ca list --all
Получить общую справку для puppetserver можно выполнив puppetserver --help или puppetserver <имя параметра> --help для конкретного параметра. Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений это команды
| Command |
|---|
| /opt/puppetlabs/bin/puppetserver --help |
или
| Command |
|---|
| /opt/puppetlabs/bin/puppetserver <имя параметра> --help |
Установка Puppet Agent
| Информация |
|---|
Шаги инструкции из данного раздела необходимо будет выполнить для каждого агента. |
- Для установки выполнить на агентах следующие команды:
Command sudo apt update
sudo apt install puppet-agent - Указать имя сервера в конфигурационном файле:
ГдеБлок кода title /etc/puppet/puppet.conf server = master.astra.lan show_diff = trueshow_diff— параметр, указывающий инструменту выводить подробную информацию об изменениях в конфигурации клиента в ходе выполнения манифестов. Параметр применяется при настройке и отладке.Предупреждение Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений в пути каталогов указывается каталог /etc/puppetlabs/puppet вместо /etc/puppet.
- Разрешить автоматический запуск службы Puppet Agent и запустить её:
Command sudo systemctl enable puppet
sudo systemctl start puppet - Проверить статус службы:
Command Title systemctl is-active puppet active
Создание псевдонимов для запуска старых версий Puppet Server и Puppet Agent
В Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений используется запуск инструментов Puppet с указанием полного пути до исполняемых файлов: /opt/puppetlabs/bin/puppetserver и /opt/puppetlabs/bin/puppet. Пример:
| Command | ||
|---|---|---|
| ||
6.28.0 |
Чтобы упростить дальнейшую работу с инструментом рекомендуется создать ссылки с сокращенными названиями puppetserver и puppet соответственно:
- Проверить наличие исполняемого файла на сервере и клиентах в каталоге:
Command Title ls /opt/puppetlabs/bin/puppetserver /opt/puppetlabs/bin/puppetserver
- Создать сокращенную ссылку для
puppet(на сервере и клиентах):Command sudo ln -s /opt/puppetlabs/bin/puppet /usr/local/bin/puppet
- Создать сокращенную ссылку для
puppetserver(на сервере):Command sudo ln -s /opt/puppetlabs/bin/puppetserver /usr/local/bin/puppetserver
Настройка Puppet Agent
- Узнать версию
puppet:Command puppet --version
- Получить общую справку для
puppet:Command puppet --help
- Проверить настроено ли SSL-соединение между агентом и сервером:
Command sudo puppet ssl verify
- Отобразить общесистемную информацию о настройках агента:
Command sudo puppet config print
- Выполнить однократный тестовый запрос без применения изменений:
Command sudo puppet agent --test --noop
Параметр
--noopуказывает агенту не применять изменения.
Подписание сертификата агента
- При первом запуске клиентская служба Puppet Agent отправит на Puppet Server запрос на подпись сертификата. Для просмотра списка запросов на подпись сертификата выполнить на сервере следующую команду:
В примере выше сервер сообщает, что у него имеется один запрос на подпись сертификата от клиента с именемCommand Title sudo puppetserver ca list Requested Certificates: agent1.astra.lan (SHA256) 9A:FD:EA:3D:2E:41:A5:11:A1:F7:61:6B:2E:E5:95:BD:81:63:5A:66:0D:93:D2:E0:4A:D9:81:E3:73:8F:0B:6C
agent1.astra.lan.Информация Запрос на подписание при первой установке может приходить с временной задержкой до 5 мин.
- Подписать сертификат на сервере:
Имя узла в данном примере этоCommand Title sudo puppetserver ca sign --certname <имя_узла> Successfully signed certificate request for agent1.astra.lan
agent1.astra.lan.- Чтобы вручную отправить запрос выполнить при первом запуске на агенте:
Command sudo puppet agent --test --waitforcert 60
Где
--testоднократный запрос конфигурации с сервера,--waitforcert 60ожидание подписания сертификата агента сервером в течении 60 секунд.
После отправленного вручную запроса сертификат так же необходимо подписать на сервере.
- Чтобы вручную отправить запрос выполнить при первом запуске на агенте:
- Повторно проверить перечень сертификатов на сервере:
Command Title sudo puppetserver ca list --all Signed Certificates:
master.astra.lan (SHA256) D0:9D:AC:79:E4:C0:23:D2:42:EC:B0:1E:A0:5B:BB:EC:D9:B0:14:90:2A:8B:E3:E1:E4:76:E6:6A:BA:9B:86:4B
alt names: ["DNS:puppet", "DNS:master.astra.lan"] authorization extensions: [pp_cli_auth: true]
agent1.astra.lan (SHA256) 9A:FD:EA:3D:2E:41:A5:11:A1:F7:61:6B:2E:E5:95:BD:81:63:5A:66:0D:93:D2:E0:4A:D9:81:E3:73:8F:0B:6C
Для проверки правильности работы агента на клиентской машине после подписания сертификата можно выполнить следующие команды на агенте:
Остановить службу:
Command sudo systemctl stop puppet
Выполнить тестирование работы службы, в процессе которого служба запросит и получит сертификат:
Command Title sudo 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): 9A:FD:EA:3D:2E:41:A5:11:A1:F7:61:6B:2E:E5:95:BD:81:63:5A:66:0D:93:D2:E0:4A:D9:81:E3:73:8F:0B:6C
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
Чтобы получить информацию о нужном сертификате нужно выполнить на сервере или агенте:
| Command |
|---|
puppet config print certname <имя узла> |
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений:
Command puppet agent --configprint certname <имя узла>
Перевыпуск сертификата агента
- Удалить текущие сертификаты:
- на агенте:
Command sudo rm -rf /var/lib/puppet/ssl/*
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений выполнить последовательно:
Command sudo rm -rf /etc/puppetlabs/puppet/ssl/
sudo mkdir /etc/puppetlabs/puppet/ssl/
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений выполнить последовательно:
- на сервере:
для удаления всех сертификатов применить опциюCommand sudo puppetserver ca clean --certname <имя_узла>
--allвместо указания имени узла.
- на агенте:
- Повторно запросить подпись сертификата на агенте:
Command sudo puppet agent -tv
Где
-tvэто одноразовый запрос (test) и подробный вывод информации (verbose) соответственно.
Назначение каталогов Puppet
Для организации размещения модулей, манифестов и других необходимых для работы файлов Puppet использует систему каталогов. Основные каталоги:
/etc/puppet— основной каталог конфигурации Puppet. Каталог содержит файлpuppet.conf— главный конфигурационный файл Puppet, где задаются параметры работы агента и сервера.- /
var/lib/puppet/ssl— принятый по умолчанию в Astra Linux Special Edition 1.8 каталог общесистемных сертификатов, ключей и запросов на сертификаты для всех узлов. В Astra Linux Special Edition 1.7)и более ранних обновлениях используется каталог/etc/puppetlabs/puppet/ssl. ~/.puppet/etc/ssl— приватные ключи узла, необходимые для применения на агентах манипуляций, доступных без прав администратора. Находится в домашнем каталоге учётной записи пользователя, из которой были установлены Puppet Server или Puppet Agent;/var/log/puppetserver и /var/puppet— каталоги журналов Puppet Server и Puppet Agent соответственно;/etc/puppet/code/environments/production/manifests/— каталог для манифестов по умолчанию. Каталог/etc/puppet/code/environmentsпозволяет группировать и независимо выполнять разные наборы манифестов, т.е. определить окружение конфигураций. Если каталог после установки отсутствует, его необходимо создать:Command sudo mkdir -p /etc/puppet/code/environments/production/manifests/
| Предупреждение |
|---|
В Astra Linux Special Edition 1.7 и более ранних обновлений вместо или в дополнение к каталогу /etc/puppet используется каталог /etc/puppetlabs. Например: /etc/puppetlabs/code, /etc/puppetlabs/puppet, /var/puppetlabs/puppet/ и т. д. |
Command sudo mkdir -p /etc/puppet/code/environments/testing/manifests
- Определить используемое окружение:
- Либо на агентах указать параметр, определяющий окружение для клиентов в основном конфигурационном файле Puppet на агентах, которым требуется отличное от основного окружение:
Блок кода title sudo nano /etc/puppet/puppet.conf [agent] environment = testing - Либо на сервере определить параметр через указание его для клиентов с определенными именами узлов в основном манифесте:
Блок кода title sudo nano /etc/puppet/code/environments/production/manifests/site.pp node 'agent1.astra.lan' { environment = 'testing' }
- Либо на агентах указать параметр, определяющий окружение для клиентов в основном конфигурационном файле Puppet на агентах, которым требуется отличное от основного окружение:
Выполнение манифестов
Манифест Puppet по умолчанию /etc/puppet/code/environments/production/manifests/site.pp. Файл отсутствует сразу при установке и создается пользователем при настройке Puppet Server. Каталог /etc/puppet/code/environments/production/manifests/ может содержать несколько файлов .pp которые используются как единое пространство с инструкциями.
| Предупреждение |
|---|
В манифестах для одной группы узлов не должно быть ресурсов одинакового типа с одинаковым названием. |
По умолчанию синхронизация Puppet-агентов с Puppet-сервером происходит каждые 30 минут. При отклонении состояния агентов от заданного в манифестах состояния происходит выполнение заданных в них инструкций.
Чтобы изменить период обновления, нужно указать его в файле агента /etc/puppet/puppet.conf, добавив параметр runinterval=<время> в секундах (900), минутах (15m) или часах (1h).
Можно использовать команду на агенте:
| Command |
|---|
puppet config set runinterval <время_в_секундах> |
Вручную обновить перечень манифестов на агенте :
| Command |
|---|
sudo puppet agent -tv |
Для выполнения отдельного манифеста в целях тестирования выполнить на сервере:
| Command |
|---|
sudo puppet apply <манифест>.pp |
Манифесты Puppet имеют расширение .pp и по умолчанию создаются в каталоге /etc/puppet/code/environments/production/manifests на сервере:
| Command |
|---|
sudo nano /etc/puppet/code/environments/production/manifests/test.pp |
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений:
Command sudo nano /etc/puppetlabs/code/environments/production/manifests/test.pp
Дополнительно в инструкциях манифеста могут указываться ссылки на сценарии .sh из каталога по умолчанию /etc/puppetlabs/puppet/files. При отсутствии /files его необходимо создать на сервере вручную:
| Command |
|---|
sudo mkdir /etc/puppet/files |
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений:
Command sudo mkdir /etc/puppetlabs/puppet/files
| Информация |
|---|
Для задач, которые не требуют административных прав на агенте, манифесты могут выполняться без прав администратора с помощью puppet apply <манифест>.pp или puppet agent -t без sudo. |
Получить список доступных для манифестов ресурсов на сервере:
| Command |
|---|
puppet resource --types |
Получить описание ресурса на сервере:
| Command |
|---|
puppet describe <название_ресурса> |
Проверить синтаксис манифеста перед его выполнением можно командой на сервере:
| Command |
|---|
puppet parser validate <путь_до_манифеста> |
Пример создания тестового манифеста
На клиенте:
- Проверить отсутствие ранее не созданного текстового файла:
Command Title test -f /tmp/hello_puppet.txt && echo "Файл существует" || echo "Файл не существует" Файл не существует
- Проверить отсутствие ранее не установленного инструмента, например
tree:Command Title tree bash: tree: команда не найдена
На сервере:
Создать основной файл манифеста с содержимым:
| Блок кода | ||
|---|---|---|
| ||
# 1. Установка инструмента tree
package { 'tree':
ensure => installed, # Убедиться, что пакет установлен
}
# 2. Создание файла /tmp/hello_puppet.txt с содержимым
file { '/tmp/hello_puppet.txt':
ensure => file, # Убедиться, что это файл
content => "Hello, Puppet!\n", # Содержимое файла
mode => '0644', # Права доступа к файлу
owner => 'root', # Владелец файла
group => 'root', # Группа файла
} |
На клиенте:
Применить тестовый манифест:
| Command |
|---|
sudo puppet apply /etc/puppet/code/environments/production/manifests/test.pp |
или:
| Command |
|---|
sudo puppet agent -tv |
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений:
Command sudo puppet apply /etc/puppetlabs/code/environments/production/manifests/test.pp
Далее повторно проверить наличие текстового файла и установленного инструмента на клиенте.
Модули Puppet
Модули Puppet позволяют повторно использовать ранее созданные решения по конфигурации узлов с помощью Puppet. Модуль Puppet представляет собой пакет, который содержит все необходимые файлы, манифесты, шаблоны и данные для достижения определенного состояния операционной системы на клиенте (например, автоматизированная установка и настройка Nginx, Apache, MySQL или других инструментов). Модули Puppet загружаются со стороннего ресурса https://forge.puppet.com/modules — централизованного хранилища готовых модулей. Модули устанавливаются только на сервере.
Puppet использует параметр modulepath для определения порядка поиска модулей. Этот параметр можно проверить с помощью команды:
| Command |
|---|
sudo puppet config print modulepath |
Puppet при выполнении манифестов будет искать модули в следующем порядке:
- Загруженные модули (
/etc/puppet/code/environments/production/modulesили/opt/puppet/modules). Установленные сторонние модули. Используется для работы с модулями по умолчанию. - Стандартные модули (
/usr/share/puppet/modules). Модули доступные после установки Puppet Server. - Пользовательские модули (
~/.puppet/code/modules). Модули, доступные для конкретной учётной записи, в которой установлен Puppet Server. Их удаление или установка из этой учётной записи не требуют прав администратора. Используется для ограничения доступа к конкретным модулям, создания и отладки собственных модулей или для дополнительного контроля при использовании нескольких окружений (environment).
Если модуль существует в нескольких директориях, Puppet выберет первый найденный (по порядку в modulepath). Внутри модули организованы в виде каталогов.
| Раскрыть | ||
|---|---|---|
| ||
|
Работа с модулями Puppet
На сервере:
- Список установленных модулей:
Command sudo puppet module list
Чтобы уточнить перечень модулей, доступных только текущей учётной записи нужно выполнить команду без
sudo.Предупреждение Для поиска и установки готовых сторонних модулей требуется подключение сервера к сети Интернет. Перед установкой модуля следует учитывать его совместимость с версией Puppet.
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений. Поиск модуля по ключевому слову:
Command puppet module search <ключевое_слово>
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений. Поиск модуля по ключевому слову:
- Установка модуля:
Command sudo puppet module install <название_модуля>
- Удаление модуля:
Command sudo puppet module uninstall <название_модуля>
Подробная справка о работе модулей доступна по команде man puppet-module.
Пример использования модуля
Установка и настройка на агенте веб-сервера Apache с помощью модуля puppetlabs-apache:
На сервере:
- Установить модуль:
Command Title sudo puppet module install puppetlabs-apache Notice: Preparing to install into /home/testadmin/.puppetlabs/etc/code/modules ...
Notice: Created target directory /home/testadmin/.puppetlabs/etc/code/modules
Notice: Downloading from https://forgeapi.puppet.com ...
Notice: Installing -- do not interrupt ...
/home/testadmin/.puppetlabs/etc/code/modules
└─┬ puppetlabs-apache (v12.3.1)
├── puppetlabs-concat (v9.1.0)
└── puppetlabs-stdlib (v9.7.0) - Создать манифест site.pp. В примере манифест предназначен для клиента с именем agent1.astra.lan:
Блок кода title /etc/puppet/code/environments/production/manifests/test.pp node 'agent1.astra.lan' { class { 'apache': default_vhost => true, mpm_module => 'prefork', } } - Для применения манифеста к агенту выполнить команду:
- Для Astra Linux Special Edition 1.8:
Command sudo puppet apply /etc/puppet/code/environments/production/manifests/site.pp
- Для Astra Linux Special Edition 1.7 и более ранних обновлений:
Command sudo puppet apply /etc/puppetlabs/code/environments/production/manifests/site.pp
- Для Astra Linux Special Edition 1.8:
- Через список узлов (хостов):
- открыть страницу "Узлы" ("Узлы" -> "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 сообщения:
puppetserver[10217]: Execution error (Error) at puppetlabs.services.master.master-core/validate-memory-requirements! (master_core.clj:1279).puppetserver[10217]: Not enough available RAM (1 860MB) to safely accommodate the configured JVM heap size of 1 963MB. Puppet Server requires at least 2 159MB of available RAM given this heap size, computed as 1.1 * max heap (-Xmx). Either increase available memory or decrease the configured heap size by reducing the -Xms and -Xmx values in JAVA_ARGS in /etc/sysconfig/puppetserver on EL systems or /etc/default/puppetserver on Debian systems.
Решение:
На сервере должно быть установлено не менее 3ГБ оперативной памяти (как указано в инструкции).
