Pupet自动化管理环境部署记录(一)

下面记录下Puppet在Centos下的部署过程:
puppet是什么
puppet是一种基于ruby语言开发的Lnux、Unix、windows平台的集中配置管理系统。它使用自有的puppet描述语言,可管理配置文件file、用户user、cron任务、软件包、系统服务等系统实体。
puppet把这些系统实体称之为资源,puppet设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。
puppet依赖于C/S(客户端/服务器)的部署架构。它需要在puppet服务器上安装puppet-server软件包(以下简称master),在需要管理的目标主机上安装puppet客户端软件(以下简称agent)。
当agent连接上master后,定义在master端的配置文件会被编译,然后在agent上运行。每个agent默认30分钟会连接一次master,确认配置信息的更新情况。但是这种方式在很多场景下不是很符合系统管理员的要求,所以很多系统管理员也会将agent通过crontab(任务计划)来管理,这样会更加灵活一些。
puppet优点
puppet的语法允许你创建一个单独的脚本,用来在你所有的目标主机上建立一个用户。所有的目标主机会依次使用适合本地系统的语法来解释和执行这个模块。如果这个配置是在Red Hat服务器上执行的话,建立用户使用useradd命令,如果这个配置是在FreddBSD服务器上执行的话,则使用adduser命令。
puppet另外一个卓越的地方就是它的灵活性。源于开源软件的天性,你可以自由地获得puppet的源代码。如果你遇到问题并且有能力处理的话,你可以修改或加强puppet的代码使其适用于你的环境,然后解决这个问题。
puppet也是易于扩展的。定制软件包的支持功能和特殊的系统环境配置能够快速简单地添加至puppet的安装程序中。
1)基本安装
机器信息(centos6.8)
IP地址            主机名           角色
182.48.115.233    Master-node      Master
182.38.115.235    Agent-node1      Agent
182.38.115.235    Agent-node2      Agent
182.38.115.235    Agent-node3      Agent
准备工作(在Master和Agent上都要准备的)
1)关闭selinux
2)关闭iptables,这是为了避免各种麻烦,你可以通过打开端口,而不需要关闭iptables
3)设置host文件,由于puppet需要用FQDN,一般实验环境都是没有dns,所以通过hosts文件设置
4)设置ntp,同步时间,这个也是必须的。
5)设置源,根据你希望使用的版本,设置不同的源.我是启用了EPEL和Puppet官方的源
0)关闭selinux和防火墙(Master和Agent都要做)
[root@Master-node ~]# setenforce 0
[root@Master-node ~]# /etc/init.d/iptables stop
1)绑定hosts(Master和Agent都要做)
[root@Master-node ~]# cat /etc/hosts
……
182.48.115.233 Master-node
182.48.115.235 Agent-node1
182.48.115.236 Agent-node2
182.48.115.237 Agent-node3
[root@Agent-node1 ~]# cat /etc/hosts
182.48.115.235 Agent-node1
182.48.115.233 Master-node
[root@Agent-node2 ~]# cat /etc/hosts
182.48.115.235 Agent-node2
182.48.115.233 Master-node
[root@Agent-node3 ~]# cat /etc/hosts
182.48.115.235 Agent-node3
182.48.115.233 Master-node
2)同步时间(Master和Agent端都要做)
[root@Master-node ~]# yum -y install ntp
[root@Master-node ~]# ntpdate ntp.api.bz
3)安装Puppet
Puppet 不在CentOS的基本源中,需要加入PuppetLabs 提供的官方源(Master和Agent都要操作)
[root@Master-node ~]# wget http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-1.noarch.rpm
[root@Master-node ~]# yum install puppetlabs-release-6-1.noarch.rpm
[root@Master-node ~]# yum update
———–Master端———–
[root@Master-node ~]# yum install -y ruby facter puppet-server
启动
[root@Master-node ~]# service puppet start
[root@Master-node ~]# service puppetmaster start
设为自动开机
[root@Master-node ~]# chkconfig  puppet on
[root@Master-node ~]# chkconfig  puppetmaster on
———-Agent端———–
[root@Agent-node1 ~]# yum install -y ruby facter puppet
启动
[root@Agent-node1 ~]# service puppet start
设置开机自启动

