puppet是一种基于ruby语言开发的Lnux、Unix、windows平台的集中配置管理系统。它使用自有的puppet描述语言,可管理配置文件file、用户user、cron任务、软件包、系统服务等系统实体。node
puppet依赖于C/S(客户端/服务器)的部署架构。它须要在puppet服务器上安装puppet-server软件包(如下简称master),在须要管理的目标主机上安装puppet客户端软件(如下简称client)。windows
为了保证安全,master和client之间是基于SSL和证书的,只有通过master证书认证的client才能够与master通讯。安全
- 一、客户端puppet调用fast探测出主机的一些变量,如主机名、内存大小、IP地址等。Puppet把这些信息使用SSL链接发送给服务器端;
- 二、服务器端的puppetmaster经过fast工具分析检测客户端的主机名,而后找到项目的主配置文件manifest里面对应的node配置,并对该部份内容进行解析,fast发送过来的信息能够做为变量处理,node牵扯到的代码才被解析,没牵扯到的不解析,解析分为语法检查,若是语法没错,继续解析,解析结果生成一个结果‘伪代码’,而后把‘伪代码’发给客户端;
- 三、客户端收到‘伪代码’而且执行,客户端把执行结果发给服务器;
- 四、服务器端把客户端的执行结果写入日志。
使用四台服务器模拟搭建Puppet环境,具体拓扑图以下:ruby
因为Puppet须要使用SSL证书,依赖时间同步,全部须要搭建NTP服务器。服务器
(1)关闭全部服务器的防火墙和安全性策略架构
systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0
(2)yum安装NTP并修改配置文件ssh
yum install ntp -y #安装ntp vi /etc/ntp.conf #24行添加两行记录 server 127.127.26.0 fudge 127.127.26.0 stratum 8
(3)启动ntp服务ide
service ntpd start #启动ntp服务 chkconfig ntpd on
(4)查看同步状态`工具
ntpstat #查看同步状态
(1)规划主机名测试
vi /etc/hostname master.test.cn #修改相应的主机名 vi /etc/hosts #添加 192.168.26.131 master.test.cn 192.168.26.132 client1.test.cn 192.168.26.133 client2.test.cn
而后重启,将安全性策略再关一下
setenforce 0
(2)搭建NTP客户端服务
yum install ntp -y service ntpd start #启动ntp服务 ntpdate 192.168.26.130 (NTPserver地址)
(3)安装puppet控制端
yum install -y epel-replease #安装epel源 yum install -y puppet-server #yum安装puppet服务端
(4)启动Puppet主程序
systemctl enable puppetmaster.service systemctl start puppetmaster.service
(1)规划主机名
vi /etc/hostname client1.test.cn #修改相应的主机名 vi /etc/hosts #添加 192.168.26.131 master.test.cn 192.168.26.132 client1.test.cn 192.168.26.133 client2.test.cn
而后重启,将安全性策略再关一下
setenforce 0
(2)搭建NTP客户端服务
yum install ntp -y service ntpd start #启动ntp服务 ntpdate 192.168.26.130 (NTPserver地址)
(3)安装puppet控制端
yum install -y epel-replease #安装epel源 yum install -y puppet #yum安装puppet控制端
(4)编辑puppet配置文件
vi /etc/puppet/puppet.conf [main] server = master.test.cn ......
(5)client端申请证书
puppet agent --server=master.test.cn --no-daemonize --verbose #两个client端执行命令同样
执行完会有以下提示:
Info: Creating a new SSL key for client2.test.cn Info: Caching certificate for ca Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml Info: Creating a new SSL certificate request for client2.test.cn Info: Certificate Request fingerprint (SHA256): 9E:E6:4D:3F:5B:03:D2:72:08:FF:0B:E7:92:48:45:FA:B7:2C:89:B5:12:CB:EC:8F:2E:50:B4:02:5F:4C:DF:17 Info: Caching certificate for ca
等待一下子按ctrl+c组合键结束
(1)查看申请证书的客户端
puppet cert list
(2)将未申请的客户端进行受权
puppet cert sign --all
(3)经过目录查看已经申请注册的客户端
ll /var/lib/puppet/ssl/ca/signed/
master端配置:
(1)建立ssh模块,模块下面有3个文件:manifests、templates和files
mkdir -p /etc/puppet/modules/ssh/{manifests,templates,files} #模块信息 mkdir /etc/puppet/manifests/nodes #节点信息 mkdir /etc/puppet/modules/ssh/files/ssh #模块的文件发布目录 chown -R puppet /etc/puppet/modules/ #修改权限
(2)建立模块配置文件install.pp
vi /etc/puppet/modules/ssh/manifests/install.pp #新建文件(首先肯定客户端安装ssh服务) class ssh::install{ package{"openssh": ensure => present, } }
(3)建立模块配置文件config.pp
vi /etc/puppet/modules/ssh/manifests/config.pp #新建模块配置文件,配置须要同步的文件 class ssh::config{ file {"/etc/ssh/sshd_config": #配置客户端须要同步的文件 ensure => present, #肯定客户端中此文件存在 owner => "root", #文件所属用户 group => "root", #文件所属组 mode => "0600", #文件属性 source => "puppet://$puppetserver/modules/ssh/ssh/sshd_config", #从服务端同步文件 require => Class["ssh::install"], #调用install.pp肯定ssh已安装 notify => Class["ssh::service"], #若是config.pp发生变化,则通知service.pp } }
(4)建立模块配置文件service.pp
vi /etc/puppet/modules/ssh/manifests/service.pp #新建server模块文件 class ssh::service { service {"sshd": ensure=>running, #肯定ssh已运行 hasstatus=>true, #puppet服务支持status命令 hasrestart=>true, #puppet服务支持restart命令 enable=>true, #服务器是否开机启动 require=>Class["ssh::config"] #确认config.pp调用 } }
(5)建立模块主配置文件init.pp
vi /etc/puppet/modules/ssh/manifests/init.pp #新建模块主配置文件 class ssh{ include ssh::install,ssh::config,ssh::service #将以上配置文件加载进去 }
此时/etc/puppet/modules/ssh/manifests目录下有四个文件:
(6)创建服务端ssh统一维护文件
将服务端ssh配置文件sshd_config复制到模块默认路径
cp /etc/ssh/sshd_config /etc/puppet/modules/ssh/files/ssh/ chown -R puppet /etc/puppet/modules/ssh/files/ssh/sshd_config #修改权限
(7)建立测试节点配置文件,并将ssh加载进去
vi /etc/puppet/manifests/nodes/ssh.pp node 'client1.test.cn' { include ssh } node 'client2.test.cn' { include ssh }
(8)将测试节点载入puppet,建立站点文件site.pp
vi /etc/puppet/manifests/site.pp //将测试节点载入puppet// import "nodes/ssh.pp"
(9)修改服务端维护的sshd_cofig配置文件
vi /etc/puppet/modules/ssh/files/ssh/sshd_config #修改19行 Port 9922
(10)从新启动puppet
systemctl restart puppetmaster
下面就是介绍客户端怎么获取到服务器端的资源的方式:
(1)通常在小规模自动化集群中,客户端主动拉取
puppet agent -t
在客户端查看/etc/ssh/sshd_config的内容
查看服务器ssh服务是否重启,端口是否生效
(2)当大规模部署时,采用服务器推送
client端(192.168.26.133)为例:
1)修改配置文件
vi /etc/puppet/puppet.conf #最后一行添加监听8139端口 listen = true
vi /etc/puppet/auth.conf #最后一行添加容许任何服务器推送 allow *
2)启动puppet客户端
systemctl start puppetagent
在客户端查看/etc/ssh/sshd_config的端口内容
查看服务器ssh服务是否重启,端口是否生效
master端:
3)修改服务端维护的sshd_cofig配置文件
vi /etc/puppet/modules/ssh/files/ssh/sshd_config #修改19行 Port 8822
4)开始往客户端推送
puppet kick client2.test.cn
在客户端查看/etc/ssh/sshd_config的内容
在客户端查看ssh服务是否重启,端口是否生效