несоответствие сертификата puppet в ec2

несоответствие сертификата puppet в ec2

Я настраиваю puppetmaster (2.7.6) в ec2 с помощью gems (на rhel6) и сталкиваюсь с проблемами с именами сертификатов и возможностью master-устройства общаться с самим собой.

Мой puppet.conf выглядит так:

[main]
  logdir = /var/log/puppet
  rundir = /var/run/puppet
  vardir = /var/lib/puppet
  ssldir = $vardir/ssl
  pluginsync = true
  environment = production
  report = true
  certname = master

Когда я запускаю процесс puppetmaster, каталог ssl выглядит так:

ssl/private_keys/master.pem
ssl/crl.pem
ssl/public_keys/master.pem
ssl/ca/ca_crl.pem
ssl/ca/signed/master.pem
ssl/ca/ca_crt.pem
ssl/ca/ca_pub.pem
ssl/ca/ca_key.pem
ssl/certs/ca.pem
ssl/certs/master.pem

У меня есть запись /etc/hosts на компьютере, указывающая имя хоста «puppet» на localhost, чтобы мне не приходилось менять параметр «server».

При запуске агента получаю следующее:

# puppet agent --test
info: Retrieving plugin
err: /File[/var/lib/puppet/lib]: Failed to generate additional resources using 'eval_generate: Server hostname 'puppet' did not match server certificate; expected master
err: /File[/var/lib/puppet/lib]: Could not evaluate: Server hostname 'puppet' did not match server certificate; expected master Could not retrieve file metadata for puppet://puppet/plugins: Server hostname 'puppet' did not match server certificate; expected master
err: Could not retrieve catalog from remote server: Server hostname 'puppet' did not match server certificate; expected master
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run
err: Could not send report: Server hostname 'puppet' did not match server certificate; expected master

Если я укажу certname в качестве сервера (с соответствующей записью hosts), я получу:

# puppet agent --test --server master 
info: Retrieving plugin
err: /File[/var/lib/puppet/lib]: Could not evaluate: Could not retrieve information from environment production source(s) puppet://master/plugins
info: Caching catalog for master
info: Applying configuration version '1321805956'
notice: Finished catalog run in 0.05 seconds

Что является своего рода успехом, эта ошибка источника покусает меня позже, когда я буду применять манифесты. Я попробовал несколько других вариантов с использованием частного имени хоста ec2 и получил неоднозначные результаты.

Я бы хотел избежать установки server = 'x' и использовать dns/hosts для управления тем, во что преобразуется 'puppet', чтобы решить, какой сервер (проще играть с зонами доступности и т. д.)

решение1

Итак, после некоторых исследований я понял это. Puppet 2.7.6 не устанавливает subjectAltNames в сертификате сервера, когда генерирует этот сертификат для мастера (он на самом деле не знает, что он мастер в любой момент).

Есть два способа исправить это:

1. вручную сгенерировать сертификат для мастера

puppet ca generate --dns_alt_names puppet [master-name/uuid/string/etc]

2. установить dns_alt_names в puppet.conf

добавить dns_alt_names = puppetк мастеру (и только к мастеру) перед запуском puppet master или puppet (что приведет к генерации сертификатов)

Теперь с записью /etc/hosts или dns подключение к «puppet» будет работать нормально.

Другая ошибка, связанная с плагинами, заключается в том, что включена синхронизация плагинов, но нет доступных для синхронизации плагинов.

решение2

certname = master

У вас есть certname, установленный как master. Для того, как вы его настраиваете, либо заставьте его работать с puppet, либо используйте файл host, чтобы установить IP-адрес master вместо puppet.

Вы также можете использовать полное доменное имя, например master.example.com или puppet.example.com, чтобы можно было использовать записи DNS без необходимости указывать домен поиска.

решение3

Один из советов по использованию puppet в EC2 — назначить ElasticIP вашему puppetmaster, а затем создать запись DNS для CNAME ElasticIP, а не запись A для IP.

AWS DNS-серверы изменяют свой ответ в зависимости от того, поступил ли запрос из того же региона EC2 или извне. Если запрос CNAME поступает из региона EC2, AWS DNS-серверы ответят внутренним IP CNAME.

Вам следует использовать CNAME в DNS, чтобы при запросе клиентами EC2 Puppet IP-адреса Puppetmaster на DNS-серверах AWS они получали ответ, направляющий их на внутренний IP-адрес puppetmaster, а не на внешний IP-адрес.

Связанный контент