Puppet部署应用简介:
puppet是一种Linux、Unix、windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。
Puppet工作方式:
puppet既可以在单机上使用,也可以以C/S结构使用.
在大规模使用puppet的情况下,通常使用C/S结构;在这种结构中puppet客户端是只运行puppet的服务器,puppet服务器端是只运行puppetmaster的服务器.
全部主机:
部署环境:
wget https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs-release-7-12.noarch.rpm
rpm -ivh puppetlabs-release-7-12.noarch.rpm
cd /etc/yum.repos.d
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
cat << EOF >> /etc/hosts
192.168.1.10 master.puppet.com
192.168.1.11 client01.puppet.com
192.168.1.12 client02.puppet.com
EOF
master:
安装并启动 Puppet 服务端
hostnamectl set-hostname master.puppet.com
bash
yum install -y puppet-server
systemctl start puppetmaster
systemctl enable puppetmaster
clien1和clien2:
安装 Puppet Client
hostnamectl set-hostname client01.puppet.com
hostnamectl set-hostname client02.puppet.com
bash
yum install -y puppet
修改客户端配置文件
在 /etc/puppet/puppet.conf 文 件 中 的 [main] 标 题 下 添 加 “server =
master.puppet.com”配置字段用于设置 Puppet Master 的域名
vim /etc/puppet/puppet.conf
#添加以下内容:
server = master.puppet.com
客户端申请注册
等待一会儿,可以按 Ctrl+C 结束,从服务器端查看到申请信息
puppet agent --server=master.puppet.com --no-daemonize --verbose
master:
Master 端查看申请注册的客户端
puppet cert --list
在 Master 上,将所有申请未注册的客户端进行注册
puppet cert sign --all
注册成功后,可以通过目录去查看已经注册的客户端
ll /var/lib/puppet/ssl/ca/signed/
Master 上创建需要的目录
cd /etc/puppet/
mkdir -p modules/ssh/{manifests,templates,files}
mkdir manifests/nodes
mkdir modules/ssh/files/ssh
chown -R puppet modules/
查看/etc/puppet/modules/ssh 目录下的结构
ll modules/ssh
创建模块配置文件 install.pp
vim /etc/puppet/modules/ssh/manifests/install.pp
#添加以下内容:
class ssh::install{
package{ "openssh":
ensure => present,
}
}
创建模块配置文件 config.pp
vim /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"],
notify => Class["ssh::service"],
}
}
创建模块配置文件 service.pp
vim /etc/puppet/modules/ssh/manifests/service.pp
#添加以下内容:
class ssh::service {
service {"sshd":
ensure=>running,
hasstatus=>true,
hasrestart=>true,
enable=>true,
require=>Class["ssh::config"]
}
}
创建模块主配置文件 init.pp
vim /etc/puppet/modules/ssh/manifests/init.pp
#添加以下内容:
class ssh{
include ssh::install,ssh::config,ssh::service
}
此时,/etc/puppet/modules/ssh/manifests 目录下有四个文件
ll /etc/puppet/modules/ssh/manifests/
建立服务器端 ssh 统一维护文件
cp /etc/ssh/sshd_config /etc/puppet/modules/ssh/files/ssh/
chown -R puppet /etc/puppet/modules/ssh/files/ssh/
创建测试节点配置文件
vim /etc/puppet/manifests/nodes/ssh.pp
#添加以下内容:
node 'client01.puppet.com'{
include ssh
}
node 'client02.puppet.com'{
include ssh
}
将测试节点载入 Puppet,即修改 site.pp
vim /etc/puppet/manifests/site.pp
#添加以下内容:
import "nodes/ssh.pp"
修改服务端维护的 sshd_config 配置文件
vim /etc/puppet/modules/ssh/files/ssh/sshd_config
#修改Port取消注释并改为9922
Port 9922
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
重新启动 Puppet Master 服务
systemctl restart puppetmaster
clien1和clien2:
客户端主动拉取
在其中一台 client01.puppet.com 客户端上,执行以下操作从服务器端主动拉取
配置
puppet agent -t
cat /etc/ssh/sshd_config | grep Port
查看服务器 SSH 服务是否重启,端口是否生效
netstat -tunlp | grep ssh
服务端主动推送
当大规模部署时不可能在每台客户端都采用拉取动作,而此时用服务器推送模式
反而更合理。在客户端 client02.puppet.com 上做修改
vim /etc/puppet/puppet.conf
#末尾添加,使 Puppet 监听 8139 端口:
listen = true
修改验证配置文件 auth.conf 定义一些验证信息及访问权限
vim /etc/puppet/auth.conf
#末尾添加,允许任何服务端推送
allow *
启动 Puppet Agent 客户端
systemctl start puppetagent
修改客户端 client02.puppet.com 的/etc/ssh/sshd_config 文件,将 Port 9922
还原成最初始状态
vim /etc/ssh/sshd_config
#将Port9922改为22
Port 22
然后重启 sshd 服务
systemctl restart sshd
查看还原后的/etc/ssh/sshd_config 的内容如下
[root@client01 ~]# cat /etc/ssh/sshd_config | grep Port
#Port 22
#GatewayPorts no
[root@client01 ~]# netstat -tunlp| grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3161/sshd
tcp6 0 0 :::22 :::* LISTEN 3161/sshd
master:
向 client02.puppet.com 节点推送配置
[root@master ~]# puppet kick client02.puppet.com
Triggering client02.puppet.com
Getting status
status is success
client02.puppet.com finished with exit code 0
Finished
clien1和clien2:
校验结果
此时,在clien1和clien2两台主机上可以查看到 SSH 端口已经被更改为 9922
cat /etc/ssh/sshd_config | grep Port
netstat -tunlp | grep sshd