Подходит ли Puppet или Chef для управления очень простой конфигурацией сервера в мультитенантной среде?

9

Это относится к мультитенантным средам, таким как небольшая хостинговая компания.

Является ли Puppet (или аналогичная) подходящей технологией для обеспечения базовых, но критических изменений массы? Например:

  • Обновление преобразователей DNS (resolv.conf)
  • Настройка ключей SSH
  • Обновление конфигурации NTP
  • Конфигурирование snmpd
  • Развертывание сценариев мониторинга, таких как расширения SNMP Perl или сценарии Nagios

Мои опасения связаны с безопасностью и инвазивностью:

  1. Я не хочу, чтобы какой-либо сервер мог видеть любую конфигурацию, которую он не должен
  2. Я обеспокоен тем, что хозяин Puppet может быть уязвим для атаки на взломанный сервер
  3. Я не хочу, чтобы Puppet вносил какие-либо изменения, которые он не должен делать, или отменял любые ручные изменения, сделанные на сервере.

Я должен предупредить об этом, сказав, что я никогда не использовал Puppet в производстве, только быстро пробежался по тестовой лаборатории, так что возможно я думаю об этом неправильно!

SimonJGreen
источник

Ответы:

6

Попробуйте Ansible (ansible.cc). Может быть, это для вас. На ваших клиентах не работает агент. Это растет очень быстро.

Еще одна очень хорошая альтернатива - Salt Stack.

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

Афсин Топарлак
источник
1
Я знаю, что спросил это давным-давно. Вам будет приятно узнать, что это был ответ. Теперь мы используем Ansible для автоматического развертывания 10 серверов в день и управления тысячами в стиле «забей и забудь». Это было здорово уже больше года.
SimonJGreen
9

Да, это, конечно, возможно. Решать, стоит ли вам делать это или нет, решать только вам.

По поводу ваших запросов:

1) достаточно честно. Трафик основан на ssl, поэтому важно управление сертификатами. Также не доверяйте никаким «фактам», которые предоставляет клиент, относящимся к его личности, так как они могут быть изменены клиентом. Вы хотите положиться на ssl-сертификат клиента, чтобы обеспечить аутентификацию сервера. Честно говоря, если вы правильно используете такие вещи, как hiera, и избегаете огромных блоков имени, основанных на имени, в своем коде (что вам действительно нужно), то все будет в порядке.

2) Не должно быть, если вы оставите это исправленным. Правильно настроенный, есть только маленький вектор для хозяина кукол, который будет атакован клиентами. Тем не менее, последствия, если он скомпрометирован, велики, поэтому позаботьтесь о его блокировке.

3) Это действительно проблема тестирования и развертывания. Если у вас есть надежный кукольный код, он не испортит ваши файлы. Это займет немного времени, чтобы разобраться, но для основы (как вам нужно) не долго.

Sirex
источник
4

Является ли Puppet (или аналогичная) подходящей технологией для обеспечения базовых, но критических изменений массы?

Да, это можно использовать таким образом. Я использую это для поддержки систем внешних клиентов.

Я не хочу, чтобы какой-либо сервер мог видеть любую конфигурацию, которую он не должен

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

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

Я не хочу, чтобы Puppet вносил какие-либо изменения, которые он не должен делать, или отменял любые ручные изменения, сделанные на сервере.

Существует несколько разных подходов к разрешению локальных изменений.

Один метод, который я часто использую, приведен ниже. В основном, если вы передаете список a source, то кукольный пробует каждый элемент в списке. Поэтому я добавляю первый элемент в списке, чтобы он указывал на локальный файл.

  file { '/etc/ssh/sshd_config':
    ensure => present,
    source => ["/etc/ssh/sshd_config_local",
               "puppet:///modules/ssh/$ssh_config_file"],
    ...
  }

