将 Puppet 客户端迁移至新的 Puppetmaster

将 Puppet 客户端迁移至新的 Puppetmaster

我如何迁移现有的 puppet 客户端以指向新的 puppetmaster 服务器?我不想手动转到每个客户端并生成新证书。

当我们尝试将 /etc/puppet 和 /var/lib/puppet 中的所有文件 rsync 到新服务器时,我们收到了证书错误

/etc/init.d/puppetmaster start 
* Starting puppet master                
Could not run: Retrieved certificate does not match private key; please remove certificate from server and regenerate it with the current key

我可以通过将/var/lib/ssl/certs/var/lib/ssl/private_key文件从old_hostname复制到来解决这个问题new_hostname,这基本上就是 将 Puppet 客户端迁移到新的 Puppet Master(旧的 Puppet Master 服务器已经不存在了,只使用备份)

不幸的是,我的客户仍然知道有些不对劲,并给了我以下错误:

sudo puppetd --test --server newservername.example.net --noop 
info: Retrieving plugin
err: /File[/var/lib/puppet/lib]: Failed to generate additional resources using 'eval_generate': hostname was not match with the server certificate
err: /File[/var/lib/puppet/lib]: Could not evaluate: hostname was not match with the server certificate Could not retrieve file metadata for puppet://newservername.example.net/plugins: hostname was not match with the server certificate
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

所以我猜测客户端证书仍然知道与它们关联的主机名,并且不愿意切换。

有没有办法使用 puppet(指向旧的 puppetmaster)来部署新的证书,或者以某种方式自动化签名过程?

总结:提出了两种解决方案:1) 在主服务器上启用autosign,从而完全跳过认证,或 2) 将旧 CNAME 设置为指向新主服务器,因为证书绑定到主服务器的主机名。我选择了 #2,因为自动签名感觉就像关闭了安全性(尽管时间有限)。

答案1

您是否希望让两个傀儡大师暂时保持正常运行,然后一点一点地迁移客户端?

如果是这样,您就不得不接触每个客户端系统,不管是指向新的主服务器,还是添加 hosts 文件条目,或诸如此类。如果是这种情况,那么您不妨启动新的主服务器并重新签名每个客户端(这比通过 hosts 文件黑客来解决验证问题要好)。

如果没有(如果您打算关闭旧服务器并立即切换所有内容),那么只需将旧服务器的主机名转移到新服务器上;如果客户端使用旧名称(证书上的名称)连接到新服务器,则证书将被识别为有效。

答案2

您可以简单地使用$ssldir旧的 puppetmaster,然后在新的 puppetmaster 中使用它。

除此之外,还应该可以部署一个脚本来执行以下操作:

  • (与客户端脚本无关:可能在新的 Puppet 服务器上激活自动签名)
  • 稍后再跑
  • 停止 Puppet 客户端
  • 清理客户端 ssldir
  • 修改客户端上的 puppet.conf 以指向新服务器
  • 创建一个锁定文件以确保它不会导致无限的重新配置循环
  • 重新启动 Puppet

丑陋,但只要进行迁移模块仅在旧服务器上,并且确保没有迁移模块仅在新服务器上,这是一次性的事情,应该会发挥神奇的作用……

相关内容