【问题标题】:How do I get Puppet Master to run a manifest against a Puppet Agent node when there are different errors?当出现不同的错误时,如何让 Puppet Master 针对 Puppet Agent 节点运行清单?
【发布时间】:2016-05-12 00:55:52
【问题描述】:

我在一个网络中设置了puppet master and puppet agent server。我已经从 puppet 主服务器签署了 puppet 代理的证书请求。我正在尝试从 Puppet Master 对 Puppet 代理服务器运行清单,但它失败了。两台 Puppet Master 服务器上的 newManifest.pp 通过其 FQDN 调用 Puppet 代理。两台服务器上的/etc/hosts 文件都包含两台服务器的 FQDN 条目及其 IP 地址。我可以从另一台 ping 每台服务器。我可以从每台服务器通过 SSH 连接到另一台。

两个网络中的所有这四台服务器都将CentOS 7 作为操作系统,并使用开源Puppet version 3.8.4。所有四台机器上的防火墙均已关闭。这些端口不会在任何中间路径上被阻止:Puppet Master 和 Puppet Agent 服务器之间的任一网络上的 22、443、8140 和 61610。

在网络一中,我希望清单能够编译。他们从来没有。

我尝试使用 sshd_config` 在 Puppet Master 和 Puppet 代理上使用端口 22、443、8140 和 61610。当我从木偶大师那里使用它时:

puppet agent -t newManifest.pp --server='foobar.acme.com'

我收到一个错误:

Unable to fetch my node definition, but the agent will continue: Warning: Connection refused - connect(2).

我再次尝试使用 sshdconfig 不专门使用任何端口。我回收了 sshdconfig 服务。我运行相同的命令:

puppet agent -t newManifest.pp --server='foobar.acme.com'

我得到一个不同的错误:

Unable to fetch my node definition, but the agent run will continue: connection refused - connect(2).

然后我尝试了这个命令(没有明确指定服务器):

puppet agent -t newManifest.pp

这一次,我得到了这个错误:

Unable to fetch my node definition, but the agent will continue: Network is unreachable.

在网络 2 中,我希望清单能够正常工作。他们从来没有。

我尝试使用 sshd_config 在 Puppet Master 和 Puppet 代理上使用端口 22、443、8140 和 61610。当我从木偶大师那里使用它时:

puppet agent -t newManifest.pp --server='foobar.acme.com'

我得到一个不同的错误:

   Unable to fetch my node definition, but the agent run will continue: SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: unknown protocol.

我再次尝试使用 sshdconfig 不专门使用任何端口。我回收了 sshdconfig 服务。我运行相同的命令:

puppet agent -t newManifest.pp --server='foobar.acme.com'

我得到一个不同的错误:

 Unable to fetch my node definition, but the agent run will continue: connection refused - connect(2).

然后我尝试了这个命令(没有明确指定服务器):

 puppet agent -t newManifest.pp

这一次,我得到了这个错误:

 Unable to fetch my node definition, but the agent will continue: No route to host - connect(2).

网络 1 和 2 之间的错误是不同的,除非 sshd_config 没有使用任何特定端口并且编译清单的命令显式设置了 FQDN。为什么是这样?怎么了?我试图设置 Puppet 两次只是为了修复第一个实例。我无法完全重现第一个网络中的具体问题。

如何让 Puppet Master 服务器编译清单?傀儡特工已经签署了证书。我不明白为什么清单的编译总是失败。

【问题讨论】:

  • 这不会解决您的连接问题,但您不能指定使用puppet agent -t 运行的清单。主服务器将使用site.pp 或 ENC 来确定要应用哪些清单。或者,您可以运行 puppet apply 并指定清单(如果您已将它们保存在本地)。

标签: ruby linux networking ssh puppet


【解决方案1】:

您至少有两组完全不同的问题。

首先,正如@daxelrod 评论的那样,Puppet 代理不能那样工作。主/代理模式的要点是 master 决定节点的配置应该是什么。此外,主服务器不向代理提供清单文件;相反,它评估任何必要的清单和数据,以建立一个资源“目录”供代理应用。主服务的正是这些目录。

如果您希望代理在任何给定的运行中仅应用其部分配置,则可以使用--tags 选项指示它从其目录中选择特定的资源子集。可供选择的标签可以在您的清单中手动指定,Puppet 会根据声明的位置使用类名段自动标记资源,但这并不会按照清单文件的行完全分解。

如果您真的想将特定的清单文件应用到您的机器上,那么这些清单文件以及它们所依赖的任何数据或资源都必须存在于目标机器上。在这种情况下,您可以使用puppet apply 而不是使用代理,正如@daxelrod 观察到的那样。


第二,至于你的网络问题,如果确实如此

所有四台机器上的防火墙均已关闭。这些端口不会在任何中间路径上被阻止:Puppet Master 和 Puppet Agent 服务器之间的任一网络上的 22、443、8140 和 61610。

正如您所说,对于代理报告的“连接被拒绝”失败,我能看到的唯一其他合理解释是 puppetmaster 实际上并没有在代理尝试连接的机器上运行,至少不在代理尝试连接的端口。这可能是因为某种名称解析问题(即“foobar.acme.com”的解析方式与您预期的不同),因为主服务器配置为侦听与您想象的不同的端口,或者仅仅是因为您这样做了启动失败。

“网络无法访问”似乎更易于诊断:如果您没有通过命令行为代理指定服务器,并且没有在代理的配置文件中配置服务器,那么 Puppet 会尝试连接到名为“木偶”。这将为您解析到无法访问的网络上的地址。 (如果代理根本无法解析名称,消息会有所不同。)

真正有趣的错误消息是 SSL 握手错误:

SSL_connect returned=1 errno=0 state=SSLv2/v3 读取服务器 hello A:未知协议。

在这种情况下,客户端已成功连接并尝试启动 SSL 握手序列,但它不理解来自服务器的响应。这很可能意味着服务器根本没有将 SSL 回传给客户端,但我无法猜测它在说什么。


此外,您在问题中多次提到sshd_config,好像这与问题有关。但是,除非您正在做一些非常不寻常的事情,否则sshd 或其任何配置文件都不会参与 Puppet 运行。


总的来说,我倾向于认为您正在处理错误的期望、对主要系统和支持组件的理解不足以及可能过于雄心勃勃的开始。 Puppet 有相当好的文档,包括for system installation。如果您是从 RPM 安装(可能是 PuppetLabs's),那么这会给您一个良好的开端,但您仍然需要 configure both the master and the agent(s) appropriately。我怀疑你在这里的某个地方摔倒了。

一定要尽量少吃一点。一个主服务器和一个代理程序,在同一个网络上,对于主服务器/代理程序的配置非常简单。先搞定它。

【讨论】:

    猜你喜欢
    • 2017-05-16
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多