[root@Agent-node1 ~]# chkconfig  puppet on
配置puppet
[root@Agent-node1 ~]# vim /etc/puppet/puppet.conf       //底部添加下面一行
…..
server = Master-node
[root@Agent-node1 ~]# /etc/init.d/puppet restart
从日志中我们可以看出第一次启动master端时,puppet服务会在本地创建认证中心,给自己授权证书和key,这个我们可以在/var/lib/puppet/ssl看到那些证书和key。如下:
[root@Master-node ~]# tail -f /var/log/messages
……
Jul 25 15:02:13 puppet01 puppet-master[23689]: Signed certificate request for ca
Jul 25 15:02:14 puppet01 puppet-master[23689]: Master-node has a waiting certificate request
Jul 25 15:02:14 puppet01 puppet-master[23689]: Signed certificate request for Master-node
Jul 25 15:02:14 puppet01 puppet-master[23689]: Removing file Puppet::SSL::CertificateRequest Master-node at ‘/var/lib/puppet/ssl/ca/requests/Master-node.pem’
Jul 25 15:02:14 puppet01 puppet-master[23689]: Removing file Puppet::SSL::CertificateRequest Master-node at ‘/var/lib/puppet/ssl/certificate_requests/Master-node.pem’
Jul 25 15:02:14 puppet01 puppet-master[23727]: Reopening log files
Jul 25 15:02:14 puppet01 puppet-master[23727]: Starting Puppet master version 3.8.7
Jul 25 15:03:00 puppet01 puppet-master[23727]: puppet02.bkjk.cn has a waiting certificate request
[root@Master-node ~]#  ll /var/lib/puppet/ssl
total 28
drwxr-xr-x 5 puppet puppet 4096 Jul 25 15:02 ca
drwxr-xr-x 2 puppet puppet 4096 Jul 25 15:02 certificate_requests
drwxr-xr-x 2 puppet puppet 4096 Jul 25 15:02 certs
-rw-r–r– 1 puppet puppet  967 Jul 25 15:02 crl.pem
drwxr-x— 2 puppet puppet 4096 Jul 25 15:02 private
drwxr-x— 2 puppet puppet 4096 Jul 25 15:02 private_keys
drwxr-xr-x 2 puppet puppet 4096 Jul 25 15:02 public_keys
这个目录和/etc/puppet/puppet.conf文件中配置的ssldir路径有关系
也可以查看master端给自己授权的证书文件
[root@Master-node ~]# ll /var/lib/puppet/ssl/ca/signed
total 4
-rw-r–r– 1 puppet puppet 2029 Jul 25 15:02 Master-node.pem
2)建立master和agent之间的认证关系(三种注册方式)
Agent需要向服务器端发出请求, 让服务器对客户端进行管理. 这其实是一个证书签发的过程. 第一次运行puppet客户端的时候会生成一个SSL证书并指定发给Puppet服务端,
服务器端如果同意管理客户端,就会对这个证书进行签发。
Agent在第一次连接master的时候会向master申请证书,如果没有master没有签发证书,那么puppet agent和master的连接是否建立成功的,agent会持续等待master签发证书,
并会每隔2分钟去检查master是否签发证书。
Puppet注册方式基本上有三种:自动注册、手动注册和预签名注册。
————————————————————————————————————————————–
一、手动注册(批量效率高)
手动注册是由Agent端先发起证书申请请求,然后由Puppetserver端确认认证方可注册成功,这种注册方式安全系数中等,逐一注册(puppet cert –sign certnmame)
在节点数量较大的情况下是比较麻烦的,效率也低,批量注册(puppet cert –sign –all)效率很高,一次性便可注册所有的Agent的请求,但是这种方式安全系数较低,
因为错误的请求也会被注册上。
1)需要先在Agent节点申请注册(三台Agent节点机都要操作)
由于已经Agent的puppet.conf文件里设置了server地址,因此下面向Master请求认证的命令中不需要跟服务端地址。
否则需要在下面的命令中添加Master服务端地址,即添加”–server Master-node”
[root@Agent-node1 ~]# puppet agent –test
Info: Creating a new SSL key for agent-node1
Info: Caching certificate for ca
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for agent-node1
Info: Certificate Request fingerprint (SHA256): E0:B4:04:52:46:C0:D4:38:92:7B:EA:90:3A:5E:EF:D8:6E:85:D3:61:77:6A:34:10:24:0F:15:B6:1A:9C:13:EC
Info: Caching certificate for ca
Exiting; no certificate found and waitforcert is disabled
2)Master服务器端确定认证
现在Master服务器端查看认证情况
[root@Master-node ~]# puppet cert –list
  “agent-node1” (SHA256) E0:B4:04:52:46:C0:D4:38:92:7B:EA:90:3A:5E:EF:D8:6E:85:D3:61:77:6A:34:10:24:0F:15:B6:1A:9C:13:EC
  “agent-node2” (SHA256) FD:FC:10:22:48:BD:17:3C:6E:3E:C5:A1:32:6A:CD:E8:E7:47:33:F9:F2:34:45:C9:59:57:B1:0D:13:10:FE:37
  “agent-node3” (SHA256) 55:C0:CA:EF:F1:1A:3F:E2:53:0D:A8:F6:32:EB:8C:D8:B2:C8:51:9F:0A:4B:4C:0A:78:C5:57:E6:49:02:FC:90
