Гид по технологиям

Foreman: подключение Puppet‑агентов и тестирование

6 min read DevOps Обновлено 08 Nov 2025
Foreman: подключение Puppet‑агентов и тестирование
Foreman: подключение Puppet‑агентов и тестирование

Краткие определения: Foreman — веб‑интерфейс и система управления жизненным циклом серверов. Puppet Agent — клиент, который получает конфигурацию от Puppet Master.

Предварительные требования

  • Foreman, работающий как Puppet Master
  • Доступ root или права sudo на всех хостах
  • Доступ к сети между мастер‑сервером и агентами

Что мы сделаем

  1. Подготовим хосты (FQDN, /etc/hosts)
  2. Установим и настроим Puppet Agent
  3. Подпишем запросы на сертификаты на Puppet Master (Foreman)
  4. Тестируем развертывание 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 на Ubuntu: окно терминала с установкой пакета и выводом статуса

Установка 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

Агент должен начать связываться с мастером и отправить запрос на подпись сертификата.

Установка Puppet Agent на CentOS: терминал с логами установки и статусом сервиса


Шаг 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”.

Скриншот меню Smart Proxies в Foreman: список прокси и кнопки управления сертификатами

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

Подпись сертификата через интерфейс Foreman: кнопка Sign рядом с именем клиента

Проверьте, что хост появился в списке Hosts -> All Hosts.

Пример: информация об Ubuntu агенте в списке хостов.

Информация об Ubuntu Puppet Agent в Foreman: карточка хоста с IP, статусом и классами


Шаг 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 в списке.

Список модуля Nginx в Foreman: доступные классы и параметры

Назначение классов хосту‑агенту

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

Вкладка Puppet Classes: добавление классов nginx и ntp к хосту клиента

Дополнительно: кнопку “YAML” в карточке хоста можно использовать, чтобы увидеть активные классы и их параметры в сыром виде.

Принудительное применение конфигурации и проверка

На агенте выполните принудительный запуск агента:

sudo /opt/puppetlabs/bin/puppet agent --test

Ожидаемый результат: агент получает каталог, применяет ресурсы и сообщает о состоянии.

Вывод выполнения puppet agent --test с применением классов и ресурсов

Проверьте, что nginx слушает HTTP порт (80) и что ntp работает:

netstat -plntu

Проверьте доступность веб‑страницы на агенте:

curl client.hakase-labs.io

Результат curl: HTML‑ответ nginx с заголовком по умолчанию

Проверьте конфигурацию ntp, управляемую Puppet:

cat /etc/ntp.conf

Файл /etc/ntp.conf, сгенерированный модулем ntp и отображающий серверы и параметры


Проверка и критерии приёмки

Критерии приёмки для успешного подключения 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.

Отладка и типичные проблемы

  1. Агент не отправляет CSR (запрос сертификата):

    • Проверьте сетевую связность до мастера (telnet server 8140).
    • Убедитесь, что в puppet.conf указан правильный server и certname.
    • Посмотрите логи агента: /var/log/puppetlabs/puppet/puppet.log
  2. CSR в состоянии pending, но не появляется в списке мастера:

    • На мастере выполните sudo /opt/puppetlabs/bin/puppetserver ca list –all
    • Проверьте, нет ли дублей certname в каталоге /etc/puppetlabs/puppet/ssl
  3. Подпись отклоняется или сертификат конфликтует:

    • Удалите старые сертификаты с помощью puppetserver ca clean –certname и затем подпишите повторно.
  4. Классы не применяются на агенте:

    • Убедитесь, что классы импортированы в 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.

Краткая методология внедрения на новых хостах

  1. Настроить имя хоста и /etc/hosts или DNS.
  2. Установить puppet‑agent и прописать server/certname.
  3. Сгенерировать CSR (при старте агента).
  4. Подписать CSR на мастере (или через Foreman).
  5. Назначить классы в Foreman и запустить агент.
  6. Проверить сервисы и конфигурации.

Глоссарий (1 строка каждое)

  • FQDN: полностью квалифицированное доменное имя сервера.
  • CSR: Certificate Signing Request — запрос на подпись сертификата.
  • ENC: External Node Classifier — механизм классификации узлов для Puppet.
  • Smart Proxy: компонент Foreman, предоставляющий интеграции (DHCP/DNS/CA).

Ссылки и дополнительные ресурсы


Сводка

  • Подготовьте FQDN и /etc/hosts
  • Установите puppet‑agent (Ubuntu/CentOS) и настройте puppet.conf
  • Подпишите сертификаты через puppetserver или Foreman
  • Импортируйте модули, назначьте классы в Foreman и выполните puppet agent –test

Важно: для продуктивных сред обязательно отключайте autosign и контролируйте доступ к Puppet Master.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Троян Herodotus: как он работает и как защититься
Кибербезопасность

Троян Herodotus: как он работает и как защититься

Включить новое меню «Пуск» в Windows 11
Windows руководство

Включить новое меню «Пуск» в Windows 11

Панель полей сводной таблицы в Excel — руководство
Excel

Панель полей сводной таблицы в Excel — руководство

Включить новое меню «Пуск» в Windows 11
Windows 11

Включить новое меню «Пуск» в Windows 11

Дубликаты Диспетчера задач в Windows 11 — как исправить
Windows

Дубликаты Диспетчера задач в Windows 11 — как исправить

История просмотров Reels в Instagram — как найти
Instagram

История просмотров Reels в Instagram — как найти