测试用的两台机器:node
192.168.0.1 master.domain.com 192.168.0.2 agent1.domain.com
因为 puppet agent 在向 master 申请证书的时候,会用到服务器的 hostname,而 centos 默认的 hostname 又都是 localhost.localdomain,势必会形成证书名冲突的错误,须要修改服务器的 hostname:nginx
[master.domain.com]$ hostnamectl set-hostname master.domain.com [master.domain.com]$ systemctl reboot [agent1.domain.com]$ hostnamectl set-hostname agent1.domain.com [agent1.domain.com]$ systemctl reboot
centos 官方的 yum 源里面不包含 puppet 软件包,须要添加 epel 扩展,因为是测试环境测试,并无配置 DNS 服务器,因此用修改服务器 hosts 文件的方式代替解析:正则表达式
[master.domain.com]$ cat /etc/hosts 192.168.0.1 master.domain.com 192.168.0.2 agent1.domain.com [master.domain.com]$ yum install epel-release [master.domain.com]$ yum install puppet-server # 添加防火墙 8140 端口,puppet 会监听这个端口 [master.domain.com]$ firewall-cmd --add-port=8140/tcp
[agent1.domain.com]$ cat /etc/hosts 192.168.0.1 master.domain.com [agent1.domain.com]$ yum install epel-release [agent1.domain.com]$ yum install puppet
Puppet 的配置在 /etc/puppet 下面(有些配置文件在安装时并无建立,须要用到时再建立,而且 agent 和 master 端也不同):centos
|-- auth.conf #ACL 权限控制文件 |-- fileserver.conf #文件服务配置文件 |-- manifests #节点 存储 目录( Puppet 会首 先 加载 site.pp) | `-- site.pp #定义 Puppet 变量 和 默认 配置 |-- modules #模块 配置 目录 | `-- nginx #以 Nginx 为例,初始安装没有,用户自定义添加 |-- manifests | `-- init.pp #模块主配置文件, 定义类 class 相关信息。 读取模块后先读取它 | `-- templates | `-- nginx.conf.erb #模板配置文件( erb 为主) |-- namespaceauth.conf #命名空间配置文件( 配置权限) |-- puppet.conf #Puppet 主配置文件 |`-- tagmail.conf #邮件 报告配置文件
在 master 服务器上建立 site.pp:缓存
[master.domain.com]$ cat /etc/puppet/manifests/site.pp node default { file { "/tmp/helloworld.txt" : content => "Hello World!", } }
启动 master Server,用 --no-daemonize 的方式,便于查看日志:bash
[master.domain.com]$ puppet master --no-daemonize --debug ... ... Notice: Starting Puppet master version 3.6.2 # 启动成功 # puppet master # 则会以 daemon 的方式启动
配置客户端 /etc/puppet/puppet.conf,并启动 agent:服务器
[agent1.domain.com]$ cat /etc/puppet/puppet.conf [agent] ... ... server = master.domain.com #不指定 master 服务器,那么 puppet agent 会默认寻找名叫“puppet”的主机 [agent1.domain.com]$ puppet agent --server master.domain.com --test #--server 能够不加,由于前面在配置文件中加过 server 了 Info: Creating a new SSL key for agent1.domain.com Info: Caching certificate for ca Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml Info: Creating a new SSL certificate request for agent1.domain.com Info: Certificate Request fingerprint (SHA256): 1D:08:61:3B:1F:43:8C:B5:81:83:0F:FF:CC:4A:4F:8E:BA:B4:5F:7C:94:77:15:72:A2:0C:C0:44:D9:1D:16:9E Info: Caching certificate for ca Exiting; no certificate found and waitforcert is disabled
agent 会向 master 申请 SSL 证书,因为证书目前尚未被 master 审核,因此不成功;dom
master 审核证书:tcp
[master.domain.com]$ puppet cert list --all "agent1" (SHA256) 1D:08:61:3B:1F:43:8C:B5:81:83:0F:FF:CC:4A:4F:8E:BA:B4 + "master" (SHA256) 47:A1:12:28:22:05:75:A5:E5:92:2B:F6:53:05:A8:D6:1F:9B #这时候会看到两个证书,master 在 puppet-server 启动时就申请审核了,agent1 证书前面没有 +,表示未被审核的状态 [master.domain.com]$ puppet cert sign agent1 #也能够偷懒 sign all [master.domain.com]$ puppet cert list --all + "agent1" (SHA256) 1D:08:61:3B:1F:43:8C:B5:81:83:0F:FF:CC:4A:4F:8E:BA:B4 + "master" (SHA256) 47:A1:12:28:22:05:75:A5:E5:92:2B:F6:53:05:A8:D6:1F:9B #这时候就表明审核经过了
再次启动 agent:测试
[agent1.domain.com]$ puppet agent --test Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for agent1.domain.com Info: Applying configuration version '1479087051' Notice: /Stage[main]/Main/Node[default]/File[/tmp/helloworld.txt]/ensure: defined content as '{md5}ed076287532e86365e841e92bfc50d8c' Notice: Finished catalog run in 0.02 seconds
这时候就自动建立了 /tmp/helloworld.txt 文件。
master 添加 autosign.conf 自动审核配置文件:
[master.domain.com]$ cat /etc/puppet/autosign.conf *.domain.com #正则表达式匹配后缀为 domain.com 的主机 [master.domain.com]$ cat /etc/puppet/puppet [master] ... ... autosign = /etc/puppet/autosign.conf [master.domain.com]$ puppet cert clean --all [agent1.domain.com]$ rm -rf /var/lib/puppet
证书申请失败:因为主机名相同的证书已经注册等缘由致使的证书申请失败,须要删除已经申请的证书,从新申请,通常证书步骤都能解决:
[agent1.domain.com]$ rm -rf /var/lib/puppet/* # agent 端缓存文件 [master.domain.com]$ puppet cert clean agent1.domain.com # 删除未审核的证书
Master 找不到证书:在 master 执行 puppet cert list --all 命令找不到任何证书,因为 puppet.conf 中配置的证书默认位置:
[main] ... ... # Where SSL certificates are kept. # The default value is '$confdir/ssl'. ssldir = $vardir/ssl
能够看到 ssldir 使用 $vardir 环境变量来肯定的,不一样的用户可能会致使这个变量发生变化,从而致使没法找到证书,能够经过绝对路径的方式避免。
PS:能够参考网上一些经常使用的 Puppet 配置实例