1

根据官方文档,我已经在 RHEL 7.1 VM 上安装了工头(v1.9.0)。

我当前的环境包括:

  • 1 x 木偶大师/工头
  • 2 个代理(RHEL 6.5 和 7)

Foreman 被配置为 ENC,它将为 9 个环境(包括生产环境)提供服务。已在工头中为工头/puppetmaster 配置了智能代理。

代理在生成 CSR 并让 puppet master 签名方面没有问题。

当我使用命令在远程机器上运行 puppet 代理时

puppet agent --no-daemonize --server <FQDN> --trace

我收到以下错误

警告:无法获取我的节点定义,但代理将继续:

警告:服务器上的错误 400:无法通过 exec 找到 <代理 FQDN>:执行“/etc/puppet/node.rb <代理 FQDN>”返回 1:

在 puppet master 上运行引用的命令

sudo -u puppet /etc/puppet/node.rb <agent FQDN> 

返回错误:

检索节点 <代理 FQDN> Net::HTTPNotFound 时出错

查看 Foreman 的 /var/log/foreman/production.log 了解更多信息。

在网络上研究此错误“ Foreman with puppet node.rb error 404 Not Found ”提供了 puppet master 不知道代理的标准响应(DNS、/etc/hosts)。在我的情况下,这不是问题,因为对 puppetmaster 运行相同的 node.rb 命令会返回相同的错误。一个简单的 ping 测试确认 DNS 设置正确。

虽然 /var/log/httpd/foreman-ssl_access_ssl.log 中生成了 http 404 错误,但当此操作失败时,/var/log/foreman/production.log(inc 调试)中不会生成日志

<IP> - - [30/Sep/2015:15:13:29 +1000] GET /node/<代理 FQDN>?format=yml HTTP/1.1" 404 48 "-" "Ruby"

node.rb 引用 foreman.yaml 与列出的条目相关,我可以确认如下:

  • :网址:
  • :ssl_ca:
  • :ssl_cert:
  • :ssl_key:
  • ETC

它也是安装过程生成的默认文件,没有任何更改。

代理在工头中,但是为了实现这一点,一旦我配置了 puppet.conf 并生成/签署了代理证书,我运行了命令

puppet agent -t <puppet master FQDN>

在我手动运行命令之前,代理没有导入工头

foreman-rake puppet:import:hosts_and_facts

在工头中调用其中一个主机,然后单击“YAML”会显示每个代理的正确信息。

我什至使用 openssl 从证书中提取信息以确认它们是正确的。

更新:

我已经运行了命令

curl -k https://< Puppet Master FQDN>/foreman

这将返回输出

<html><body>You are being <a href="https://< Puppet Master FQDN>/foreman/users/login">redirected</a>.</body></html>

这会在 ~/foreman/production.log 中生成日志条目

2015-10-01 10:04:57 [应用] [我] | | 在 2015-10-01 10:04:57 +1000 2015-10-01 10:04:57 [app] [I] DashboardController#index as / 2015处理 < PUPPET MASTER IP> -10-01 10:04:57 [app] [I] 重定向到 https://< PUPPET MASTER>/foreman/users/login 2015-10-01 10:04:57 [app] [I] 过滤器链停止as :require_login 呈现或重定向 2015-10-01 10:04:57 [app] [I]Completed 302 Found in 7ms (Active Record: 0.6ms)

在 ~/httpd/foreman-ssl_access_ssl.log 我明白了

< PUPPET MASTER IP> - - [01/Oct/2015:10:05:26 +1000] "GET /foreman/ HTTP/1.1" 302 129 "-" "curl/7.29.0"

同一日志中的其他相关日志条目将是

< PUPPET MASTER IP> - - [01/Oct/2015:09:53:28 +1000] "POST /api/hosts/facts /HTTP/1.1" 404 27 "-" "Ruby"

< PUPPET MASTER IP> - - [01/Oct/2015:09:53:28 +1000] "GET /node/< PUPPET MASTER>?format=yml HTTP/1.1" 404 52 "-" "Ruby"

所以要问的问题是我可以对 Puppet/Foreman HTTP 配置做些什么来解决 404 错误

4

1 回答 1

3

看起来 ENC 脚本正在请求 Web 服务器根目录 (/api) 的路径,而 Foreman 本身托管在子 URI (/foreman/) 上。它应该是等/foreman/api/hosts/facts/foreman/node/这就是 Apache 返回 404 的原因,但 Foreman 没有看到并记录请求。

您可以通过设置更改 node.rb 在 /etc/puppet/foreman.yaml 中使用的 URL :url:。在此处添加/foreman后缀。

或者,如果您使用了 Foreman 安装程序,那么您可以重新运行它--puppet-server-foreman-url=https://example.com/foreman应该做同样的事情。

于 2015-10-06T10:10:50.300 回答