[root@Master-node ~]# puppet cert –list –all           //加–all参数,就能查看到puppet给自己签发的本地证书了
  “agent-node1” (SHA256) E0:B4:04:52:46:C0:D4:38:92:7B:EA:90:3A:5E:EF:D8:6E:85:D3:61:77:6A:34:10:24:0F:15:B6:1A:9C:13:EC
  “agent-node2” (SHA256) FD:FC:10:22:48:BD:17:3C:6E:3E:C5:A1:32:6A:CD:E8:E7:47:33:F9:F2:34:45:C9:59:57:B1:0D:13:10:FE:37
  “agent-node3” (SHA256) 55:C0:CA:EF:F1:1A:3F:E2:53:0D:A8:F6:32:EB:8C:D8:B2:C8:51:9F:0A:4B:4C:0A:78:C5:57:E6:49:02:FC:90
+ “master-node” (SHA256) DB:81:FB:58:D7:FF:DC:17:3C:C2:4D:7B:2E:DF:35:C2:F5:4D:B8:D2:AE:9D:EF:E0:73:44:11:07:C4:C2:72:23
以上结果中:
左边有+号的,表示已经签发,puppet首先会给自己签发一个本地证书;客户端的证书前没+号,这就等待服务端签发。
接着Master服务端签发证书,及注册Agent节点
[root@Master-node ~]# puppet cert –list agent-node1
[root@Master-node ~]# puppet cert –list agent-node2
[root@Master-node ~]# puppet cert –list agent-node3
[root@Master-node ~]# puppet cert –sign –all    //上面三个命令是分别给单独的一个Agent颁发证书,效率低下!可以使用这个命令代替,表示签发所有Agent的证书
再次查看认证情况,发现已经都认证了(左边都有+号了)
[root@Master-node ~]# puppet cert –list –all
+ “agent-node1” (SHA256) 86:61:2A:99:38:54:E3:FD:E0:8F:40:D4:2D:75:83:6F:64:B6:36:E1:B0:97:0D:B5:82:9C:69:95:D2:95:98:92
+ “agent-node2” (SHA256) 63:BF:AA:C2:C5:1E:A6:64:47:72:85:B3:4B:32:3E:07:C3:70:8D:86:D3:86:53:1A:FF:F9:9E:93:46:46:CB:13
+ “agent-node3” (SHA256) 41:B1:A7:3C:E3:7D:47:32:21:4F:25:8A:5E:96:77:1A:E0:FE:45:C3:42:0C:BC:D7:0A:0A:D1:E9:BF:FA:E1:96
+ “master-node” (SHA256) DB:81:FB:58:D7:FF:DC:17:3C:C2:4D:7B:2E:DF:35:C2:F5:4D:B8:D2:AE:9D:EF:E0:73:44:11:07:C4:C2:72:23
     

如果这文章对你有帮助,请扫左上角微信支付-支付宝,给于打赏,以助博客运营

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注