Содержание

Skip to end of metadata
Go to start of metadata


Данная статья применима к:

  • ОС ОН Орёл 2.12 (начиная с версии 2.12.17)

Введение

Для управления конфигурациями серверов, их обслуживания на всём жизненном цикле имеет актуальное значение связка работы трёх компонентов: foreman, puppet, ansible.

  • Foreman - инструмент, предназначенный для помощи системным администраторам в управлении серверами, обеспечивающий простой способ взаимодействия с системами управления конфигурациями (Ansible, Puppet и др.) для автоматизации задач администрирования и развертывания приложений. Foreman поддерживает WEB-интерфейс, API и CLI, которые можно использовать для предоставления, настройки и мониторинга серверов. Подходит для инфраструктур любых размеров.
  • Puppet - инструмент управления конфигурацией, который помогает системным администраторам автоматизировать предоставление, настройку и управление серверной инфраструктурой.
  • Ansible - система управления конфигурациями, использующаяся для автоматизации настройки и развертывания программного обеспечения. Позволяет автоматизировать сложные задачи, например, непрерывное развертывание или непрерывное обновление без простоев.

Описание стенда

Сервер: 10.0.2.120 master.astra.lan

Клиент: 10.0.2.121 agent1.astra.lan

Далее подразумевается, что на сервере и клиенте используются одинаковые имена пользователей. Если имена разные нужно соответствующим образом изменить команды передачи ключей SSH.

На стенде отсутствует настроенный DNS-сервер, поэтому для разрешения IP-адресов используются файлы /etc/hosts на сервере и на клиенте.

На сервере должно быть установлено не менее 3ГБ оперативной памяти.


Установка Puppet

Настройка сервера

Имя и адрес сервера

Коммуникация между Puppet Server и Puppet Agent осуществляется по имени хоста. Для правильной работы нужно либо настроить DNS-сервер, либо указать адреса хостов в файлах /etc/hosts на всех хостах.
Для сервера используем имя master.astra.lan, и команда назначения имени будет иметь следующий вид (коменда выполняется на сервере):

sudo hostnamectl set-hostname master.astra.lan
Осуществить настройку каждой машины через файл /etс/hosts, для чего внести в файл указание IP-адреса Puppet Server (10.0.2.120) и его имён (master.astra.lan, master и pupet). В итоге файл /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

Подразумевается, что серверу назначен статический IP-адрес 10.0.2.120, а клиенту - 10.0.2.121.

Настройка локалей на сервере.

Проверить наличие локали en_US.utf8 выполнив команду:

locale -a | grep en_US.utf8
Если локали en_US.utf8 нет, то добавить её, выполнив следующие команды
echo "en_US.UTF-8 UTF-8" | sudo tee -a /etc/locale.gen
sudo locale-gen
Или можно выбрать нужные локали, включая локаль en_US.UTF-8 UTF-8 , в интерактивном режиме, выполнив следующие команды:
sudo apt update
sudo dpkg-reconfigure locales

Установка Puppet Server

Для установки выполнить на сервере следующие команды:

sudo apt update
sudo apt install puppetserver python3-psutil python3-requests
Для коммуникации Puppet Server использует 8140 порт. Если включен межсетевой экран, то разрешить коммуникации через этот порт. Для сетевого экрана ufw:
sudo ufw allow 8140
Разрешить автоматический запуск  Puppet Server и запустим его:
sudo systemctl enable puppetserver
sudo systemctl start puppetserver
Проверить статус сервиса:
sudo systemctl status puppetserver

Установка Puppet Agent на клиентском компьютере

Имя и адрес клиентского компьютера

Настроить статический IP-адрес сервера (далее - 10.0.2.121)

Задать имя компьютера:

sudo hostnamectl set-hostname agent1.astra.lan
Настроить разрешение имён сервера и клиента с помощью файла /etc/hosts. Файл /etc/hosts на клиентском компьютере должен иметь примерно такой вид:

127.0.0.1 localhost
10.0.2.121 agent1.astra.lan agent1
10.0.2.120 puppet

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Установка агента

Для установки агента выполнить на компьютере-агенте следующие команды:

