Данная статья связана с
Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8)
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
- Astra Linux Special Edition РУСБ.10015-17
- Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
- Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
- Astra Linux Common Edition 2.12.30 и более поздним обновлениям
Аннотация
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 на сервере и на клиенте.
Настройка стенда
Для правильной работы служб Puppet Server и Puppet Agent необходимо настроить разрешение имён одним из способов:
- либо в службе DNS;
- либо указать адреса и имена узлоов в файлах
/etc/hostsна всех узлах (этот вариант используется в данной статье):
В Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений необходимо задать полное имя узла сервера как puppet или добавить псевдоним puppet к полному имени узла. Это необходимо для того, чтобы сервер мог корректно сгенерировать собственный сертификат при установке.
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
и на агенте:
Если включен межсетевой экран, то необходимо разрешить коммуникации через порт 8140. Для сетевого экрана ufw:
Установка Puppet Server
- Для установки выполнить на сервере следующие команды:
sudo apt update
sudo apt install default-jre-headless puppetserver
Указание пакета в команде установки пакета openjdk-jre-headless необходимо для того, чтобы он обновился из расширенного репозитория если был установлен ранее.
- Разрешить автоматический запуск Puppet Server и запусть его:
sudo systemctl enable puppetserver
sudo systemctl start puppetserver
- Проверить статус службы:systemctl is-active 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
Получить общую справку для puppetserver можно выполнив puppetserver --help или puppetserver <имя параметра> --help для конкретного параметра.
Установка Puppet Agent
Шаги инструкции из данного раздела необходимо будет выполнить для каждого агента.
- Указать имя сервера в конфигурационном файле:etc/puppet/puppet.conf
server = master.astra.lan show_diff = trueГде
show_diff— параметр, указывающий инструменту выводить подробную информацию об изменениях в конфигурации клиента в ходе выполнения манифестов. Параметр применяется при настройке и отладке. - Разрешить автоматический запуск службы Puppet Agent и запустить её:
sudo systemctl enable puppet
sudo systemctl start puppet
- Проверить статус службы:systemctl is-active puppet
active
Настройка Puppet Agent
- Узнать версию
puppet:puppet --version - Получить общую справку для
puppet:puppet --help - Проверить настроено ли SSL-соединение между агентом и сервером:puppet ssl verify
- Отобразить информацию о настройках агента:puppet config print
- Выполнить однократный тестовый запрос без применения изменений:puppet agent --test --noop
Параметр
--noopуказывает агенту не применять изменения.
Создание псевдонимов для запуска старых версий Puppet Server и Puppet Agent
В Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений используется запуск инструметов Puppet с указанием полного пути до исполняемых файлов: /opt/puppetlabs/bin/puppetserver и /opt/puppetlabs/bin/puppet. Пример:
6.28.0
Чтобы упростить дальнейшую работу с инстументом рекомендуется создать ссылки с сокращенными названиями puppetserver и puppet соответственно:
- Проверить наличие исполняемого файла на сервере и клиентах в каталоге:ls /opt/puppetlabs/bin/puppetserver
/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 Agent отправит на Puppet Server запрос на подпись сертификата. Для просмотра списка запросов на подпись сертификата выполнить на сервере следующую команду: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:6Cagent1.astra.lan.Запрос на подписание при первой установке может приходить с временной задержкой до 5 мин.
- Подписать сертификат на сервере:puppetserver ca sign --certname agent1.astra.lan
Successfully signed certificate request for agent1.astra.lan- Чтобы вручную отправить запрос выполнить при первом запуске на агенте:sudo puppet agent --test --waitforcert 60
Где
--testоднократный запрос конфигурации с сервера,--waitforcert 60ожидание подписания сертификата агента сервером в течении 60 секунд.После отправленного вручную запроса сертификат так же необходимо подписать на сервере.
- Чтобы вручную отправить запрос выполнить при первом запуске на агенте:
- Повторно проверить перечень сертификатов на сервере: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
Для проверки правильности работы агента на клиентской машине после подписания сертификата можно выполнить следующие команды на агенте:
Остановить службу:
sudo systemctl stop puppetВыполнить тестирование работы службы, в процессе которого служба запросит и получит сертификат:
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Повторно запустить службу:
sudo systemctl start puppet
Чтобы получить информацию о нужном сертификате нужно выполнить на сервере или агенте:
Перевыпуск сертификата агента
- Удалить текущие сертификаты:
- на агенте:sudo rm -rf /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, где задаются параметры работы агента и сервера;/etc/puppet/sslсертификаты, ключи и запросы на сертификаты для всех узлов;/var/log/puppetserver/иvar/puppet/журналы Puppet Server и Puppet Agent соответственно;/etc/puppet/code/environments/manifests/
Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений в пути каталогов указывается каталог /puppetlabs вместе или дополнительно к /puppet . Пример: /etc/puppetlabs/code,/etc/puppetlabs/puppet, var/puppetlabs/puppet/и т.д.
- sudo mkdir /etc/puppet/code/environments/manifests//testing
- Указать параметр, определяющий окружение для клиентов в основном конфигурационном файле Puppet на агентах, которым требуется отличное от основного окружение:sudo nano /etc/puppet/puppet.conf
[agent] environment = production
- Альтернативный способ определить параметр через указание его для клиентов с определенными именами узлов в основном манифесте на сервере:sudo nano /etc/puppet/code/environments/manifests/production/site.pp
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 <время_в_секундах>Вручную обновить перечень манифестов на агенте :
Для выполнения отдельного манифеста в целях тестирования выполнить на сервере:
Манифесты Puppet имеют расширение .pp и по умолчанию создаются в каталоге /etc/puppet/code/environments/production/manifests на сервере:
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений:sudo nano /etc/puppetlabs/code/environments/production/manifests/test.pp
Дополнительно в инструкциях манифеста могут указываться ссылки на сценарии .sh из каталога по умолчанию /etc/puppetlabs/puppet/files. При отсутствии каталога files его необходимо создать на сервере вручную:
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений:sudo mkdir /etc/puppetlabs/puppet/files
Проверить синтаксис манифеста перед его выполнением можно командой на сервере:
Пример создания тестового манифеста
На клиенте:
- Проверить отсутствие ранее не созданного текстового файла:test -f /tmp/hello_puppet.txt && echo "Файл существует" || echo "Файл не существует"
Файл не существует - Проверить отсутствие ранее не установленного инструмента, например
tree: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', # Группа файла
}
На клиенте:
Применить тестовый манифест:
или:
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений:sudo puppet apply /etc/puppetlabs/code/environments/production/manifests/test.pp
Далее повторно проверить наличие текстового файла и установленного инструмента на клиенте.
Модули Puppet
Модули Puppet позволяют повторно использовать ранее созданные решения по конфигурированию узлов с помощью Puppet. Модуль Puppet представляет собой пакет, который содержит все необходимые файлы, манифесты, шаблоны и данные для достижения определенного состояния операционной системы на клиенте (например, автоматизированная установка и настройка Nginx, Apache, MySQL или других инструментов). Модули Puppet загружаются со стороннего ресурса и устанавливаются только на сервере. Модули организованы в виде каталогов.
Работа с модулями Puppet
На сервере:
- Список установленных модулей:puppet module list
Для поиска и установки готовых сторонних модулей требуется подключение сервера к сети Интернет. Перед установкой модуля следует учитывать его совместимость с версией Puppet.
- Поиск модуля по ключевому слову:puppet module search <ключевое_слово>
- Установка модуля:puppet module install <название_модуля>
- Удаление модуля:puppet module uninstall <название_модуля>
Подробная справка о работе модулей доступна по команде man puppet-module.
Пример использования модуля
Установка и настройка веб-сервера Apache с помощью модуля puppetlabs-apache:
На сервере:
- Установить модуль: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:/etc/puppetlabs/code/environments/production/manifests/test.pp
node 'agent1.astra.lan' { class { 'apache': default_vhost => true, mpm_module => 'prefork', } } - Применить манифест:puppet apply /etc/puppetlabs/code/environments/production/manifests/site.pp