Назад | Перейти на главную страницу

Как я могу предварительно подписать марионеточные сертификаты?

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

На сервере (puppetmaster) запустить:

puppetca --generate <NAME>

Затем скопируйте с сервера на клиент следующее:

/var/lib/puppet/ssl/certs/<NAME>.pem
/var/lib/puppet/ssl/certs/ca.pem
/var/lib/puppet/ssl/private_keys/<NAME>.pem

Если вы хотите подписать <NAME> как что-то другое, кроме использования имени хоста:

puppetd --fqdn=<NAME>

И добавьте в /etc/puppet/puppet.conf, если запущен демон

[puppetd]
certname=<NAME>

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

[puppetmasterd]
autosign = true

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

Увидеть ссылка на конфигурацию на вики-странице Puppet.

Другой вариант - использовать такой инструмент, как Capistrano, где вы указываете узел puppetmaster и создаете узлы экземпляра клиента, а в задаче:

  • Создайте узел экземпляра, скажем, с помощью API EC2 с Ruby.
  • Запустите puppetd на экземпляре, подключившись к серверу.
  • Выполните puppetca --sign для запроса экземпляра (поскольку мы знаем имя экземпляра, как оно было указано в бите создания выше).
  • Снова запустите puppetd на экземпляре, на этот раз успешно подключившись, поскольку сертификат подписан.

Если у вас есть база данных хоста, вы можете использовать функцию автоподписи. В твоем puppet.conf файл в [puppetmasterd], Добавить:

autosign = /path/to/autosign.conf

Затем используйте crontab для создания этого файла. Файл автоподписи - это просто список хостов для автоподписи при первом подключении к puppetmaster. Я использую LDAP для настройки своих марионеточных хостов, поэтому мой cron выглядит так:

* * * * * root /usr/bin/ldapsearch -x '(objectClass=puppetClient)' cn | /bin/grep ^cn | /bin/sed 's!^cn: !!' > /etc/puppet/autosign.conf

Я уверен, что люди, использующие iClassify, смогут написать запрос, чтобы сделать то же самое.

Конечно, вам нужно немного доверять сети. Я использую это на EC2. Мой сервер puppetmaster находится в группе, которая разрешает соединения только из других доверенных групп. Я бы не рекомендовал делать это, если ваш кукловод открыт для Интернета.

На сервере (puppetmaster) запустить:

puppetca --generate <NAME>

Затем скопируйте с сервера на клиент следующее:

/var/lib/puppet/ssl/certs/<NAME>.pem
/var/lib/puppet/ssl/certs/ca.pem
/var/lib/puppet/ssl/private_keys/<NAME>.pem

Если вы хотите использовать что-то другое, кроме имени хоста:

puppetd --fqdn=<NAME>

И добавьте в /etc/puppet/puppet.conf, если запущен демон

[puppetd]
certname=<NAME>