【问题标题】:Foreman with Puppet node Net::HTTPNotFound Error工头与 Puppet 节点 Net::HTTPNotFound 错误
【发布时间】:2015-12-27 19:42:54
【问题描述】:

我已经按照官方文档在 RHEL 7.1 VM 上安装了 foreman (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 找到 :执行“/etc/puppet/node.rb ”返回 1:

在 puppet master 上运行引用的命令

sudo -u puppet /etc/puppet/node.rb <agent 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 调试)中没有生成日志

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

node.rb 引用了 foreman.yaml,这对于我可以确认的所列条目是正确的:

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

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

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

puppet agent -t <puppet master FQDN>

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

foreman-rake puppet:import:hosts_and_facts

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

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

更新:

我已经运行了命令

curl -k https://&lt; Puppet Master FQDN&gt;/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 为 发起 GET "/foreman/" 2015-10-01 10:04:57 [app] [I] DashboardController#index as / 处理 2015-10-01 10:04:57 [app] [I]重定向到 https:///foreman/users/login 2015-10-01 10:04:57 [app] [I] 过滤器链停止为: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 我明白了

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

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

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

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

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

【问题讨论】:

  • 没有 production.log 条目表明请求只到达 Apache 而不是 Foreman。您提到 Web UI 可以正常工作,但是从 master 本身检查 curl -k https://puppet master fqdn 返回登录重定向,并查看 /var/log/httpd/foreman-ssl_error_ssl.log 或 /var/log/httpd/error_log 是否包含任何日志记录。
  • 我已经用附加数据更新了原始问题

标签: puppet theforeman


【解决方案1】:

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

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

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

【讨论】:

  • 我会尝试你的第一个选项,虽然从记忆中(我目前不在工作):url: 设置包括 /foreman。当我安装工头时,我使用了选项--foreman-url=example.com/foreman。我还将尝试使用选项 --puppet-server-foreman-url=fqdn/foreman 重新运行安装程序。
  • 我已经使用您的 --puppet-server-foreman-url 选项重新安装/配置并且它可以工作。我只使用过 --foreman-foreman-url
猜你喜欢
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 2015-11-05
  • 2018-11-11
  • 2016-05-12
  • 2015-05-22
相关资源
最近更新 更多