基础信息 测试用的两台机器: 192.168.0.1 master.domain.com192.168.0.2 agent1.domain.com 由于 puppet ag
基础信息
测试用的两台机器:
192.168.0.1 master.domain.com192.168.0.2 agent1.domain.com
由于 puppet agent 在向 master 申请证书的时候,会用到服务器的 hostname,而 centos 默认的 hostname 又都是 localhost.localdomain,势必会造成证书名冲突的错误,需要修改服务器的 hostname:
[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
安装 Puppet master
centos 官方的 yum 源里面不包含 puppet 软件包,需要添加 epel 扩展,由于是测试环境测试,并没有配置 DNS 服务器,所以用修改服务器 hosts 文件的方式代替解析:
[master.domain.com]$ cat /etc/hosts192.168.0.1 master.domain.com192.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
安装 Puppet agent
[agent1.domain.com]$ cat /etc/hosts192.168.0.1 master.domain.com [agent1.domain.com]$ yum install epel-release [agent1.domain.com]$ yum install puppet
测试 Hello World
Puppet 的配置在 /etc/puppet 下面(有些配置文件在安装时并没有创建,需要用到时再创建,并且 agent 和 master 端也不一样):
|-- 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.ppnode default { file { "/tmp/helloworld.txt" : content => "Hello World!", }}
启动 master Server,用 --no-daemonize 的方式,便于查看日志:
[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.comInfo: Caching certificate for caInfo: csr_attributes file loading from /etc/puppet/csr_attributes.yamlInfo: Creating a new SSL certificate request for agent1.domain.comInfo: 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:9EInfo: Caching certificate for caExiting; no certificate found and waitforcert is disabled
agent 会向 master 申请 SSL 证书,由于证书目前还没有被 master 审核,所以不成功;
master 审核证书:
[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 --testInfo: Retrieving pluginfactsInfo: Retrieving pluginInfo: Caching catalog for agent1.domain.comInfo: 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 配置实例