Foreman: подключение Puppet‑агентов и тестирование
Краткие определения: Foreman — веб‑интерфейс и система управления жизненным циклом серверов. Puppet Agent — клиент, который получает конфигурацию от Puppet Master.
Предварительные требования
- Foreman, работающий как Puppet Master
- Доступ root или права sudo на всех хостах
- Доступ к сети между мастер‑сервером и агентами
Что мы сделаем
- Подготовим хосты (FQDN, /etc/hosts)
- Установим и настроим Puppet Agent
- Подпишем запросы на сертификаты на Puppet Master (Foreman)
- Тестируем развертывание nginx и ntp на агенте
Важно: примеры в руководстве использую имена сервера server.hakase-labs.io и клиента client.hakase-labs.io — замените их на свои значения.
Шаг 1 — подготовка хостов
Первым делом убедитесь, что у каждого агента настроен корректный FQDN (Fully Qualified Domain Name). Puppet сильно полагается на совпадение имён хостов и сертификатов.
Измените hostname:
hostnamectl set-hostname client.hakase-labs.ioОтредактируйте /etc/hosts и добавьте записи для мастера и агента (замените IP на свои):
vim /etc/hostsПример содержимого:
10.9.9.20 server.hakase-labs.io server
10.9.9.21 client.hakase-labs.io clientПроверьте разрешение имени клиента:
ping $(hostname -f) -c 3Примечание: если ping возвращает другой IP, исправьте /etc/hosts или настройки DNS.
Шаг 2 — установка и настройка Puppet Agent
Ниже показана установка Puppet Agent 5 для Ubuntu 18.04 и CentOS 7. Мы добавим репозиторий Puppet и установим пакет puppet-agent.
Установка Puppet Agent на Ubuntu 18.04
Скачайте пакет репозитория и установите его:
cd /tmp && wget https://apt.puppetlabs.com/puppet5-release-bionic.deb
sudo dpkg -i puppet5-release-bionic.debОбновите индекс и установите агент:
sudo apt update
sudo apt install -y puppet-agent
Установка Puppet Agent на CentOS 7
Скачайте RPM‑репозиторий и установите его:
cd /tmp && wget https://yum.puppet.com/puppet5/puppet5-release-el-7.noarch.rpm
rpm -ivh puppet5-release-el-7.noarch.rpmУстановите агент:
sudo yum install -y puppet-agentПосле установки отредактируйте конфигурацию агента:
cd /etc/puppetlabs/puppet/
vim puppet.confПример раздела [agent] (замените server и certname на свои):
[agent]
server = server.hakase-labs.io
certname = client.hakase-labs.io
runinterval = 180
environment = production
listen = false
pluginsync = true
report = trueСохраните и запустите сервис:
sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=trueИли перезапустите, если требуется:
sudo systemctl restart puppetАгент должен начать связываться с мастером и отправить запрос на подпись сертификата.

Шаг 3 — подпись запросов сертификатов Puppet Agent
После запуска агента на мастере появится ожидающий запрос на сертификат. Подписать его можно из терминала мастера или через Foreman Dashboard.
Подпись через терминал мастера
Проверьте список ожидающих сертификатов:
sudo /opt/puppetlabs/bin/puppetserver ca listПодпишите сертификат для клиента:
sudo /opt/puppetlabs/bin/puppetserver ca sign --certname client.hakase-labs.ioПосле подписи агент сможет установить защищённое соединение и получать каталоги.
Подпись через Foreman Dashboard
В интерфейсе Foreman: откройте меню “Infrastructure”, затем выберите “Smart Proxies”.

На странице прокси откройте выпадающее меню и выберите “Certificates”. В списке pending вы увидите имя клиента — нажмите “Sign”.

Проверьте, что хост появился в списке Hosts -> All Hosts.
Пример: информация об Ubuntu агенте в списке хостов.

Шаг 4 — тестирование: развертывание nginx и ntp через Foreman
Мы установим модули nginx и ntp на Puppet Master (Foreman), импортируем классы и привяжем их к хосту‑агенту, а затем запустим агент вручную для проверки.
Скачивание модуля nginx на Puppet Master
На мастере выполните:
sudo /opt/puppetlabs/bin/puppet module install puppet/nginxИмпорт классов в Foreman
В Foreman: откройте “Configure” -> “Puppet Classes” и нажмите “Import Environment from server.hakase-labs.io”. Отметьте доступные классы модуля и нажмите “Update”.
После успешного импорта вы увидите класс nginx в списке.

Назначение классов хосту‑агенту
В Foreman: Hosts -> All Hosts -> выберите client.hakase-labs.io -> Edit -> вкладка “Puppet Classes”. Добавьте классы nginx и ntp и сохраните.

Дополнительно: кнопку “YAML” в карточке хоста можно использовать, чтобы увидеть активные классы и их параметры в сыром виде.
Принудительное применение конфигурации и проверка
На агенте выполните принудительный запуск агента:
sudo /opt/puppetlabs/bin/puppet agent --testОжидаемый результат: агент получает каталог, применяет ресурсы и сообщает о состоянии.

