Puppet:远程客户端未被 puppetmaster 更新

Puppet:远程客户端未被 puppetmaster 更新

首先我要说的是,我是 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,现在您的节点的证书已经签名)

相关内容