Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство)

в 8:21, , рубрики: devops, foreman, puppet, ssh keys, системное администрирование

image
Доброго времени суток, жителям !

Когда число управляемых серверов достигает нескольких десятков, а то и сотен, приходится искать решение по автоматической настройке и управлению таким парком. Тут на помощь приходит Puppet. Почему Puppet? Puppet кроссплатформенный, имеет богатое сообщество, имеет множество готовых модулей (4800+), имеет Enterprise версии. Все эти плюсы не дают усомнится в мощи данного продукта. Но управлять из консоли таким «комбайном» не так просто. Потому для удобного управления и настройки Puppet был разработан Foreman. Далее установка и настройка этой связки на примере задачи управления SSH-ключами.

Требования:

  • чистый сервер для puppet-мастер;
  • команды на сервере puppet-мастер выполняются как root;
  • команды на серверах puppet-агент выполняются через sudo.

Используемое ПО:

  • ОС Ubuntu 14.04.5 LTS;
  • Puppet 3.8.7;
  • Foreman 1.11.4.

Цели:

  • получить удобный способ автоматизированного управления инфраструктурой сети;
  • получить удобный способ управления ssh-ключами.

Примечание.
Все скриншоты и кусок конфигурации скрыты спойлерами. Для лучшего понимания, где выполняются команды, перед каждой командой добавил тип сервера (master или agent).

1. Установка Foreman + Puppet на puppet-мастера

Добавим репозиторий установщика Foreman/Puppet и установим его в систему:

master ~ $ apt-get -y install ca-certificates
master ~ $ cd ~ && wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
master ~ $ dpkg -i puppetlabs-release-trusty.deb
master ~ $ sh -c 'echo "deb http://deb.theforeman.org/ trusty 1.11" > /etc/apt/sources.list.d/foreman.list'
master ~ $ sh -c 'echo "deb http://deb.theforeman.org/ plugins 1.11" >> /etc/apt/sources.list.d/foreman.list'
master ~ $ cd ~ && wget -q http://deb.theforeman.org/pubkey.gpg -O- | apt-key add -
master ~ $ apt-get update && apt-get -y install foreman-installer

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

master ~ $ foreman-installer

Результат должен быть похож на следующий:

Результат установки Foreman
Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 2

Ссылка вида puppet.<domain.com> и логином с паролем нам пригодятся дальше.

Настроим конфигурацию для просмотра в Foreman различий изменений файлов:

master ~ $ nano /etc/puppet/puppet.conf
> show_diff = true

Откроем в браузере ссылку, рекомендованную в предыдущем шаге: puppet.<domain.com>
И введём логин: admin и пароль, который мы видели в консоли после установки.

Скриншот формы авторизации

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 3

Если авторизация прошла успешно, значит Foreman установлен и работает должным образом. Теперь можно переходить к следующей главе.

2. Настройка Foreman

По умолчанию Foreman использует свой SSL-сертификат, сгенерированный Puppet и ваш браузер не будет принимать его. Вы можете добавить корневой сертификат (/var/lib/puppet/ssl/certs/ca.pem) в свой браузер, чтобы исчезли предупреждения небезопасного соединения (для Chromium добавлять сюда: Настройки/SSL/Центры сертификации).

При первом входе вы увидите страницу Dashboard, где будет показана общая статистика по всем узлам сети. При добавления узлов сети, здесь будет полезная статистическая информация.

Скриншот панели

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 4

При последующих входах вы будете перенаправляться на страницу списка узлов сети.

2.1. Смена пароля

Первым делом необходимо изменить пароль пользователя:

Сменить пароль

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 5

Пароль по умолчанию и так сложный, но лучше сделать свой.

2.2. Добавление модуля на примере NTP

Время должно быть точно установлено на главном сервере puppet-мастер. Для этого необходимо использовать NTP. Если время неверно, puppet-мастер может ошибочно выдавать сертификаты агентов из далекого прошлого или будущего, которые другие узлы будут считать устаревшими.

Иногда, чтобы иметь возможность управлять модулями Puppet через Foreman, необходимо установить модули, разработчиками которых являются не Puppet-Labs, а разработчики сообщества Puppet. Это вытекает из того факта, что Foreman использует HTTP-запросы Restful API для Puppet, но не во всех модулях определено управление с помощью такого API.

Установим модуль saz/ntp на puppet master:

master ~ $ puppet module install saz/ntp

Примечание.
Модуль saz/ntp прекрасно работает на версии Foreman 1.11. Для других версий Foreman, можно использовать модули с сайта forge.puppetlabs.com по поиску ntp.

Вы должны увидеть следующее:

Результат установки saz/ntp

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 6

Сейчас модуль был установлен только для puppet-мастер. Теперь необходимо войти в веб интерфейс и добавить его к Foreman. Перейдите в меню Configure -> Classes и нажмите Import from puppet.<domain.com>:

Configure -> Classes

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 7