Проверьте, что nginx слушает HTTP порт (80) и что ntp работает:
netstat -plntuПроверьте доступность веб‑страницы на агенте:
curl client.hakase-labs.io
Проверьте конфигурацию ntp, управляемую Puppet:
cat /etc/ntp.conf
Проверка и критерии приёмки
Критерии приёмки для успешного подключения Puppet‑агента:
- Агент показывает подписанный сертификат на Puppet Master
- В Foreman хост отображается в списке “All Hosts”
- После применения классов nginx и ntp соответствующие сервисы запущены на агенте
- netstat показывает слушающие соответствующие порты (80 для nginx, порт NTP)
- Конфигурационные файлы, управляемые Puppet, совпадают с ожидаемыми шаблонами
Тестовые шаги (acceptance): ручной запуск агента, проверка логов /var/log/puppetlabs/puppet/puppet.log и выводов команд выше.
Рекомендации по безопасности и жёсткая конфигурация
- Не используйте autosign в продуктивной среде; подписывайте сертификаты вручную или через проверенные процессы.
- Включите TLS и контролируйте доступ к портам Puppet Master (обычно 8140). Ограничьте доступ firewall/ACL.
- Используйте distinct certname для каждого хоста и следите за совпадением certname и FQDN.
- Регулярно обновляйте Puppet, Foreman и модули. Планируйте тесты на стенде перед применением в production.
Отладка и типичные проблемы
Агент не отправляет CSR (запрос сертификата):
- Проверьте сетевую связность до мастера (telnet server 8140).
- Убедитесь, что в puppet.conf указан правильный server и certname.
- Посмотрите логи агента: /var/log/puppetlabs/puppet/puppet.log
CSR в состоянии pending, но не появляется в списке мастера:
- На мастере выполните sudo /opt/puppetlabs/bin/puppetserver ca list –all
- Проверьте, нет ли дублей certname в каталоге /etc/puppetlabs/puppet/ssl
Подпись отклоняется или сертификат конфликтует:
- Удалите старые сертификаты с помощью puppetserver ca clean –certname
и затем подпишите повторно.
- Удалите старые сертификаты с помощью puppetserver ca clean –certname
Классы не применяются на агенте:
- Убедитесь, что классы импортированы в Foreman и привязаны к хосту.
- Проверьте environment и runinterval в puppet.conf.
Мини‑runbook для восстановления сертификата:
# На мастере
sudo /opt/puppetlabs/bin/puppetserver ca list --all
sudo /opt/puppetlabs/bin/puppetserver ca clean --certname client.hakase-labs.io
# На агенте
sudo systemctl stop puppet
sudo rm -rf /etc/puppetlabs/puppet/ssl
sudo systemctl start puppet
# На мастере повторите подпись
sudo /opt/puppetlabs/bin/puppetserver ca sign --certname client.hakase-labs.ioАльтернативные подходы и расширения
- Автоподпись (autosign) — удобна в тестовой среде, но опасна в production.
- Использование Foreman Smart Proxy для распределённого управления сертификатами и DHCP/DNS интеграции.
- Dynamic ENC (External Node Classifier) — Foreman выполняет роль ENC, но можно интегрировать с внешними ENC для более сложной логики.
- Контейнеризация Puppet Master/Foreman — подходит для CI/CD и изоляции окружений.
Ментальные модели и эвристики
- Модель «master ← catalog ← agent»: мастер генерирует каталог, агент запрашивает и применяет его.
- Привязка по именам: certname должен совпадать с тем, как Foreman/мастер ожидают увидеть хост. Несоответствие приводит к проблемам аутентификации.
- Разделение ответственности: Foreman — UI и ENC, Puppet Master — генерация каталогов и CA.
Роли и чек‑листы
Администратор Foreman:
- Проверить доступность Foreman UI
- Импортировать классы после установки модулей
- Подписывать сертификаты или настроить процесс подписи
Оператор/DevOps на агенте:
- Настроить FQDN и /etc/hosts
- Установить puppet‑agent и настроить puppet.conf
- Запустить агент и предоставить CSR администратору
Набор приёмочных тестов
- После установки запуск puppet agent –test возвращает успех (exit 0) и сообщает об изменениях или отсутствии изменений.
- netstat показывает nginx на 0.0.0.0:80; curl возвращает HTML.
- /etc/ntp.conf содержит строки, ожидаемые от модуля ntp.
Краткая методология внедрения на новых хостах
- Настроить имя хоста и /etc/hosts или DNS.
- Установить puppet‑agent и прописать server/certname.
- Сгенерировать CSR (при старте агента).
- Подписать CSR на мастере (или через Foreman).
- Назначить классы в Foreman и запустить агент.
- Проверить сервисы и конфигурации.
Глоссарий (1 строка каждое)
- FQDN: полностью квалифицированное доменное имя сервера.
- CSR: Certificate Signing Request — запрос на подпись сертификата.
- ENC: External Node Classifier — механизм классификации узлов для Puppet.
- Smart Proxy: компонент Foreman, предоставляющий интеграции (DHCP/DNS/CA).
Ссылки и дополнительные ресурсы
- Официальная документация Foreman: https://theforeman.org/manuals/
Сводка
- Подготовьте FQDN и /etc/hosts
- Установите puppet‑agent (Ubuntu/CentOS) и настройте puppet.conf
- Подпишите сертификаты через puppetserver или Foreman
- Импортируйте модули, назначьте классы в Foreman и выполните puppet agent –test
Важно: для продуктивных сред обязательно отключайте autosign и контролируйте доступ к Puppet Master.
Похожие материалы
Троян Herodotus: как он работает и как защититься
Включить новое меню «Пуск» в Windows 11
Панель полей сводной таблицы в Excel — руководство
Включить новое меню «Пуск» в Windows 11
Дубликаты Диспетчера задач в Windows 11 — как исправить