在新证书上自动更新木偶主证书

我正在build立一些无状态的节点。

每个节点都提供相同的操作系统映像文件。 它在启动时从DHCP / DNS服务器获取主机名。

下一步是获取服务器configuration…我打算使用这个部分的木偶….

但是在这一点上节点没有正确的证书,因为它是一个通用的操作系统映像。 第一次在networking上看到一个节点,这工作正常,因为我可以使用autosign.conf来使证书被签名和vermetic

我需要做什么来解决在networking上已经看到节点的情况,所以puppet master有一个证书…但是,服务器证书将不匹配节点上新创build的证书。

我尝试插入

allow_duplicate_certs = true

进入puppet.conf

但它似乎没有工作。 我在正确的设置? 有没有更好的/适当的方式来解决这个问题?

处理这种事情的正常方法(特别是在类似EC2的环境中)是将UUID用于客户端证书而不是主机名。 我find了一个合理的指导, 说明我的“ 使用UUID代理证书名称 ”的过程,但是这个过程的要点是:

  1. 安装uuidgen
  2. 运行uuidgen获取UUID。
  3. 编辑puppet.conf并将certname = <UUID>添加到[agent]部分。
  4. 正常地继续你的Puppet部署过程。

这个过程可以没有太多的困难脚本。

我使用EC2内部主机名作为主机名(即ip-XXXX),也作为证书名称。

我使用工头来创buildEC2实例。 使用foreman hooks插件,我确保如果主服务器上存在具有相同“ip-XXXX”名称的证书,它将在实例创build之前被删除。

在删除之前,我也将工头的主人重命名为“ip-XXXX-”,从我给的任何友好的名字。

这也意味着我在主机列表中看不到友好的名字,但是我可以使用hostgroups,并且可以使用“列”插件来查看领class中的注释字段,在那里我保持友好的信息。

不是一个理想的情况,但为我工作到目前为止。

这可能不是一个理想的解决scheme,但这是我之前做的东西:

当推出一个新的EC2盒(我使用织物来实现这一点,这一切都在傀儡大师):

1)在PuppetMaster上(证书和机器主机名是已知的;命名约定):

local('sudo puppetca -c {}' .format(cert_name));

local('sudo puppetca -g {}' .format(cert_name));

这将处理您提到的旧证书问题。

在使用scp将以下文件复制到新的推出框之后:

1)/var/lib/puppet/ssl/ca/signed/signed-cert_name.pem

2)/var/lib/puppet/ssl/private_keys/private-cert_name.pem

3)/var/lib/puppet/ssl/certs/ca.pem

针对上面的织物代码说:

 local("sudo cp /var/lib/puppet/ssl/ca/signed/{}.pem /tmp/signed-{}.pem" .format(cert_name,cert_name)) local("sudo chown ubuntu:ubuntu /tmp/signed-{}.pem" .format(cert_name)) local("sudo cp /var/lib/puppet/ssl/private_keys/{}.pem /tmp/private-{}.pem" .format(cert_name,cert_name)) local("sudo chown ubuntu:ubuntu /tmp/private-{}.pem" .format(cert_name)) local("sudo cp /var/lib/puppet/ssl/certs/ca.pem /tmp/ca.pem") local("sudo chown ubuntu:ubuntu /tmp/ca.pem") put("/tmp/signed-{}.pem" .format(cert_name), "/home/ubuntu/signed-{}.pem" .format(cert_name)) put("/tmp/private-{}.pem" .format(cert_name) , "/home/ubuntu/private-{}.pem" .format(cert_name)) put("/tmp/ca.pem" , "/home/ubuntu/ca.pem") 

现在在新的框中运行以下(我有一个简单的bash脚本这样做,fqdn是一个参数通过):

 sudo chown root:root /home/ubuntu/ca.pem /home/ubuntu/signed-$fqdn.pem /home/ubuntu/private-$fqdn.pem sudo chmod 600 /home/ubuntu/private-$fqdn.pem sudo mkdir -p /var/lib/puppet/ssl/certs/ /var/lib/puppet/ssl/ca/signed/ /var/lib/puppet/ssl/private_keys/ sudo mv /home/ubuntu/ca.pem /var/lib/puppet/ssl/certs/ca.pem sudo mv /home/ubuntu/signed-$fqdn.pem /var/lib/puppet/ssl/ca/signed/$fqdn.pem sudo mv /home/ubuntu/private-$fqdn.pem /var/lib/puppet/ssl/private_keys/$fqdn.pem 

我希望这有点帮助。

注意:本地,并放在面料操作