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

Puppet: удаленные клиенты не обновляются puppetmaster

Начну с того, что я новичок в 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, теперь, когда сертификат вашего узла подписан)