В результате вы увидите список доступных классов, отметьте нужные и нажмите Update:

Update

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 8

Для того, чтобы использовать ближние к вам ntp-серверы, перейдем на сайт www.pool.ntp.org. Там в правом блоке выберем нужный нам пул (Африка, Азия и т.д.) и заберём список серверов в буфер обмена.

Далее идём в настройки класса ntp, кликнув по его названию. Переходим во вкладку Smart Class Parameter и ищем в левом списке вкладку server list:

server list

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 9

Отмечаем пункт Override и в Default value по примеру предыдущего значения, добавляем сервера из шага выше. Я добавил такое значение:

["0.asia.pool.ntp.org","1.asia.pool.ntp.org","2.asia.pool.ntp.org","3.asia.pool.ntp.org"]

Нажимаем Submit внизу страницы, тем самым мы переопределили параметр класса.

2.3. Добавление модуля accounts и ssh

На примере предыдущего модуля установим модуль accounts:

master ~ $ puppet module install camptocamp-accounts

Если установка прошла успешно, то вы увидите следующее:

Результат установки accounts

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 10

Установим модуль ssh:

master ~ $ puppet module install saz/ssh

После этого идём в Foreman и импортируем новые классы. Позже, после создания групп узлов сети, мы настроим классы accounts и ssh.

2.4. Добавление модуля mysql и apache

Для объяснения последующих названий групп database и web добавим модули apache и mysql. Добавляем модули по примеру предыдущих. Загрузить их можно командами:

master ~ $ puppet module install puppetlabs-apache
master ~ $ puppet module install puppetlabs-mysql

3. Добавление узлов сети

Чтобы добавить узел сети в Puppet, необходимо установить puppet-агент на этот узел. Для установки puppet-агента скачаем и установим репозиторий puppet-labs:

agent ~ $ cd ~ && wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
agent ~ $ sudo dpkg -i puppetlabs-release-trusty.deb
agent ~ $ sudo apt-get update

Затем установим puppet-агент:

agent ~ $ apt-get -y install puppet

Чтобы запустить Puppet в роли агента, необходимо закомментировать настройки зоны puppet-мастера. Также добавьте конфигурацию для агента, которая установит адрес нашего puppet-мастера. Приведём файл конфигурации /etc/puppet/puppet.conf в вид:

puppet.conf

