puppetmaster集群解决方案之puppet客户端共享一张证书
[导读]
在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 应用案例.
建议继续学习:
- 使用Apache 和Passenger来运行puppetmaster (阅读:6882)
- 自动化运维之企业实际案例分析 (阅读:3748)
- puppet使用rsync来同步文件教程 (阅读:3253)
- DevOps之Puppet (阅读:2932)
- 如何有效运行puppet cron任务以及如何触发运行puppet (阅读:2943)
- puppet vagrant 管理VirtualBox 虚拟机 (阅读:2687)
- puppet运维之使用自定义函数 (阅读:2598)
- puppet extlookup 和puppet hiera使用 (阅读:2207)
- puppet 手册检查puppet配置文件和使用puppet tags (阅读:1622)
- puppet手册之建立软件安装源 (阅读:1562)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:sky 来源: MySQLOPS 数据库与运维自动化技术分享
- 标签: puppet puppetmaster
- 发布时间:2012-04-07 15:08:55
- [56] IOS安全–浅谈关于IOS加固的几种方法
- [55] 图书馆的世界纪录
- [55] 如何拿下简短的域名
- [55] android 开发入门
- [53] Oracle MTS模式下 进程地址与会话信
- [53] Go Reflect 性能
- [50] 【社会化设计】自我(self)部分――欢迎区
- [49] 读书笔记-壹百度:百度十年千倍的29条法则
- [41] 程序员技术练级攻略
- [35] 视觉调整-设计师 vs. 逻辑