安裝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 配置實例

相關文章
相關標籤/搜索