安装Puppet

基础信息

    测试用的两台机器: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

 

安装 Puppet master

    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

 

安装 Puppet agent    

[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

 

测试 Hello World

    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 配置实例

相关文章
相关标签/搜索