Начну с того, что я новичок в Puppet, у меня 2 сервера; один называется кукловодом, а другой - марионеточным клиентом. Я установил puppet-3.2.2 и создал базовый файл nodes.pp, файл nodes.pp включает настройки как для puppetmaster, так и для puppetclient. Когда я применяю соответствующий манифест, изменения затрагивают только кукловода, но не клиента. На сервере я вижу следующую ошибку:
[root@puppetmaster puppet]# puppet apply manifests/nodes.pp
hostname: Unknown host
dnsdomainname: Unknown host
hostname: Unknown host
dnsdomainname: Unknown host
hostname: Unknown host
dnsdomainname: Unknown host
Notice: Finished catalog run in 0.71 seconds
[root@puppetmaster puppet]#
Даже если DNS-сервер настроен на /etc/sysconfig/network-scripts/ifcfg-eth0
И в /etc/resolv.conf
. Проверяя журнал кукловода, я вижу следующую ошибку:
[2013-08-08 11:03:00] ERROR OpenSSL::SSL::SSLError: SSL_accept returned=1 errno=0 state=SSLv3 read client certificate A: tlsv1 alert unknown ca
/usr/lib/ruby/site_ruby/1.8/puppet/network/http/webrick.rb:34:in `accept'
/usr/lib/ruby/site_ruby/1.8/puppet/network/http/webrick.rb:34:in `listen'
/usr/lib/ruby/1.8/webrick/server.rb:173:in `call'
/usr/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'
/usr/lib/ruby/1.8/webrick/server.rb:162:in `start'
/usr/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
/usr/lib/ruby/1.8/webrick/server.rb:95:in `start'
/usr/lib/ruby/1.8/webrick/server.rb:92:in `each'
/usr/lib/ruby/1.8/webrick/server.rb:92:in `start'
/usr/lib/ruby/1.8/webrick/server.rb:23:in `start'
/usr/lib/ruby/1.8/webrick/server.rb:82:in `start'
/usr/lib/ruby/site_ruby/1.8/puppet/network/http/webrick.rb:32:in `listen'
/usr/lib/ruby/site_ruby/1.8/puppet/network/http/webrick.rb:31:in `initialize'
/usr/lib/ruby/site_ruby/1.8/puppet/network/http/webrick.rb:31:in `new'
/usr/lib/ruby/site_ruby/1.8/puppet/network/http/webrick.rb:31:in `listen'
/usr/lib/ruby/site_ruby/1.8/puppet/network/http/webrick.rb:28:in `synchronize'
/usr/lib/ruby/site_ruby/1.8/puppet/network/http/webrick.rb:28:in `listen'
/usr/lib/ruby/site_ruby/1.8/puppet/network/server.rb:92:in `listen'
/usr/lib/ruby/site_ruby/1.8/puppet/network/server.rb:104:in `start'
/usr/lib/ruby/site_ruby/1.8/puppet/daemon.rb:137:in `start'
/usr/lib/ruby/site_ruby/1.8/puppet/application/master.rb:215:in `main'
/usr/lib/ruby/site_ruby/1.8/puppet/application/master.rb:165:in `run_command'
/usr/lib/ruby/site_ruby/1.8/puppet/application.rb:364:in `run'
/usr/lib/ruby/site_ruby/1.8/puppet/application.rb:456:in `plugin_hook'
/usr/lib/ruby/site_ruby/1.8/puppet/application.rb:364:in `run'
/usr/lib/ruby/site_ruby/1.8/puppet/util.rb:504:in `exit_on_fail'
/usr/lib/ruby/site_ruby/1.8/puppet/application.rb:364:in `run'
/usr/lib/ruby/site_ruby/1.8/puppet/util/command_line.rb:132:in `run'
/usr/lib/ruby/site_ruby/1.8/puppet/util/command_line.rb:86:in `execute'
/usr/bin/puppet:4
[root@puppetmaster ~]#
Журнал марионетки на клиенте пуст. Я немного исследовал Интернет и увидел, что там есть команда под названием puppetca
в более старой версии, но, похоже, не является частью версии 3.2.2. Кто-нибудь знает, как заставить его работать?
Во-первых, вы должны использовать репозитории PuppetLabs Yum - подробности Вот.
Во-вторых, вы должны использовать либо Passenger, либо Mongel за Apache - WEbrick - это очень простой веб-сервер, который не может масштабироваться дальше одного или двух узлов. Использование Passenger - это наиболее масштабируемый вариант, и его относительно легко настроить, поэтому он должен сэкономить вам много времени в долгосрочной перспективе. Взгляните на Документы для пассажиров PuppetLabs Больше подробностей.
Ваш DNS должен быть настроен так, чтобы CNAME puppet.mydomain
(заменяя mydomain
с вашим полным доменным именем) должен указывать на вашего мастера - так узлы автоматически обнаруживают вашего мастера. Если они не могут найти puppet.mydomain
и никакая дополнительная конфигурация не предоставляется ни в CLI, ни в /etc/puppet/puppet.conf
, узлы не смогут связаться с мастером.
При запуске Puppet на мастере вы можете использовать puppet apply --modulepath=/etc/puppet/modules /etc/puppet/manifests/site.pp
для начальной загрузки конфигурации вашего мастера (Puppet может - и в идеале должен - использоваться для настройки самого мастера), а последующие запуски могут быть запущены, вызвав либо puppet agent --test
или puppet apply
команда выше.
В-третьих, вы должны использовать модули Puppet вместо добавления конфигурации в manifests/nodes.pp
. Вот пример:
manifests/nodes.pp
:
node mynode {
include mymodule
}
modules/mymodule/init.pp
:
class mymodule {
file { '/path/to/some/file':
ensure => file,
owner => 'myuser',
group => 'mygroup',
mode => '0755',
source => 'puppet:///modules/mymodule/myfile',
}
}
В этом примере ваш модуль развернет файл, а определение вашего узла в манифесте использует include
чтобы импортировать модуль в манифест этого узла.
В puppetca
команда была заменена puppet cert
. После того, как вы настроили ваш главный сервер, вам нужно будет использовать эту команду для подписи сертификатов ваших узлов. Пример:
На узле:puppet agent --test
(сгенерируйте сертификат SSL и отправьте его мастеру)
На хозяине: puppet cert list
(чтобы перечислить невыполненные неподписанные сертификаты)
На хозяине: puppet cert sign mynode.myfqdn
(для подписания сертификата узла)
На узле: puppet agent --test
(чтобы повторно запустить Puppet, теперь, когда сертификат вашего узла подписан)