You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 26 Next »


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

  • ОС ОН Орёл 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

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

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


Установка Puppet

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

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

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

sudo hostnamectl set-hostname master.astra.lan
Имя клиента может быть произвольным, для примера далее используется agent1.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)

Настроить разрешение имён сервера и клиента с помощью файла /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

Скопировать ключ для работы с ansible для каждого клиента с сервера (команда выполняется на сервере):

sudo ssh-copy-id -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy.pub root@agent1.astra.lan

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

При первом запуске служба 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

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

sudo apt update
sudo apt install ansible
Отредактировать файл /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@10.0.2.121
Проверить работу Ansible, выполнив пинг на группу серверов agents:
ansible -m ping agents
agent1.astra.lan | SUCCESS => {
"changed": false,
"ping": "pong"
}

Устновка Foreman

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

sudo apt update
sudo apt install foreman-installer
Запустить установщик:

После установки в строке "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

Проверить работу связки. Создать файл cat_hosts.yml со следующим содержимым:

-
    - hosts: all
      become: true
      tasks:
      - name: cat /etc/hosts
        command: cat /etc/hosts
        register: cat_all_hosts
...

Выполнить команду:

ansible-playbook cat_hosts.yml -vv

PLAY [all] *********************************************************************


TASK [setup] *******************************************************************
ok: [agent1.astra.lan]


TASK [cat /etc/hosts] **********************************************************
changed: [agent1.astra.lan]


PLAY RECAP *********************************************************************
agent1.astra.lan : ok=2 changed=1 unreachable=0 failed=0

Вывод команды собщает об отсутствии ошибок.

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

При запуске сервиса 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