puppet

实验环境: 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 时间要一致

Q:[root@server98 ~]# puppetd  --server=server97.example.com
   dnsdomainname: Unknown host
   dnsdomainname: Unknown host
   err: Could not request certificate: Connection refused - connect(2)
   Exiting; failed to retrieve certificate and waitforcert is disabled
A:此错误是没有启动puppetmasterd服务和配置绑定主机名
   [root@server98 ~]#vi /etc/hosts
    在最后一行添加:
    192.168.0.197 server97.example.com puppet
   [root@server97 ~]#puppetmasterd   --启动服务
 
Q: [root@server98 ~]# puppetd --server puppet.com --test
err: Could not request certificate: No route to host - connect(2)
Exiting; failed to retrieve certificate and waitforcert is disabled
A: server端没有开启8140 port or close iptables firewall
 
Q: [root@server98 ~]# puppetd --test --server=server97.example.com
   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
A: 客户端没有配置服务器端的域名绑定:
   [root@server98]#vi /etc/hosts
   在最后一行添加:
   192.168.0.197 server97.example.com puppet

 

 
posted @ 2013-04-17 13:17  我想叫晴朗  阅读(885)  评论(0编辑  收藏  举报