我正在尝试设置安装了 puppet 的 Ubuntu VM,以便可以在本地测试我们的生产设置。我无法让 puppetmaster 和 puppet 相互通信。让我带您完成我的步骤。(服务器的hostname
FQDN 格式为“web1.xxx.xxx.net”)。
因此,首先,我从目录中清除所有 pem 文件(当然,CA pem 除外),/etc/puppet/ssl
这样我就可以重新开始。 puppetca --list
没有返回结果。
然后,我运行puppetd --test
为 puppetmaster 生成 CSR。puppetca --list
现在包括我的主机名(“web1.xxx.xxx.net”)。
然后我运行puppetca --sign web1.xxx.xxx.net
。现在puppetca --list
又是空的——到目前为止一切运行正常。
最后我puppetd --test
再次运行。我得到以下输出:
err: Could not retrieve catalog from remote server: hostname was not match with the server certificate
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run
列出目录内容/etc/puppet/ssl
显示具有正确服务器名称的 PEM 文件,与我的相匹配hostname
。有人知道如何解决这个问题吗?
答案1
错误是因为客户端默认连接到服务器主机名“puppet”,但所提供的证书没有“puppet”作为其主题或SubjectAltName属性。
要修复此问题,您可以(选择一个):
不要通过运行来初始化 puppetmaster 的证书
puppetd
,而是通过运行来初始化它puppetmasterd
——这将导致证书主题名称包含“puppet”。puppetca --generate --certdnsnames puppet:puppet.mydomain.com web1.xx.xx.xx.net
您可以使用certdnsnames 选项指定将包含在证书中的 SubjectAltNames 列表,而不是听天由命——它应该有一个以冒号分隔的列表任何名字客户端可以使用该地址联系服务器。不要仅仅
puppetd --test
在客户端上运行,puppetd --test --server=web1.xx.xx.xx.net
而要使客户端连接的服务器名称真正存在于服务器提供的证书中。
请查看 masterzen 的优秀博客文章以进行进一步的故障排除:Puppet SSL 解释
答案2
你检查过 puppetmaster 日志文件吗?我发现了同样的问题,并且发现服务器记录了证书信息:
[2012-02-28 16:21:09] INFO
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 2 (0x2)
Signature Algorithm: sha1WithRSAEncryption
Issuer: CN=ca
Validity
Not Before: Feb 26 16:32:46 2012 GMT
Not After : Feb 24 16:32:46 2017 GMT
Subject: CN=ubuntu.localdomain
字段 Subject 显示 CN 是“ubuntu.localdomain”,因此我通过执行以下操作来执行 puppet:
puppetd -t --server=ubuntu.localdomain --fqdn=myfqdn
希望这可以帮助 :-)
答案3
除了 Pau 回答的内容之外,我只想强调一下,你可以使用以下命令检查 puppetmasters 证书:
openssl x509 -text -in /var/lib/puppet/ssl/certs/<hostname_of_puppet_master>
然后确保从客户端使用完全相同的主机名:
puppetd --server <hostname_of_puppet_master> <etc>
答案4
两台服务器是否能够相互解析?我猜想,由于您正在对其进行 VMing,因此您可能缺少名称解析。如果您不使用 DNS 让服务器相互解析,则需要在/etc/hosts
两台服务器上的文件中添加条目。
Puppet 要求主机名解析为正确的 IP,否则您将收到您提到的错误。执行此操作后,您可能需要重新创建证书。两台机器都应该能够通过主机名互相 ping 通。
使用虚拟机时要注意的另一件事是同步服务器上的时间。如果不这样做,证书可能会无效。