Данная статья связана с
Данная статья применима к:
- 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 самостоятельно выпустит собственный сертификат и подпишет его. Сертификат сервера может появиться не сразу, а в течении одной минуты.
- Проверить наличие сертификата сервера: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) и более ранних обновлений:
sudo /opt/puppetlabs/bin/puppetserver ca list --all
Получить общую справку для puppetserver можно выполнив puppetserver --help или puppetserver <имя параметра> --help для конкретного параметра. Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений это команды
или
Установка Puppet Agent
Шаги инструкции из данного раздела необходимо будет выполнить для каждого агента.
- Для установки выполнить на агентах следующие команды:sudo apt update
sudo apt install puppet-agent - Указать имя сервера в конфигурационном файле:Где/etc/puppet/puppet.conf
server = master.astra.lan show_diff = true
show_diff
— параметр, указывающий инструменту выводить подробную информацию об изменениях в конфигурации клиента в ходе выполнения манифестов. Параметр применяется при настройке и отладке.Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений в пути каталогов указывается каталог /etc/puppetlabs/puppet вместо /etc/puppet.
- Разрешить автоматический запуск службы Puppet Agent и запустить её:sudo systemctl enable puppet
sudo systemctl start puppet - Проверить статус службы: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
. Пример:
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 - Создать сокращенную ссылку для
puppetserver
(на сервере):sudo ln -s /opt/puppetlabs/bin/puppetserver /usr/local/bin/puppetserver
Настройка Puppet Agent
- Узнать версию
puppet:
puppet --version - Получить общую справку для
puppet
:
puppet --help - Проверить настроено ли SSL-соединение между агентом и сервером:sudo puppet ssl verify
- Отобразить общесистемную информацию о настройках агента:sudo puppet config print
- Выполнить однократный тестовый запрос без применения изменений:sudo puppet agent --test --noop
Параметр
--noop
указывает агенту не применять изменения.
Подписание сертификата агента
- При первом запуске клиентская служба 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 мин.
- Подписать сертификат на сервере:sudo puppetserver ca sign --certname <имя_узла>Имя узла в данном примере это
Successfully signed certificate request for agent1.astra.lanagent1.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
Чтобы получить информацию о нужном сертификате нужно выполнить на сервере или агенте:
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений:puppet agent --configprint certname <имя узла>
Перевыпуск сертификата агента
- Удалить текущие сертификаты:
- на агенте:sudo rm -rf /var/lib/puppet/ssl/*
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений выполнить последовательно:sudo rm -rf /etc/puppetlabs/puppet/ssl/
sudo mkdir /etc/puppetlabs/puppet/ssl/
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений выполнить последовательно:
- на сервере: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
— принятый по умолчанию в 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
позволяет группировать и независимо выполнять разные наборы манифестов, т.е. определить окружение конфигураций. Если каталог после установки отсутствует, его необходимо создать: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/ и т. д.
- sudo mkdir -p /etc/puppet/code/environments/testing/manifests
- Определить используемое окружение:
- Либо на агентах указать параметр, определяющий окружение для клиентов в основном конфигурационном файле Puppet на агентах, которым требуется отличное от основного окружение:sudo nano /etc/puppet/puppet.conf
[agent] environment = testing
- Либо на сервере определить параметр через указание его для клиентов с определенными именами узлов в основном манифесте: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
).
Можно использовать команду на агенте:
Вручную обновить перечень манифестов на агенте :
Для выполнения отдельного манифеста в целях тестирования выполнить на сервере:
Манифесты 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
puppet apply <манифест>.pp
или puppet agent -t
без sudo
.Получить список доступных для манифестов ресурсов на сервере:
Получить описание ресурса на сервере:
Проверить синтаксис манифеста перед его выполнением можно командой на сервере:
Пример создания тестового манифеста
На клиенте:
- Проверить отсутствие ранее не созданного текстового файла: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 загружаются со стороннего ресурса https://forge.puppet.com/modules — централизованного хранилища готовых модулей. Модули устанавливаются только на сервере.
Puppet использует параметр 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
На сервере:
- Список установленных модулей:sudo puppet module list
Чтобы уточнить перечень модулей, доступных только текущей учётной записи нужно выполнить команду без
sudo
.Для поиска и установки готовых сторонних модулей требуется подключение сервера к сети Интернет. Перед установкой модуля следует учитывать его совместимость с версией Puppet.
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений. Поиск модуля по ключевому слову:puppet module search <ключевое_слово>
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений. Поиск модуля по ключевому слову:
- Установка модуля:sudo puppet module install <название_модуля>
- Удаление модуля:sudo puppet module uninstall <название_модуля>
Подробная справка о работе модулей доступна по команде man puppet-module.
Пример использования модуля
Установка и настройка на агенте веб-сервера Apache с помощью модуля puppetlabs-apache:
На сервере:
- Установить модуль: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:/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:sudo puppet apply /etc/puppet/code/environments/production/manifests/site.pp
- Для Astra Linux Special Edition 1.7 и более ранних обновлений:sudo puppet apply /etc/puppetlabs/code/environments/production/manifests/site.pp
- Для Astra Linux Special Edition 1.8: