| При работе в Astra Linux Special Edition x.7.0 и x.7.1 подключить расширенный репозиторий, для обновлений выпущенный ранее обновления БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2) также подключить компонент расширенного репозитория astra-ce (см. Репозитории Astra Linux Special Edition x.7: структура, особенности подключения и использования). |
|
Puppet — нструмент управления конфигурацией, позволяющий системным администраторам автоматизировать предоставление, настройку и управление серверной инфраструктурой. Требует установки агентского ПО на управляемые компьютеры. Puppet позволяет описывать желаемое состояние систем в виде кода и применяет этот код для настройки серверов, рабочих станций и т.д. Puppet функционирует по принципу взаимодействия двух компонентов: Puppet Server и Puppet Agent. Puppet Server выступает в роли центрального узла, который хранит конфигурации и управляет их распространением. Puppet Agent работает на управляемых узлах и отвечает за применение конфигураций, полученных от сервера.
Основные термины:
Принцип работы Puppet:
Взаимодействие между сервером и агентами осуществляется через 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 необходимо настроить разрешение имён одним из способов:
/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 |
sudo hostnamectl set-hostname master.astra.lan |
и на агенте:
sudo hostnamectl set-hostname agent1.astra.lan |
Если включен межсетевой экран, то на узлах необходимо разрешить коммуникации через порт 8140. Для сетевого экрана ufw:
sudo ufw allow 8140 |
sudo apt update sudo apt install default-jre-headless puppetserver |
Указание пакета в команде установки пакета openjdk-jre-headless необходимо для того, чтобы он обновился из расширенного репозитория если был установлен ранее.
sudo systemctl enable puppetserver sudo systemctl start puppetserver |
active |
После запуска Puppet Server самостоятельно выпустит собственный сертификат и подпишет его. Сертификат сервера может появиться не сразу, а в течении одной минуты. |
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) и более ранних обновлений:
sudo /opt/puppetlabs/bin/puppetserver ca list --all |
Получить общую справку для puppetserver можно выполнив puppetserver --help или puppetserver <имя параметра> --help для конкретного параметра. Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений это
/opt/puppetlabs/bin/puppetserver --help или /opt/puppetlabs/bin/puppetserver <имя параметра> --help.
Шаги инструкции из данного раздела необходимо будет выполнить для каждого агента. |
sudo apt update sudo apt install puppet-agent |
server = master.astra.lan show_diff = true |
show_diff — параметр, указывающий инструменту выводить подробную информацию об изменениях в конфигурации клиента в ходе выполнения манифестов. Параметр применяется при настройке и отладке.Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений в пути каталогов указывается каталог /etc/puppetlabs/puppet вместо /etc/puppet. |
sudo systemctl enable puppet sudo systemctl start puppet |
active |
В Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений используется запуск инструметов Puppet с указанием полного пути до исполняемых файлов: /opt/puppetlabs/bin/puppetserver и /opt/puppetlabs/bin/puppet. Пример:
6.28.0 |
Чтобы упростить дальнейшую работу с инстументом рекомендуется создать ссылки с сокращенными названиями puppetserver и puppet соответственно:
/opt/puppetlabs/bin/puppetserver |
puppet (на сервере и клиентах):sudo ln -s /opt/puppetlabs/bin/puppet /usr/local/bin/puppet |
puppet (на сервере):sudo ln -s /opt/puppetlabs/bin/puppetserver /usr/local/bin/puppetserver |
puppet:
puppet --version |
puppet:
puppet --help |
sudo puppet ssl verify |
sudo puppet config print |
sudo puppet agent --test --noop |
Параметр --noop указывает агенту не применять изменения.
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 мин. |
Successfully signed certificate request for agent1.astra.lan |
agent1.astra.lan.sudo puppet agent --test --waitforcert 60 |
Где --test однократный запрос конфигурации с сервера, --waitforcert 60 ожидание подписания сертификата агента сервером в течении 60 секунд.
После отправленного вручную запроса сертификат так же необходимо подписать на сервере.
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 |
Для проверки правильности работы агента на клиентской машине после подписания сертификата можно выполнить следующие команды на агенте:
Остановить службу:
sudo systemctl stop puppet |
Выполнить тестирование работы службы, в процессе которого служба запросит и получит сертификат:
Info: csr_attributes file loading from /etc/puppetlabs/puppet/csr_attributes.yaml |
Повторно запустить службу:
| sudo systemctl start puppet |
Чтобы получить информацию о нужном сертификате нужно выполнить на сервере или агенте:
puppet config print certname <имя узла> |
puppet agent --configprint certname <имя узла> |
Перевыпуск сертификата агента
sudo rm -rf /var/lib/puppet/ssl/* |
sudo rm -rf /etc/puppetlabs/puppet/ssl/ sudo mkdir /etc/puppetlabs/puppet/ssl/ |
sudo puppetserver ca clean --certname <имя_узла> |
--all вместо указания имени узла.sudo puppet agent -tv |
Где -tv это одноразовый запрос (test) и подробный вывод информации (verbose) соответственно.
Для организации модулей, манифестов и других необходимых для работы файлов Puppet использует систему каталогов.
Для вывода актуальной системной директории Puppet
Ниже приведено описание основных каталогов сервера:
/etc/puppet основной каталог для конфигурации Puppet. Каталог содержит puppet.conf лавный конфигурационный файл Puppet, где задаются параметры работы агента и сервера;/var/lib/puppet/ssl сертификаты, ключи и запросы на сертификаты для всех узлов;/var/log/puppetserver/ и /var/puppet/ журналы Puppet Server и Puppet Agent соответственно;/etc/puppet/code/environments/production/manifests/ Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений в пути каталогов указывается каталог /puppetlabs вместе или дополнительно к /puppet . Пример: |
sudo mkdir /etc/puppet/code/environments/testing/manifests |
[agent] environment = production |
node 'agent1.astra.lan' {
environment = 'testing'
} |
Манифест Puppet по умолчанию /etc/puppet/manifests/site.pp. Файл отсутствует сразу при установке и создается пользователем при настройке Puppet Server. Каталог /etc/puppet/manifests может содержать несколько файлов .pp которые определяются инструментом как единое пространство с инструкциями.
В манифестах для одной группы узлов не должно быть ресурсов одинакового типа с одинаковым названием. |
По умолчанию синхронизация Puppet-агентов с Puppet-сервером происходит каждые 30 минут. При отклонении состояния агентов от заданного в манифестах состояния происходит выполнение заданных в них инструкций.
Чтобы изменить период обновления, нужно указать его в файле агента /etc/puppetlabs/puppet.conf, добавив параметр runinterval=<время> в секундах (900), минутах (15m) или часах (1h).
Можно использовать команду на агенте:
puppet config set runinterval <время_в_секундах> |
Вручную обновить перечень манифестов на агенте :
sudo puppet agent -tv |
Для выполнения отдельного манифеста в целях тестирования выполнить на сервере:
sudo puppet apply <манифест>.pp |
Манифесты Puppet имеют расширение .pp и по умолчанию создаются в каталоге /etc/puppet/code/environments/production/manifests на сервере:
sudo nano /etc/puppet/code/environments/production/manifests/test.pp |
sudo nano /etc/puppetlabs/code/environments/production/manifests/test.pp |
Дополнительно в инструкциях манифеста могут указываться ссылки на сценарии .sh из каталога по умолчанию /etc/puppetlabs/puppet/files. При отсутствии каталога files его необходимо создать на сервере вручную:
sudo mkdir /etc/puppet/files |
sudo mkdir /etc/puppetlabs/puppet/files |
Получить список доступных для манифестов ресурсов на сервере:
puppet resource --types |
Получить описание ресурса на сервере:
puppet describe <название_ресурса> |
Проверить синтаксис манифеста перед его выполнением можно командой на сервере:
puppet parser validate <путь_до_манифеста> |
На клиенте:
Файл не существует |
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', # Группа файла
} |
На клиенте:
Применить тестовый манифест:
sudo puppet apply /etc/puppet/code/environments/production/manifests/test.pp |
или:
sudo puppet agent -tv |
sudo puppet apply /etc/puppetlabs/code/environments/production/manifests/test.pp |
Далее повторно проверить наличие текстового файла и установленного инструмента на клиенте.
Модули Puppet позволяют повторно использовать ранее созданные решения по конфигурации узлов с помощью Puppet. Модуль Puppet представляет собой пакет, который содержит все необходимые файлы, манифесты, шаблоны и данные для достижения определенного состояния операционной системы на клиенте (например, автоматизированная установка и настройка Nginx, Apache, MySQL или других инструментов). Модули Puppet загружаются со стороннего ресурса https://forge.puppet.com/modules — централизованного хранилища готовых модулей. Модули устанавливаются только на сервере. Модули организованы в виде каталогов.
|
На сервере:
sudo puppet module list |
Для поиска и установки готовых сторонних модулей требуется подключение сервера к сети Интернет. Перед установкой модуля следует учитывать его совместимость с версией Puppet. |
puppet module search <ключевое_слово> |
sudo puppet module install <название_модуля> |
sudo puppet module uninstall <название_модуля> |
Подробная справка о работе модулей доступна по команде man puppet-module.
Установка и настройка веб-сервера Apache с помощью модуля puppetlabs-apache:
На сервере:
Notice: Preparing to install into /home/testadmin/.puppetlabs/etc/code/modules ... |
node 'agent1.astra.lan' {
class { 'apache':
default_vhost => true,
mpm_module => 'prefork',
}
} |
puppet apply /etc/puppet/code/environments/production/manifests/site.pp |
puppet apply /etc/puppetlabs/code/environments/production/manifests/site.pp |