測試用的兩臺機器: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 配置實例