Данная статья применима к:
- 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 на всех узлах (этот вариант используется в данной статье):
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
Установка 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 Server запрос на подпись сертификата. Для просмотра списка запросов на подпись сертификата выполнить на сервере следующую команду:
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.Подписать сертификат:
Successfully signed certificate request for agent1.astra.lan
Где --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Выполнить тестирование работы службы, в процессе которого служба запросит и получит сертификат:
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): 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 <имя_узла>
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений:sudo /opt/puppetlabs/bin/puppetserver ca clean --certname <имя_узла>для удаления всех сертификатов применить опцию
--allвместо указания имени узла.
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений:
- на агенте:
- Повторно запросить подпись сертификата на агенте:sudo puppet agent -tv
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений:sudo /opt/puppetlabs/bin/puppet agent -tv
Где -tv это одноразовый запрос (test) и подробный вывод (verbose) соответственно.
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений:
Назначение каталогов Puppet
Для организации модулей, манифестов и других необходимых для работы файлов Puppet использует систему каталогов. Ниже приведено описание основных каталогов сервера:
/etc/puppetосновной каталог для конфигурации Puppet. Каталог содержитpuppet.confлавный конфигурационный файл Puppet, где задаются параметры работы агента и сервера;/etc/puppet/sslсертификаты, ключи и запросы на сертификаты для всех узлов;/etc/puppet/code/environments/manifests/
Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений в пути каталогов указывается каталог /puppetlabs вместо /puppet . Пример: /etc/puppetlabs/code,/etc/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-агенте выполнить:
- Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и более ранних обновлений:sudo /opt/puppetlabs/bin/puppet agent -tv
Для выполнения отдельного манифеста в целях тестирования выполнить на Puppet-сервере:
Манифесты Puppet имеют расширение .pp и по умолчанию создаются в каталоге /etc/puppetlabs/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) и более ранних обновлений:
или:
Далее повторно проверить наличие текстового файла и установленного инструмента на клиенте.