IT技术博客大学习 共学习 共进步

puppetmaster集群解决方案之puppet客户端共享一张证书

MySQLOPS 数据库与运维自动化技术分享 2012-04-07 15:08:55 浏览 2,782 次

    [导读]

    在puppet 运维管理中,当客户端数量达到一定数量后,puppetmaster就会成为性能瓶颈.sky这次是没有采取以往的做法,而是采用了一个简单的方案,

    即puppet 客户端都共享一张ssl证书来实现puppetmaster集群,puppet 集群之核心思想,

    1).puppetmaster集群,分担puppetmaster来自于客户端的请求压力,可以采取Active.Active 模式.

    2).puppet ssl 证书集群,分担puppetmaster的来自于客户端ssl证书的请求压力,我们只能采取Active,Standby模式.

    本次sky就是采用puppetmaster双主,ssl证书共享分享,关于这种方案的优缺点sky在后面总结.

    [正文]

    puppetmaster  集群简介:

    本次puppetmaster集群是采用两台主机来实现puppet 负载均衡,主机名为puppetmaster1 IP为192.168.200.63,

    puppetmaster2 IP为 192.168.200.62, puppetmaster1为用来作CA认证,puppetmaster2不作CA认证,

    采用certname去申请证书。关于certname可以参阅官方网站.也可以去puppet 中文社区讨论交流puppet 使用心得.

    本次puppetmaster集群需要使用dns服务,由于我内网没有dns server,因此采用hosts 方式。

    puppetmaster集群步骤:

     1) .puppetmaster1 和puppetmaster分别以下绑定hosts

     192.168.200.62  puppet2 puppetmaster2 puppetmaster4 puppetclient2

     192.168.200.63  puppet1 puppetmaster1 puppetmaster3 puppetclient1

    2. puppetmaster集群说明

     192.168.200.63   为puppetmaster1,提供puppetmaster服务,且提供puppet CA 认证服务,主机名为puppetmaster1

     192.168.200.62 为puppetmaster2,不提供CA 认证,提供puppetmaster 服务,主机名为puppetmaster2

    3).我们在puppetmaster1生成证书:

     #puppet cert generate -dns_alt_names=puppetmaster3:puppet1 puppetmaster1

     #puppet cert generate -dns_alt_names=puppetmaster3:puppet2 puppetmaster2

    这里使用 -dns_alt_names,旧的-certdnsname已停用。详见官方网站:http://puppetlabs.com/security/cve/cve-2011-3872/

    2) 在puppetmaster2创建ssl证书所需要的目录

     mkdir -p /var/lib/puppet/ssl/{private_keys,certs}

    3)将puppetmaster1上的认证的证书复制到puppetmaster2上。

     cd /var/lib/puppet/ssl/

     scp private_keys/puppetmaster2.pem root@puppet2:/var/lib/puppet/ssl/private_keys/

     scp ca/signed/puppetmaster2.pem root@puppet2:/var/lib/puppet/ssl/certs/

     scp ca/ca_crt.pem root@puppet2:/var/lib/puppet/ssl/certs/ca.pem

    4.修改puppetmaster1和puppetmaster2的puppet.conf文件,添加以下内容:

     puppetmaster1 上的

     [main]

     certname = puppetmaster1  增加这两行

     ca = true                             增加这两行

     [agent]

     certname = puppetclient1 增加这两行

     ca_server = puppet1       增加这两行

    puppetmaster2上的

     [main]

     certname = puppetmaster2 增加这两行

     ca = false

     [agent]

     certname = puppetclient2 增加这两行

     ca_server = puppetmaster1

    5) 重新启动puppetmaster1和puppetmaster2上的puppetmaster服务。

     servcice puppetmaster restart

    6)我们可以在puppetmaster1上puppetmaster2 使用

     puppet agent -test puppetmaster1

     puppet agent -test puppetmaster2

     puppet agent -test puppetmaster3

     puppet agent -test puppetmaster4

     均会看到请求新的ssl证书,而请求两台puppetmaster1都会提示找到证书。

    在这里我们可以看到puppet 客户端可以请求多台puppetmaster,而且我们可以看到

    客户端请求的证书的列表.这里已经达到我们预期目的.

     为了更好的演示一起,那我新增了一台puppetclient1,那要如何进行ssl认证等配置呢?

    1)可以生成一张证书,专门用来作为puppet client的证书。

     a.在puppetmaster1生成证书.

     puppet ca  general client

     puppetca -list -a

     puppetca -s -a

     b. 在puppetclient1创建证书目录

     mkdir -p /var/lib/puppet/ssl/{certs,private_keys}

     c.复制证书到远程客户端

     scp /var/lib/puppet/ssl/certs/ca.pem  root@puppetclient1:/var/lib/puppet/ssl/certs/

     scp /var/lib/puppet/ssl/private_keys/puppetclient.pem  root@puppetclient1:/var/lib/puppet/ssl/private_keys/

     scp /var/lib/puppet/ssl/certs/puppetclient.pem  root@puppetclient1:/var/lib/puppet/ssl/certs/

     d. puppetclient1.需要配置certname

     [agent]

     certname=puppetclient

     ca_server=puppetmaster1

     完成以上步骤即可实现共享一张证书,如果新增很多台,重复c和d步骤即可.

    [puppet master 集群总结]

    采用这种集群方案,可以有效的分担了puppetmaster的压力,也减少了新增puppet client 的ssl证书请求以及

    puppetmaster 的签名步骤,puppetmaster上ssl 证书大量减少,可以减少维护ssl证书数量,但是有个问题,在

    puppetmaster CA server 无法提供服务的时候,虽然puppetmaster2上有证书,但是需要修改dns 记录,

    修改CA server A 记录指向Standby CA server.当然更改所有puppet client的配置文件里的 CA  server 不是我们

    希望的.在接下来的文章中我们会参考puppet pro 文档,使用Apache 的passenger扩展puppet,搭建更合适的puppetmaster

    集群.

    友情提示,本文已同步更新致puppet 中文社区,http://www.puppetfans.com/thread-47-1-1.html,欢迎大家前往讨论.当然

    有同学觉得更应该改为puppet 论坛.puppet 社区提供了puppet 自学教程,以及puppet 的学习技巧,当然更好的是提供了

    很多puppet 资料,以及puppet 应用案例.

建议继续学习

  1. 使用Apache 和Passenger来运行puppetmaster (阅读 8,165)
  2. 自动化运维之企业实际案例分析 (阅读 4,623)
  3. puppet使用rsync来同步文件教程 (阅读 4,082)
  4. DevOps之Puppet (阅读 3,824)
  5. 如何有效运行puppet cron任务以及如何触发运行puppet (阅读 3,762)
  6. puppet vagrant 管理VirtualBox 虚拟机 (阅读 3,443)
  7. puppet运维之使用自定义函数 (阅读 3,302)
  8. puppet extlookup 和puppet hiera使用 (阅读 3,043)
  9. puppet手册之建立软件安装源 (阅读 2,563)
  10. puppet 手册检查puppet配置文件和使用puppet tags (阅读 2,483)