Другой вариант - использовать символические ссылки. Если кто-то хочет использовать марионеточную версию, он ссылается на марионеточную версию файла. Если они хотят поддерживать свои настройки локально, они не создают символическую ссылку.

  file { '/etc/ssh/sshd_config_puppet':
    ensure => present,
    source => "puppet:///modules/ssh/$ssh_config_file",
    ...
  }

Другая возможность - использовать augeas для внесения изменений на уровне строк вместо изменения целых файлов. Будьте очень консервативны в том, что вы меняете.

Zoredache
источник
1

3> В Puppet и других подобных инструментах нет автоматической отмены действий. Вы должны написать явный код для отмены. Кроме того, вы можете исследовать функциональность среды Puppet, создать лабораторию тестирования, где тестируется новый код (может быть виртуальные машины), и использовать проверку кода.

Не сейчас
источник
Не совсем верно. Chef создает резервную копию любого файла, в который он вносит изменения /var/lib/chefпо умолчанию (если ресурс не настроен так, чтобы не оставлять резервных копий, например, для конфиденциальных данных), а с помощью средства docформатирования вы видите diff на выходе терминала.
Мацей Пастернацкий
Ну, да, Puppet может сделать несколько резервных копий тоже. Но как узнать, какую резервную копию восстановить? Вам бы пришлось написать какой-нибудь код Chef / Puppet или внешний скрипт для выполнения этого действия? Как насчет нефайловых ресурсов, таких как возврат к предыдущему пакету с определенной версией? Как насчет услуг? Если у вас есть код с надписью «обеспечить работу» и вы хотите изменить его, вам придется изменить код на «обеспечить остановку».
Не сейчас,
Идея состоит в том, что запуск управления конфигурацией является односторонним. Не поддерживается поддерживаемая процедура отката или полностью работающий «пробный запуск» (в Chef есть режим Whyrun, который является только проверкой на предмет предположения / исправности, а не полной имитацией (см. Blog.afistfulofservers.net/post/2012/12/21/ … Для более подробного объяснения.) Вы не можете изменить пароль пользователя и т. Д. Вот почему я написал «не полностью верно» - нет поддерживаемого отката, но есть сеть безопасности / отладки, которая позволяет просматривать резервные копии, если что-то идет не так, и вам нужно взглянуть. Ничего более, но все же полезно.
Мацей Пастернацкий
И получается, что я неправильно прочитал ваш комментарий - это правда, что автоматической отмены не существует, и вам нужно написать явный (и, скорее всего, ошибочный) код, если вы пытались его автоматизировать. Я не могу отредактировать свой исходный комментарий, поскольку на него был дан ответ - я думал о восстановлении после аварии, а не об автоматическом откате. Если вы хотите увидеть автоматический откат, взгляните на nixos.org , кстати.
Мацей Пастернацкий
1

Я не хочу, чтобы Puppet вносил какие-либо изменения, которые он не должен делать, или отменял любые ручные изменения, сделанные на сервере.

Для файлов конфигурации, которые создаются с использованием типа файла Puppets, это может быть достигнуто установкой:

replace => false,

Я использую это для генерации некоторых конфигурационных файлов при первом развертывании приложения на сервере, но тогда любые изменения в этом конфигурационном файле не будут перезаписаны Puppet.

Однако это идет вразрез с философией Puppet - быть идемпотентным сценарием развертывания.

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

Danack
источник
0

Puppet лучше всего работает на многих серверах с одинаковой конфигурацией. Например, вы пишете все настройки общего веб-сервера, предоставленные вашей компанией, а затем создаете N экземпляров этого сервера. Впоследствии внесение изменений во все экземпляры одновременно (например, вы обнаружите, что необходимо изменить AllowOverride для всех виртуальных хостов apache) будет действительно легким. Вы также сможете хранить всю информацию о конфигурации в одном месте и держать ее под контролем версий. В идеальном случае вы сможете обработать аппаратный сбой, выбрасывая сломанный хост, заменяя его новым, устанавливая то же имя хоста и подписывая необходимый сертификат. Все остальное может сделать Puppet.

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

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

skarap
источник