[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
#templatedir=$confdir/templates

#[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
#ssl_client_header = SSL_CLIENT_S_DN 
#ssl_client_verify_header = SSL_CLIENT_VERIFY

[agent]
server = puppet.domain.com
# где puppet.domain.com - hostname или IP-адрес вашего master-сервера

Заменим значение переменной START с no на yes, чтобы запустить puppet-агент после перезагрузки ОС. А также запустим puppet-агент:

agent ~ $ sed -i s/START=no/START=yes/g /etc/default/puppet
agent ~ $ service puppet start

При небольшой инфраструктуре puppet-агент можно запускать в виде демона. Есть также способ запуска через CRON: docs.puppet.com/puppet/3.6/services_agent_unix.html#running-puppet-agent-as-a-cron-job.

Примечание.
Puppet-агент по умолчанию ищет домен puppet-мастера в своей зоне, если явно не указан параметр server (в файле puppet.conf). Например: server.domain.com будет искать сервер puppet.domain.com. Потому, если вы ещё идёте по инструкции, то у вас всё должно работать.

После этого идём на Foreman в Infrastructure -> Smart Proxies -> Certificates:

Infrastructure -> Smart Proxies -> Certificates

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 11

Там должен появится узел сети, на который мы только что установили puppet-агент. Можно использовать фильтр (вверху слева), чтобы увидеть только неподписанные сертификаты. Чтобы подписать, необходимо нажать кнопку Sign:

Certificates -> Sign

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 12

В течение нескольких минут сервер server.<domain.com> (сервер, на котором мы только что установили агент) появится в списке Hosts -> All hosts.

4. Добавление групп узлов сети

Перейдём в пункт меню Configure -> Host Groups. Нажмём New Host Group. Вкладка Host Group должна получится следующей:

Configure -> Host Groups

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 13

Группа root будет корневой. Она будет родителем всех остальных групп. У ней будет полный доступ ко всему. И в неё будут включены основные классы.

Далее перейдем во вкладку Puppet Classes и добавим необходимые классы нажав на +:

Puppet Classes

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 14

Нажимаем Submit.

Добавим по этому же принципу ещё две группы. Только теперь мы выберем в качестве Parent группу root, потому классы accounts, ntp и ssh наследуются и добавлять их повторно не нужно. Добавим только для группы database класс mysql::server, а для группы web класс apache.

Добавление группы database

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 15

Список всех групп

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 16

5. Добавление узла в группу

Чтобы включить узел в группу, необходимо перейти в его настройки.

Настройки узла сети

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 17

После этого в первой вкладке добавляем группу, как на скриншоте ниже:

Добавление группы к узлу сети

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 18

После этого нажимаем Submit и в течение нескольких минут на узле сети появится mysql. Таким же образом можно присвоить остальным двум серверам группу web:

Список узлов сети с присвоенными группами

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 19

Вся конфигурация распространяется на puppet-агенты автоматически в течение нетокоротого времени.
Если не хочется ждать, то можно на клиентах выполнить команду puppet agent --test и увидеть своими глазами, как создаётся конфигурация.

6. Настройка прав доступа с помощью модуля accounts

Собственно сейчас можно ещё раз посмотреть на схему, которую мы привели в начале и на основе её создать логику.
Перейдём в пункт меню Configure -> Classes. Нажмём на accounts, чтобы перейти в настройки модуля. Из всех настроек нам будут нужны вкладки accounts, ssh keys, users.

Примечание.
Вкладка accounts — в ней содержаться хэши «пользователь сервера -> названия публичных ключей из вкладки ssh keys». Вкладка ssh keys — в ней содержаться хэши «название ключа -> тип и значение». Вкладка users — в ней содержаться пользователи, которых необходимо создать или указать для уже существующих некоторые параметры.

Откроем последнюю вкладку users и установим её как на скриншоте:

users

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 20

Этот параметр настраивает домашний каталог пользователя. Здесь мы задействовали Merge overrides и Merge default параметры, которые позволят объединить конфигурацию для конечного узла сети.

Вкладку ssh keys заполним следующим образом:

ssh keys

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 21

В поле Default value необходимо вписать все публичные ключи аккаунтов, которые будут использоваться во вкладке accounts. Эти публичные ключи пользователей, которые будут иметь доступ на те или иные сервера. Отступ в два пробела перед параметрами type и public обязателен.

Пример того, как выглядит один публичный ключ (остальные добавляются друг за другом ниже):

admin:
  type: ssh-rsa
  public: AAAAB3NzaC1yc2EAAAADAQABAAABAQDXibuyi2MFzERps7mD2J38mhd4phXQlOEZrmui9rDdcYD0XeEnvdRTZPcsMOw6DRT1ERpzbcFehj+G29YxoiXZ541gVjVvsATAqojN3zEkMz5b0AgBNcKDFi9h/qwlK9YDv2trKEcRHQ4kBN332Z6oqdBFerUMys5dvc3RVlE+x2kVmYNmGIlma5twC9w/wRNoD+nUK+3bk+I+Og40f//uFAKFeY4DMoCrdOsHJrPak5nD9vL6a2m/Fe3jfgmpBCcnV3LS2mr+PdRYbtju7nzfu8WT0ugMAUi+dDMRFh3DmfCzXbOi2TPi+mP//L/A19thXffd/QzW7wmAgxlj+km1

Самую верхнюю вкладку accounts заполним следующим образом:

accounts

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 22

Из этого параметра следует: root имеет доступ везде с аккаунта root (аккаунт root — это элемент из вкладки ssh keys), аккаунт dbadmin имеет root-доступ только к серверам из группы database, а пользователь admin есть только у группы web и аккаунт admin может подключаться только под пользователя admin.

На вкладке users добавим пользователя admin в группу www-data.

users

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 23

6.1 Настройка класса ssh

В классе accounts мы настроили ssh-доступ по ключам. Потому для более полной безопасности необходимо запретить доступ по паролю. Делается это с помощью класса ssh. Переходим в его настройки и открываем вкладку Smart Class Parameter. Далее client options приводим к следующему виду:

client options

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 24

Вкладку server options приводим к следующему виду:

server options

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 25

И вкладку storeconfigs enabled заполняем так:

storeconfigs enabled

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 26

В storeconfigs хранятся все факты о клиентах, поэтому вы можете запросить базу данных и получить списки узлов сети, соответствующие определенным критериям. Для большей безопасности мы это отключили.

7. Результаты

В процессе выполнения данного руководства ваша инфраструктура добавленная под управление Puppet станет быстро-конфигурируемой и масштабируемой. А главная цель — управления публичными ssh ключами будет максимально удобной.

Скриншот списка ключей пользователя admin на одной из машин группы root/web:

Список ssh-ключей

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 27

Помните, при настройке класса accounts для параметра ssh keys мы включали Merge overrides и Merge default. Это нужно для того, чтобы в конце для определённого узла сети собирался один структурированный файл с ssh-ключами.

Проверим, действительно ли можно авторизоваться под пользователем “admin” с помощью добавленного ключа:

Проверка ssh-подключения

Установка и настройка Puppet + Foreman на Ubuntu 14.04 (пошаговое руководство) - 28

Если у вас также тест прошёл успешно, то инфраструктура готова и можно постепенно подключать остальные ваши сервера к puppet-мастеру и настраивать другие сервисы через Puppet.

Использованные ресурсы: документация Puppet, документация Foreman.

Автор: rebirther23

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js