![Puppet:远程客户端未被 puppetmaster 更新](https://linux22.com/image/616048/Puppet%EF%BC%9A%E8%BF%9C%E7%A8%8B%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%9C%AA%E8%A2%AB%20puppetmaster%20%E6%9B%B4%E6%96%B0.png)
首先我要说的是,我是 Puppet 的新手,我有 2 个服务器;一个叫做 puppetmaster,另一个叫做 puppetclient。我安装了 puppet-3.2.2 并创建了一些基本的 nodes.pp 文件,nodes.pp 文件包含 puppetmaster 和 puppetclient 的设置。当我应用相关清单时,更改仅影响 puppetmaster,而不会影响客户端。在服务器上,我看到以下错误:
[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]#
即使在 上/etc/sysconfig/network-scripts/ifcfg-eth0
和 中配置了 DNS 服务器/etc/resolv.conf
。检查 puppetmaster 日志时,我看到下一个错误:
[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 ~]#
客户端上的 puppet 日志是空白的。我在互联网上进行了一些调查,发现puppetca
旧版本中调用了一些命令,但看起来它不是 3.2.2 版本的一部分。有人知道如何让它工作吗?
答案1
首先,你应该使用 PuppetLabs Yum 存储库 - 详细信息这里。
其次,您应该使用 Apache 背后的 Passenger 或 Mongel - WEbrick 是一个非常基本的 Web 服务器,无法扩展到超过一两个节点。使用 Passenger 是最具可扩展性的选择,并且相对容易设置,因此从长远来看,它应该可以为您节省大量时间。请查看PuppetLabs Passenger 文档更多细节。
应设置 DNS,以便 CNAME puppet.mydomain
(替换mydomain
为您的 FQDN)指向您的主服务器 - 这是节点自动发现主服务器的方式。如果节点找不到主服务器,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,现在您的节点的证书已经签名)