下面記錄下Puppet在Centos下的部署過程:
puppet是什麼
puppet是一種基於ruby語言開發的Lnux、Unix、windows平台的集中配置管理系統。它使用自有的puppet描述語言,可管理配置文件file、用戶user、cron任務、軟件包、系統服務等系統實體。
puppet把這些系統實體稱之為資源,puppet設計目標是簡化對這些資源的管理以及妥善處理資源間的依賴關係。
puppet依賴於C/S(客戶端/服務器)的部署架構。它需要在puppet服務器上安裝puppet-server軟件包(以下簡稱master),在需要管理的目標主機上安裝puppet客戶端軟件(以下簡稱agent)。
當agent連接上master後,定義在master端的配置文件會被編譯,然後在agent上運行。每個agent默認30分鐘會連接一次master,確認配置信息的更新情況。但是這種方式在很多場景下不是很符合系統管理員的要求,所以很多系統管理員也會將agent通過crontab(任務計劃)來管理,這樣會更加靈活一些。
puppet優點
puppet的語法允許你創建一個單獨的腳本,用來在你所有的目標主機上建立一個用戶。所有的目標主機會依次使用適合本地系統的語法來解釋和執行這個模塊。如果這個配置是在Red Hat服務器上執行的話,建立用戶使用useradd命令,如果這個配置是在FreddBSD服務器上執行的話,則使用adduser命令。
puppet另外一個卓越的地方就是它的靈活性。源於開源軟件的天性,你可以自由地獲得puppet的源代碼。如果你遇到問題並且有能力處理的話,你可以修改或加強puppet的代碼使其適用於你的環境,然後解決這個問題。
puppet也是易於擴展的。定製軟件包的支持功能和特殊的系統環境配置能夠快速簡單地添加至puppet的安裝程序中。
1)基本安裝
機器信息(centos6.8)
IP地址 主機名 角色
182.48.115.233 Master-node Master
182.38.115.235 Agent-node1 Agent
182.38.115.235 Agent-node2 Agent
182.38.115.235 Agent-node3 Agent
準備工作(在Master和Agent上都要準備的)
1)關閉selinux
2)關閉iptables,這是為了避免各種麻煩,你可以通過打開端口,而不需要關閉iptables
3)設置host文件,由於puppet需要用FQDN,一般實驗環境都是沒有dns,所以通過hosts文件設置
4)設置ntp,同步時間,這個也是必須的。
5)設置源,根據你希望使用的版本,設置不同的源.我是啟用了EPEL和Puppet官方的源
0)關閉selinux和防火牆(Master和Agent都要做)
[root@Master-node ~]# setenforce 0
[root@Master-node ~]# /etc/init.d/iptables stop
1)綁定hosts(Master和Agent都要做)
[root@Master-node ~]# cat /etc/hosts
……
182.48.115.233 Master-node
182.48.115.235 Agent-node1
182.48.115.236 Agent-node2
182.48.115.237 Agent-node3
[root@Agent-node1 ~]# cat /etc/hosts
182.48.115.235 Agent-node1
182.48.115.233 Master-node
[root@Agent-node2 ~]# cat /etc/hosts
182.48.115.235 Agent-node2
182.48.115.233 Master-node
[root@Agent-node3 ~]# cat /etc/hosts
182.48.115.235 Agent-node3
182.48.115.233 Master-node
2)同步時間(Master和Agent端都要做)
[root@Master-node ~]# yum -y install ntp
[root@Master-node ~]# ntpdate ntp.api.bz
3)安裝Puppet
Puppet 不在CentOS的基本源中,需要加入PuppetLabs 提供的官方源(Master和Agent都要操作)
[root@Master-node ~]# wget http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-1.noarch.rpm
[root@Master-node ~]# yum install puppetlabs-release-6-1.noarch.rpm
[root@Master-node ~]# yum update
———–Master端———–
[root@Master-node ~]# yum install -y ruby facter puppet-server
啟動
[root@Master-node ~]# service puppet start
[root@Master-node ~]# service puppetmaster start
設為自動開機
[root@Master-node ~]# chkconfig puppet on
[root@Master-node ~]# chkconfig puppetmaster on
———-Agent端———–
[root@Agent-node1 ~]# yum install -y ruby facter puppet
啟動
[root@Agent-node1 ~]# service puppet start
設置開機自啟動
[root@Agent-node1 ~]# chkconfig puppet on
配置puppet
[root@Agent-node1 ~]# vim /etc/puppet/puppet.conf //底部添加下面一行
…..
server = Master-node
[root@Agent-node1 ~]# /etc/init.d/puppet restart
從日誌中我們可以看出第一次啟動master端時,puppet服務會在本地創建認證中心,給自己授權證書和key,這個我們可以在/var/lib/puppet/ssl看到那些證書和key。如下:
[root@Master-node ~]# tail -f /var/log/messages
……
Jul 25 15:02:13 puppet01 puppet-master[23689]: Signed certificate request for ca
Jul 25 15:02:14 puppet01 puppet-master[23689]: Master-node has a waiting certificate request
Jul 25 15:02:14 puppet01 puppet-master[23689]: Signed certificate request for Master-node
Jul 25 15:02:14 puppet01 puppet-master[23689]: Removing file Puppet::SSL::CertificateRequest Master-node at ‘/var/lib/puppet/ssl/ca/requests/Master-node.pem’
Jul 25 15:02:14 puppet01 puppet-master[23689]: Removing file Puppet::SSL::CertificateRequest Master-node at ‘/var/lib/puppet/ssl/certificate_requests/Master-node.pem’
Jul 25 15:02:14 puppet01 puppet-master[23727]: Reopening log files
Jul 25 15:02:14 puppet01 puppet-master[23727]: Starting Puppet master version 3.8.7
Jul 25 15:03:00 puppet01 puppet-master[23727]: puppet02.bkjk.cn has a waiting certificate request
[root@Master-node ~]# ll /var/lib/puppet/ssl
total 28
drwxr-xr-x 5 puppet puppet 4096 Jul 25 15:02 ca
drwxr-xr-x 2 puppet puppet 4096 Jul 25 15:02 certificate_requests
drwxr-xr-x 2 puppet puppet 4096 Jul 25 15:02 certs
-rw-r–r– 1 puppet puppet 967 Jul 25 15:02 crl.pem
drwxr-x— 2 puppet puppet 4096 Jul 25 15:02 private
drwxr-x— 2 puppet puppet 4096 Jul 25 15:02 private_keys
drwxr-xr-x 2 puppet puppet 4096 Jul 25 15:02 public_keys
這個目錄和/etc/puppet/puppet.conf文件中配置的ssldir路徑有關係
也可以查看master端給自己授權的證書文件
[root@Master-node ~]# ll /var/lib/puppet/ssl/ca/signed
total 4
-rw-r–r– 1 puppet puppet 2029 Jul 25 15:02 Master-node.pem
2)建立master和agent之間的認證關係(三種註冊方式)
Agent需要向服務器端發出請求, 讓服務器對客戶端進行管理. 這其實是一個證書籤發的過程. 第一次運行puppet客戶端的時候會生成一個SSL證書並指定發給Puppet服務端,
服務器端如果同意管理客戶端,就會對這個證書進行簽發。
Agent在第一次連接master的時候會向master申請證書,如果沒有master沒有簽發證書,那麼puppet agent和master的連接是否建立成功的,agent會持續等待master簽發證書,
並會每隔2分鐘去檢查master是否簽發證書。
Puppet註冊方式基本上有三種:自動註冊、手動註冊和預簽名註冊。
————————————————————————————————————————————–
一、手動註冊(批量效率高)
手動註冊是由Agent端先發起證書申請請求,然後由Puppetserver端確認認證方可註冊成功,這種註冊方式安全係數中等,逐一註冊(puppet cert –sign certnmame)
在節點數量較大的情況下是比較麻煩的,效率也低,批量註冊(puppet cert –sign –all)效率很高,一次性便可註冊所有的Agent的請求,但是這種方式安全係數較低,
因為錯誤的請求也會被註冊上。
1)需要先在Agent節點申請註冊(三台Agent節點機都要操作)
由於已經Agent的puppet.conf文件里設置了server地址,因此下面向Master請求認證的命令中不需要跟服務端地址。
否則需要在下面的命令中添加Master服務端地址,即添加”–server Master-node”
[root@Agent-node1 ~]# puppet agent –test
Info: Creating a new SSL key for agent-node1
Info: Caching certificate for ca
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for agent-node1
Info: Certificate Request fingerprint (SHA256): E0:B4:04:52:46:C0:D4:38:92:7B:EA:90:3A:5E:EF:D8:6E:85:D3:61:77:6A:34:10:24:0F:15:B6:1A:9C:13:EC
Info: Caching certificate for ca
Exiting; no certificate found and waitforcert is disabled
2)Master服務器端確定認證
現在Master服務器端查看認證情況
[root@Master-node ~]# puppet cert –list
“agent-node1” (SHA256) E0:B4:04:52:46:C0:D4:38:92:7B:EA:90:3A:5E:EF:D8:6E:85:D3:61:77:6A:34:10:24:0F:15:B6:1A:9C:13:EC
“agent-node2” (SHA256) FD:FC:10:22:48:BD:17:3C:6E:3E:C5:A1:32:6A:CD:E8:E7:47:33:F9:F2:34:45:C9:59:57:B1:0D:13:10:FE:37
“agent-node3” (SHA256) 55:C0:CA:EF:F1:1A:3F:E2:53:0D:A8:F6:32:EB:8C:D8:B2:C8:51:9F:0A:4B:4C:0A:78:C5:57:E6:49:02:FC:90
[root@Master-node ~]# puppet cert –list –all //加–all參數,就能查看到puppet給自己簽發的本地證書了
“agent-node1” (SHA256) E0:B4:04:52:46:C0:D4:38:92:7B:EA:90:3A:5E:EF:D8:6E:85:D3:61:77:6A:34:10:24:0F:15:B6:1A:9C:13:EC
“agent-node2” (SHA256) FD:FC:10:22:48:BD:17:3C:6E:3E:C5:A1:32:6A:CD:E8:E7:47:33:F9:F2:34:45:C9:59:57:B1:0D:13:10:FE:37
“agent-node3” (SHA256) 55:C0:CA:EF:F1:1A:3F:E2:53:0D:A8:F6:32:EB:8C:D8:B2:C8:51:9F:0A:4B:4C:0A:78:C5:57:E6:49:02:FC:90
+ “master-node” (SHA256) DB:81:FB:58:D7:FF:DC:17:3C:C2:4D:7B:2E:DF:35:C2:F5:4D:B8:D2:AE:9D:EF:E0:73:44:11:07:C4:C2:72:23
以上結果中:
左邊有+號的,表示已經簽發,puppet首先會給自己簽發一個本地證書;客戶端的證書前沒+號,這就等待服務端簽發。
接着Master服務端簽發證書,及註冊Agent節點
[root@Master-node ~]# puppet cert –list agent-node1
[root@Master-node ~]# puppet cert –list agent-node2
[root@Master-node ~]# puppet cert –list agent-node3
[root@Master-node ~]# puppet cert –sign –all //上面三個命令是分別給單獨的一個Agent頒發證書,效率低下!可以使用這個命令代替,表示簽發所有Agent的證書
再次查看認證情況,發現已經都認證了(左邊都有+號了)
[root@Master-node ~]# puppet cert –list –all
+ “agent-node1” (SHA256) 86:61:2A:99:38:54:E3:FD:E0:8F:40:D4:2D:75:83:6F:64:B6:36:E1:B0:97:0D:B5:82:9C:69:95:D2:95:98:92
+ “agent-node2” (SHA256) 63:BF:AA:C2:C5:1E:A6:64:47:72:85:B3:4B:32:3E:07:C3:70:8D:86:D3:86:53:1A:FF:F9:9E:93:46:46:CB:13
+ “agent-node3” (SHA256) 41:B1:A7:3C:E3:7D:47:32:21:4F:25:8A:5E:96:77:1A:E0:FE:45:C3:42:0C:BC:D7:0A:0A:D1:E9:BF:FA:E1:96
+ “master-node” (SHA256) DB:81:FB:58:D7:FF:DC:17:3C:C2:4D:7B:2E:DF:35:C2:F5:4D:B8:D2:AE:9D:EF:E0:73:44:11:07:C4:C2:72:23
以下文章點擊率最高
Loading…