sudo apt update
sudo apt install puppet-agent ssh
Отредактировать файл /etc/puppetlabs/puppet/puppet.conf, добавив/заменив в секции main параметры:

server = master.astra.lan
show_diff = true

Добавить службу Puppet Agent в автозагрузку и запустить её:

sudo systemctl enable puppet
sudo systemctl start puppet

Настройка доступа по ssh

На клиентской машине задать пароль root и разрешить root-доступ по ssh (команды выполняются на клиентской машине):

sudo passwd root
sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd

Подписание сертификатов клиента

При первом запуске служба Puppet Agent отправит на Puppet Server запрос на подпись сертификата.

Для просмотра списка запросов на подпись сертификата выполнить на сервере следующую команду:

sudo /opt/puppetlabs/bin/puppetserver ca list

Requested Certificates: agent1.astra.lan (SHA256) F7:D5:E5:AB:AA:86:7F:EF:19:3D:D9:B9:E3:E9:63:DC:AE:31:17:57:67:3D:2B:D7:A5:1C:71:E3:46:E0:A7:1E
В примере выше сервер сообщает, что у него имеется один запрос на подпись сертификата от клиента с именем agent1.astra.lan.

Подписать сертификат:

sudo /opt/puppetlabs/bin/puppetserver ca sign --certname agent1.astra.lan

Successfully signed certificate request for agent1.astra.lan
Для проверки правильности работы агента можно на клиентской машине после подписания сертификата выполнить следующие команды:

  1. Остановить службу

    sudo systemctl stop puppet

  2. Выполнить тестирование работы службы, в процессе которого служба запросит и получит сертификат:

    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): F7:D5:E5:AB:AA:86:7F:EF:19:3D:D9:B9:E3:E9:63:DC:AE:31:17:57:67:3D:2B:D7:A5:1C:71:E3:46:E0:A7:1E
    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



  3. Повторно запустить службу:

    sudo systemctl start puppet

Установка пакетов Ansible и Foreman

Установить пакеты Ansible и Foreman, выполнив на сервере следующие действия:

Загрузить архив с исправленными версиями пакетов Ansible и Foreman по ссылке: https://nas01.astralinux.ru:5001/sharing/VtRvTRsrn

Распаковать полученный архив:

