实验环境: rhel6.3 iptables and selinux off
server 192.168.0.197 server97.example.com puppet
client1 192.168.0.198 server98.example.com
client2 192.168.0.194 server94.example.com
server 与所有 client 之间需要解析,以及时间同步,不然会验证失败
server端:
# yum localinstall -y rubygems-1.3.7-1.el6.noarch.rpm
把以下条目加入 yum 仓库:
[puppet]
name=puppet
baseurl=http://yum.puppetlabs.com/el/6Server/products/x86_64/
gpgcheck=0
[ruby]
name=ruby
baseurl=http://yum.puppetlabs.com/el/6Server/dependencies/x86_64/
gpgcheck=0
#yum install puppet-server -y
/etc/puppet 配置目录:
组织结构如下:
|-- puppet.conf #主配置配置文件,详细内容可执行 puppet --genconfig
|-- fileserver.conf #文件服务器配置文件
|-- auth.conf #认证配置文件
|-- autosign.conf #自动验证配置文件
|-- tagmail.conf #邮件配置文件(将错误信息发送)
|-- manifests #文件存储目录(puppet 会先读取该目录的.PP 文件<site.pp>)
|--nodes
| puppetclient.pp
|-- site.pp #定义 puppet 相关的变量和默认配置。
|-- modules.pp #加载 class 类模块文件(include syslog)
|-- modules #定义模块
|-- syslog #以 syslog 为例
|-- file
|-- manifests
|-- init.pp #class 类配置
|-- templates #模块配置目录
|-- syslog.erb #erb 模板
puppet 的第一个执行的代码是在/etc/puppet/manifest/site.pp,因此这个文件必须存在,而
且其他的代码也要通过该文件来调用。
#没有此文件 puppet master 无法启动,配置后面再定义
# touch /etc/puppet/manifest/site.pp
# service puppetmaster start
#启动 puppet master
# netstat -antlp |grep ruby
tcp 0 0 0.0.0.0:8140 0.0.0.0:* LISTEN 1596/ruby
client 端:
只需安装puppet即可
yum localinstall rubygems-1.3.7-1.el6.noarch.rpm -y
yum install puppet -y
puppet 客户端连接server端:
puppet agent --server=server97.example.com --no-daemonize --verbose
Info: Creating a new SSL key for server98.example.com
Info: Caching certificate for ca
Info: Creating a new SSL certificate request for server98.example.com
Info: Certificate Request fingerprint (SHA256):
5C:72:77:D8:27:DF:5A:DF:34:EF:25:97:5A:CF:25:29:9F:58:83:A2:61:57:D9:20:7B:1E:C0:36:75:9D:
FB:FC
client 向 master 发出证书验证请求,然后等待 master 签名并返回证书。
参数--server 指定了需要连接的 puppet master 的名字或是地址,默认连接名为“puppet”的主机
如要修改默认连接主机可以修改/etc/sysconfig/puppet 文件中的 PUPPET_SERVER=puppet 选项
参数--no-daemonize 是 puppet 客户端运行在前台
参数--verbose 使客户端输出详细的日志
在 master 端:
# puppet cert list #显示所有等待签名的证书
"server98.example.com" (SHA256)
CD:BD:13:D0:B8:46:07:F2:B7:AE:00:C4:E6:E9:E1:A4:92:F6:A4:F1:AB:F7:FF:8D:BE:B0:B7:90:E1:
7B:A8:C0
# puppet cert sign server98.example.com #签名证书
Signed certificate request for server98.example.com
Removing file Puppet::SSL::CertificateRequest server98.example.com at
'/var/lib/puppet/ssl/ca/requests/server98.example.com.pem'
如要同时签名所有证书,执行以下命令:
# puppet cert sign --all
# puppet cert clean server98.example.com #删除签名证书
在对证书签名后的两分钟后,在 agent 端上可以看到如下输出:
Info: Caching certificate for server98.example.com
Starting Puppet client version 3.1.1
Info: Caching certificate_revocation_list for ca
Info: Retrieving plugin
Info: Caching catalog for server98.example.com
Info: Applying configuration version '1349536603'
Finished catalog run in 0.13 seconds
上述为手动验证,实际环境下,改为自动验证,更加方便:
在 server 端, 编辑 puppet.conf 文件:
[main]
autosign = true #允许所有客户端的认证
/etc/puppet 目录下创建 autosign.conf 文件,内容如下:
*.example.com #表示允许所有 example.com 域的主机,也可以是某个指定的主机名。
# service puppetmaster reload
client端上,只需要执行
#puppet agent 或server puppet start 即可
在实际中有时会修改 client 端的主机名,这样就需要重新生成证书:
1)在 server 端执行:puppet cert --clean server98.example.com #你要删除的原 client 端主机名
2)在 client 端执行:rm -fr /var/lib/puppet/ssl/*
puppet agent --server=server97.example.com #重新请求证书
puppet资源定义:
以下资源均定义在/etc/puppet/manifest/site.pp 文件中,在没有指定节点的情况下,对所有
已经经过验证的 client 都生效。以下是我为做实验简单写的资源定义
node default {
file { "/tmp/temp1.txt": #创建/tmp/temp1.txt文件,其内容为hello world,权限为600,所属用户,组均为puppet。
content => "hello world",
mode => 600,
owner => puppet,
group => puppet,
}
}
在client上执行:puppet agent --test 即可。之前做过验证了,此处省略--server
遇到的一些问题:
****************注意时间上的一致性*********** client 和 server 时间要一致
dnsdomainname: Unknown host
err: Could not request certificate: Connection refused - connect(2)
Exiting; failed to retrieve certificate and waitforcert is disabled
err: Could not request certificate: No route to host - connect(2)
Exiting; failed to retrieve certificate and waitforcert is disabled
info: Creating a new SSL key for db-211
err: Could not request certificate: getaddrinfo: Name or service not known
Exiting; failed to retrieve certificate and waitforcert is disabled