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

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

Я настраиваю puppetmaster (2.7.6) в ec2 через gems (на rhel6), и у меня возникают проблемы с именами сертификатов и с тем, чтобы мастер мог разговаривать сам с собой.

мой 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 в поле, чтобы указать имя хоста «марионетки» на localhost, чтобы мне не пришлось менять параметр «сервер».

Когда я запускаю агент, я получаю следующее:

# 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

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

# 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', чтобы решить, какой сервер (проще играть с зонами доступности и т. Д.)

Итак, после некоторого расследования я понял это. 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 к мастеру (и только мастеру) перед запуском мастера марионетки или марионетки (вызывая создание сертификатов)

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

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

certname = master

У вас есть сертификат, установленный как мастер. В зависимости от того, как вы его настраиваете, либо заставьте его работать с марионеткой, либо используйте файл хоста для установки IP-адреса мастера вместо марионетки.

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

Один совет по использованию марионетки в EC2 - назначить ElasticIP своему мастеру марионеток, а затем создать запись DNS для ElasticIP CNAME, а не запись A для IP.

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

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