tar xf ansible-and-foreman.tar
Установить пакеты ansible и foreman-installer из репозитория, и пакеты из архива:
sudo apt install ansible foreman-installer
sudo apt install ./*.deb

Настройка /etc/ansible/hosts

Отредактировать файл /etc/ansible/hosts, добавив в файл секцию [agents] (т.е. добавив группу серверов, с названием этой группы agents). В этой группе пока будет один сервер с именем agent1.astra.lan и IP-адресом 10.0.2.121:

echo -e "[agents]\n agent1.astra.lan ansible_ssh_host=10.0.2.121" | sudo tee -a /etc/ansible/hosts
Ansible использует подключение ssh по ключу, поэтому нужно сгенерировать ключ:
ssh-keygen -t rsa -b 4096
И после создания ключа передать его на нужные узлы:
ssh-copy-id $USER@agent1.astra.lan
Подразумевается, что на сервере и клиенте используются одинаковые имена пользователей. Если имена разные нужно соответствующим образом изменить команды передачи ключей SSH.

Проверить работу Ansible, выполнив пинг на группу серверов agents:

ansible -m ping agents
agent1.astra.lan | SUCCESS => {
"changed": false,
"ping": "pong"
}

Базовая настройка Foreman

Запустить установщик:

После установки в строке "Initial credentials are admin / ...." будет указан логин admin и указан автоматически созданный пароль для входа в WEB-интерфейс, его рекомендуется запомнить чтобы использовать для входа в WEB-интерфейс.В дальнейшем пароль возможно изменить с помощью команды:

sudo foreman-rake permissions:reset username=admin password=<новый_пароль>

sudo foreman-installer

Preparing installation Done *
Foreman is running at https://master.astra.lan
Initial credentials are admin / NRLJth9ufmAkTsF5 *
Foreman Proxy is running at https://master.astra.lan:8443 *
Puppetmaster is running at port 8140 The full log is at /var/log/foreman-installer/foreman.log

В строке "Initial credentials are admin / ...." указан логин admin и указан автоматически созданный пароль для входа в WEB-интерфейс, его рекомендуется запомнить чтобы использовать для входа в WEB-интерфейс.


Проверить работоспособность foreman-proxy:

sudo curl -k -X GET -H Accept:application/json https://master.astra.lan:8443/features --tlsv1

["httpboot","logs","puppet","puppetca","tftp"]

Настройка

Foreman + Puppet

Открыть в браузере ссылку https://master.astra.lan (подтвердить согласие на подключение)

В качестве логина и пароля использовать имя admin и автоматически созданный пароль, полученный после выполнения установщика.


Перейти в "Узлы" - "All hosts" ("Hosts" -> "All Hosts" в английском варианте), где должен появится список доступных узлов:

Если узлы отсутствуют, то подождать, пока информация обновится, или на нужных узлах (на клиенте) выполнить команду:

sudo systemctl restart puppet
После чего обновить страницу WEB-интерфейса.

Убедиться, что в  "Инфраструктура" - "Капсулы" ( в английском варианте "Infrastructure" -> "Smart Proxies") имеется отображение созданного по умолчанию proxy. Если proxy не создан, то:

  • Перейти в "Администратор" - "Местоположения" ("Administer" - "Locations");
    • Выбрать Default location;
    • Нажать кнопку "Устранить несоответствия" ("Fix mismatches");
    • Нажать кнопку "Применить" ("Submit");
  • Аналогично "Администратор" - "Организации" ("Administer" - "Organizations");
    • Выбрать Default organization;
    • Нажать кнопку "Устранить несоответствия" ("Fix mismatches");
  • Нажать кнопку "Применить" ("Submit");

После выполнения этих шагов в  "Инфраструктура" - "Капсулы" ( в английском варианте "Infrastructure" -> "Smart Proxies") появится отображение созданного по умолчанию proxy.

Foreman + Ansible

Установить необходимые плагины:

  • для работы с Ansible: foreman-plugin-ansible, foreman-proxy-plugin-ansible;

  • для запуска Ansible playbooks как запланированные задачи: foreman-plugin-remote-execution, foreman-proxy-plugin-remote-execution-ssh

sudo foreman-installer --enable-foreman-plugin-ansible \
--enable-foreman-proxy-plugin-ansible \
--enable-foreman-plugin-remote-execution \
--enable-foreman-proxy-plugin-remote-execution-ssh
Скопировать ключ для работы с ansible для каждого клиента с сервера (команда выполняется на сервере):
sudo ssh-copy-id -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy.pub root@agent1.astra.lan

Проверить работу связки можно запустив Ansible playbook. Запустить Ansible playbook можно несколькими способами:

  1. Через список узлов (хостов):
    1. открыть страницу "Узлы" ("Узлы" -> "All Hosts");
    2. выбрать необходимые узлы;
    3. нажать "Действия" -> "Scheduled Remote Job";
  2. Через страницу узла:
    1. открыть страницу "Узлы" ("Узлы" -> "All Hosts");
    2. перейти на страницу нужного узла и нажать "Scheduled Remote Job" -> "Run Ansible roles";
  3. Через список заданий:
    1. открыть страницу "Шаблоны заданий"
    2. напротив нужного шаблона нажать "Выполнить"

Ansible-роли могут быть импортированы из смарт-прокси. Для этого необходимо:

  1. перейти на страницу "Ansible roles" ("Настройки" -> "Роли")
  2. выбрать источник импорта из выпадающего меню справа.

Возможные проблемы

При запуске сервиса foreman появляется ошибка:

/usr/share/foreman/vendor/ruby/2.3.0/gems/pg-1.1.4/lib/pg.rb:56:in `initialize': could not connect to server: No such file or directory (PG::ConnectionBad)

Для устранения ошибки отредактировать файл /etc/postgresql/9.6/main/postgresql.conf, изменив значение параметра listen_addresses на '*'.

После этого выполнить команду:

sudo systemctl restart postgresql foreman



  • No labels