puppet部署與應用

               Puppet部署於應用

1、工作流程


1)客戶端puppet調用facterfacter是通過ssl加密收集及檢測分析客戶端配置信息的一個工具),facter探測出主機的一些變量,如主機名,內存大小,ip地址等。Puppet把這些信息通過ssl連接發送到服務器器端

2)服務器端的puppetmaster通過facter工具分析檢測客戶端的主機名,然後找到項目主配置文件mainfest裏面對應的node配置,並對該部分內容進行解析。Facter發送過來的信息可以作爲變量處理,node牽扯到的代碼才解析,其他沒牽涉的代碼不解析,解析分爲幾個階段,首先進行語法檢查,如果語法沒錯,就繼續解析,解析的結果生成一箇中間的“僞代碼”,然後把僞代碼發送給客戶端。

3)客戶端接收到僞代碼,並執行,客戶端把執行的結果發送給服務器。

4)服務器把客戶端的執行結果寫入日誌。

 Puppet工作過程有以下兩點值得注意:

1)爲了保證安全,client和master之間是基於ssl和證書的,只有經master證書認證的client可以與master通信。

2)Puppet會讓系統保持在人們所期望的某種狀態並一直維持下去,例如:檢測某個文件並保證其一直存在,保證ssh服務始終開啓,如果文件被刪除了或者ssh服務被關閉了,puppet下次執行時(默認30分鐘),會重新創建該文件或者啓動ssh服務。

 


 

wKiom1kR0CDiIULHAACliWU0Qb8471.png-wh_50 


實驗環境:

wKiom1kR0HvyRTvyAAApF6UbgI8240.png-wh_50

實驗目標:

1.通過puppetmaster管理clinet端的ssh服務

2.客戶端可以主動拉取

3.master可以主動推送

一、搭建ntp server(已經安裝)

server 127.127.1.0

fudge 127.127.1.0 stratum 8

wKioL1kR0JXCPxyAAAARMVGeFaQ398.png-wh_50 

[root@centos4 ~]# service ntpd start

[root@centos4 ~]# chkconfig ntpd on

wKiom1kR0KniO1lQAAAah7qA4Oc227.png-wh_50 

二、搭建puppetmaster

1.規劃服務器主機名

[root@centos1 ~]# vim  /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=master.test.com

wKiom1kR0LyyHtZWAAAPd-crwQI813.png-wh_50 

[root@centos1 ~]# hostname master.test.com

[root@centos1 ~]# bash

wKioL1kR0NPS_I3dAAAewR6_wFg693.png-wh_50 

2.添加主機名解析;在互聯網中可以搭建DNS服務

[root@centos1 ~]# vim /etc/hosts

192.168.1.1 master.test.com

192.168.1.2 client1.test.com

192.168.1.3 client2.test.com

wKiom1kR0OzxM8DwAAAS_QocqZo965.png-wh_50 

2.服務器時間同步

[root@master ~]#yum  -y  install  ntp( 默認已經安裝)

[root@master ~]# ntpdate 192.168.1.4

wKioL1kR0P-gHJ3DAAAc2x1WA_0554.png-wh_50 

3.安裝ruby,先安裝compat-readline5(系統盤中),也可以一併安裝

由於puppet是採用ruby語言開發,所以無論是源碼還是RPM方式安裝puppet,我們都必須要先安裝ruby語言環境

[root@master ~]# rpm  -ivh  /mnt/Packages/compat-readline5-5.2-17.1.el6.x86_64.rpm

wKioL1kR0UTxwUTiAAATnCRZzlY654.png-wh_50 

[root@master ~]# rpm  -ivh  /mnt/ruby-*.rpm

wKiom1kR0VqjehunAAAM8_pKN8M657.png-wh_50 

4.檢查ruby版本

[root@master ~]# ruby  -v

ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]

wKiom1kR0XKC6UIPAAAkVrfROjk834.png-wh_50 

5.安裝facter安裝

[root@master ~]# useradd  -s /sbin/nologin  puppet

wKiom1kR0YOg9fapAAAOdKZ5CGk026.png-wh_50 

安裝facter源碼包

[root@master ~]# tar  zxf  /mnt/facter-1.7.1.tar.gz  -C  /usr/src

[root@master ~]# cd  /usr/src/facter-1.7.1/

[root@master facter-1.7.1]# ruby  install.rb

wKioL1kR0ZTDBcDWAAAWz10bF74365.png-wh_50 

6.安裝puppet源碼包

①安裝

[root@master puppet-2.7.21]# tar zxf /mnt/puppet-2.7.21.tar.gz -C /usr/src

[root@master puppet-2.7.21]# cd  /usr/src/puppet-2.7.21/

[root@master puppet-2.7.21]# ruby install.rb

wKiom1kR0afTqeYqAAAVzCTzGt8326.png-wh_50 

②複製配置文件

[root@master puppet-2.7.21]# cp  conf/redhat/fileserver.conf   /etc/puppet/

[root@master puppet-2.7.21]# cp  conf/redhat/puppet.conf  /etc/puppet/

[root@master puppet-2.7.21]# cp  conf/redhat/server.init  /etc/init.d/puppetmaster

wKioL1kR0dCBbwQLAAA66EfSKrI745.png-wh_50 

③修改文件屬性

[root@master puppet-2.7.21]# chmod +x  /etc/init.d/puppetmaster

wKioL1kR0eSiSXu4AAAUHPZLjd8856.png-wh_50 

④創建puppet主目錄

[root@master puppet-2.7.21]# mkdir /etc/puppet/manifests  //存放配置文件

[root@master puppet-2.7.21]# mkdir /etc/puppet/modules   //存放模塊配置

wKioL1kR0heToR2KAAAbT0b6JHA063.png-wh_50 

7.puppet服務證書請求與簽名

master端配置

①關閉防火牆

#service  iptables  stop     //之前已經關閉

②修改配置文件。在【main】標題下添加以下一行:配置服務器模塊路徑

[root@master ~]# vim  /etc/puppet/puppet.conf    

modulepath = /etc/puppet/modules:/usr/share/puppet/modules

wKiom1kR0kSQ1fFpAAAXbzwnFGQ208.png-wh_50 

③啓動puppet主程序

[root@master ~]# /etc/init.d/puppetmaster  start

Starting puppetmaster:                                     [  OK  ]

wKiom1kR0lfzPI7nAAASaPtyXr0138.png-wh_50 

④查看puppet監聽端口

[root@master ~]# netstat -anpt|grep 8140

tcp        0      0 0.0.0.0:8140                0.0.0.0:*                   LISTEN      2123/ruby     

wKiom1kR0prx_5XmAAAkZ4aiAaU412.png-wh_50 

二、搭建puppetclient1

1.規劃服務器主機名

[root@centos1 ~]# vim  /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=client1.test.com

wKiom1kR0sTgKkpdAAAQIP3v2IQ308.png-wh_50 

[root@centos1 ~]# hostname client1.test.com

[root@centos1 ~]# bash

wKioL1kR0tjh4UWuAAAijgi6LMQ208.png-wh_50 

2.添加主機名解析

[root@centos1 ~]# vim /etc/hosts

192.168.1.1 master.test.com

192.168.1.2 client1.test.com

192.168.1.3 client2.test.com

wKiom1kR0unhU-2DAAAOUhMw_Eo468.png-wh_50 

3.確保通過域名pingpuppetmaster

[root@client1 ~]# ping master.test.com

PING master.test.com (192.168.1.1) 56(84) bytes of data.

64 bytes from master.test.com (192.168.1.1): icmp_seq=1 ttl=64 time=7.29 ms

wKioL1kR0wuAsc1fAAA-J4iwe50294.png-wh_50 

3.服務器時間同步

[root@client1 ~]# ntpdate 192.168.1.4

 7 May 16:24:22 ntpdate[2532]: adjust time server 192.168.1.4 offset -0.144460 sec

wKioL1kR0x7hEEOeAAAeNRWgN0Q974.png-wh_50 

4. 安裝ruby,先安裝compat-readline5(系統盤中),也可以一併安裝

[root@master ~]# rpm  -ivh  /mnt/Packages/compat-readline5-5.2-17.1.el6.x86_64.rpm

[root@master ~]# rpm -ivh /mnt/ruby-*.rpm

wKiom1kR0y-jS2b1AAAj8k1eB74707.png-wh_50 

5檢查ruby版本

[root@master ~]# ruby  -v

ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]

wKioL1kR00HwP_PhAAAYukz5Gmc165.png-wh_50 

6.安裝facter

[root@client1 facter-1.7.1]# useradd  -s  /sbin/nologin  puppet

[root@client1 ~]# tar zxf /mnt/facter-1.7.1.tar.gz  -C  /usr/src

[root@client1 ~]# cd  /usr/src/facter-1.7.1/

[root@client1 facter-1.7.1]# ruby install.rb

wKiom1kR01WDrZoAAAAhbz1ZU3I661.png-wh_50 

7.安裝puppet

[root@client1 facter-1.7.1]# tar  zxf /mnt/puppet-2.7.21.tar.gz  -C  /usr/src

[root@client1 facter-1.7.1]# cd  /usr/src//puppet-2.7.21/

[root@client1 puppet-2.7.21]# ruby install.rb

wKiom1kR02aQTBvfAAAYXsQuhio781.png-wh_50 

8.複製配置文件

[root@client1 puppet-2.7.21]# cp conf/redhat/puppet.conf  /etc/puppet

[root@client1 puppet-2.7.21]# cp conf/redhat/client.init /etc/init.d/puppetclient

wKiom1kR033BKZvtAAAmvQXyGKQ500.png-wh_50 

9.修改文件屬性

[root@client1 puppet-2.7.21]# chmod  +x  /etc/init.d/puppetclient

wKioL1kR05DQvznaAAAOWu-xosY458.png-wh_50 

10.puppet服務證書與簽名

①關閉防火牆

[root@client1 puppet-2.7.21]# service iptables stop   //之前已經關閉

②修改client配置文件(兩臺client配置完全一樣)

#vim  /etc/puppet/puppet.conf

[main]

    # The Puppet log directory.

    # The default value is '$vardir/log'.

    logdir = /var/log/puppet

    # Where Puppet PID files are kept.

    # The default value is '$vardir/run'.

    rundir = /var/run/puppet

server = master.test.com

wKiom1kR06aS1Y5CAABUwJfaOZQ062.png-wh_50 

三、搭建puppetclient2

1.規劃服務器主機名

[root@centos1 ~]# vim  /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=client2.test.com

wKioL1kR07ihVz_9AAAQIXIQrWU972.png-wh_50 

[root@centos1 ~]# hostname client2.test.com

[root@centos1 ~]# bash

wKioL1kR08mx19waAAAgfWk6UpI075.png-wh_50 

2.添加主機名解析

[root@centos1 ~]# vim /etc/hosts

192.168.1.1 master.test.com

192.168.1.2 client1.test.com

192.168.1.3 client2.test.com

wKioL1kR09vhrIIQAAANwWMJkt8161.png-wh_50 

3.確保通過域名pingpuppetmaster

[root@client1 ~]# ping master.test.com

PING master.test.com (192.168.1.1) 56(84) bytes of data.

64 bytes from master.test.com (192.168.1.1): icmp_seq=1 ttl=64 time=7.29 ms

wKioL1kR0-vA6iUvAAAtughDl7c057.png-wh_50 

3.服務器時間同步

[root@client1 ~]# ntpdate 192.168.1.4

 7 May 16:24:22 ntpdate[2532]: adjust time server 192.168.1.4 offset -0.144460 sec

wKioL1kR0_7iiKkIAAAnRWjDNCE690.png-wh_50 

4. 安裝ruby,先安裝compat-readline5(系統盤中),也可以一併安裝

[root@master ~]# rpm  -ivh  /mnt/Packages/compat-readline5-5.2-17.1.el6.x86_64.rpm

[root@master ~]# rpm -ivh /mnt/ruby-*.rpm

wKioL1kR1BryfSWhAAAjImNqIO8986.png-wh_50 

5檢查ruby版本

[root@master ~]# ruby  -v

ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]

wKioL1kR1Czj4lzdAAAYiT4j26k529.png-wh_50 

6.安裝facter

[root@client1 facter-1.7.1]# useradd -s /sbin/nologin  puppet

[root@client1 ~]# tar zxf /mnt/facter-1.7.1.tar.gz -C /usr/src

[root@client1 ~]# cd /usr/src/facter-1.7.1/

[root@client1 facter-1.7.1]# ruby install.rb

wKioL1kR1D2zV4aBAAAdu-BuUTU597.png-wh_50 

7.安裝puppet

[root@client1 facter-1.7.1]# tar zxf /mnt/puppet-2.7.21.tar.gz -C /usr/src

[root@client1 facter-1.7.1]# cd /usr/src//puppet-2.7.21/

chmod 0644 /usr/share/man/man8/puppet-node.8

[root@client1 puppet-2.7.21]# ruby install.rb

wKiom1kR1FDz63zaAAAY3grNH9c839.png-wh_50 

8.複製配置文件

[root@client1 puppet-2.7.21]# cp conf/redhat/puppet.conf  /etc/puppet

[root@client1 puppet-2.7.21]# cp conf/redhat/client.init /etc/init.d/puppetclient

wKioL1kR1GGDsFkvAAAaUkpolYs801.png-wh_50 

9.修改文件屬性

[root@client1 puppet-2.7.21]# chmod  +x  /etc/init.d/puppetclient

wKiom1kR1HSy0xPmAAAQN3517wE495.png-wh_50 

10.puppet服務證書與簽名

①關閉防火牆

[root@client1 puppet-2.7.21]# service iptables stop  //已經關閉

②修改client配置文件(兩臺client配置完全一樣)

#vim  /etc/puppet/puppet.conf

[main]

    # The Puppet log directory.

    # The default value is '$vardir/log'.

    logdir = /var/log/puppet

    # Where Puppet PID files are kept.

    # The default value is '$vardir/run'.

    rundir = /var/run/puppet

server = master.test.com

wKiom1kR1I2BzPa-AABMte3YTjY658.png-wh_50 

四、註冊與申請

1.分別在客戶端client1client2上註冊

[root@client1 puppet-2.7.21]# puppet agent --server=master.test.com  --no-daemonize --verbose

wKioL1kR1Kei1AdCAAA_aceB7KE422.png-wh_50 

[root@client2 puppet-2.7.21]# puppet agent --server=master.test.com  --no-daemonize --verbose

wKioL1kR1LnzQm05AAA8BGazQh0929.png-wh_50 

這個指令的作用是將puppet agent不用守護進程的模式啓動,好處是能看到與服務器端的通信及證書籤名的過程,方便debug。 默認puppet每2分鐘向服務器端申請一次簽名直到獲得服務器端發來的經過簽名的證書才 start agent 服務

2.master上查看申請註冊的客戶端

[root@master ~]# puppet cert  --list  //查看申請註冊的客戶端

  "client1.test.com" (99:6A:C3:89:C8:1C:B5:75:24:BA:56:51:43:1E:EB:71)

  "client2.test.com" (B8:51:93:3D:5A:77:49:01:B6:1A:B8:EB:57:16:46:8B)

wKioL1kR1NOxRRNgAAAsO7Hw5cI368.png-wh_50 

3.master上將未註冊的客戶端進行註冊

[root@master ~]# puppet cert  sign  --all

wKiom1kR1OSz7udgAABxqe1oILk194.png-wh_50 

4.可以通過目錄去查看已經註冊的客戶端

[root@master ~]# ll /var/lib/puppet/ssl/ca/signed/

total 12

-rw-r----- 1 puppet puppet 1915 May  7 17:59 client1.test.com.pem

-rw-r----- 1 puppet puppet 1915 May  7 17:59 client2.test.com.pem

-rw-r----- 1 puppet puppet 1988 May  7 16:17 master.test.com.pem

wKioL1kR1PjSHXaQAABCDG7U0a0374.png-wh_50 

此時客戶端已經完整了證書的申請和簽名

五、配置實例

1.配置一個測試節點

節點信息:/etc/puppet/manifests/nodes

模塊信息:/etc/puppet/modules

爲了保護linuxssh端口爆破,批量修改客戶端sshd端口,將端口22改爲9922,並實現重啓工作

創建ssh模塊,模塊目錄爲ssh,模塊下面有三個文件:manifeststemplatesfiles

manifests:此目錄爲存放配置文件的目錄,裏面必須包含一個init.pp的文件,這是該模塊的入口文件

導入一個模塊的時候,會從init.pp開始執行。可以把所有的代碼都寫道init.pp裏面,也可以分成多個pp文件,init再去包含其他文件

定義class類名的時候必須是ssh,這樣能實現調用

files目錄是該模塊的文件發佈目錄,puppet提供一個文件分發機制/etc/ssh/sshd_conf

templates目錄包含erb模版文件

master端:

①創建需要的必要目錄

#mkdir  -p  /etc/puppet/modules/ssh/{manifests,templates,files}

#mkdir  /etc/puppet/manifests/nodes   //節點目錄作用與client

#mkdir /etc/puppet/modules/ssh/files/ssh   //控制ssh服務

#chown  -R  puppet  /etc/puppet/modules/  //修改權限

wKioL1kR1QyCEMVMAABFhN_y_8k822.png-wh_50 

此時/et/puppet/modules/ssh目錄下結構

[root@master ~]# ll /etc/puppet/modules/ssh

wKiom1kR1R-A2CDfAABCvuVYJLs572.png-wh_50 

②創建模塊配置文件install.pp

[root@master ~]# vim /etc/puppet/modules/ssh/manifests/install.pp

class ssh::install{

package{ "openssh":

        ensure => present

        }

}

wKioL1kR1TWgCAXLAAAVPSHr9bM252.png-wh_50 

③創建模塊配置文件config.pp

[root@master ~]# vim /etc/puppet/modules/ssh/manifests/config.pp

class ssh::config{

file { "/etc/ssh/sshd_config":

        ensure => present,

        owner =>"root",

        group =>"root",

        mode => "0600",

        source =>"puppet://$puppetserver/modules/ssh/ssh/sshd_config",

        require => Class["ssh::install"],

        notify => Class["ssh::service"],

 }

}

wKioL1kR1UahR4bPAABTiCS5SZA178.png-wh_50 

④創建service.pp

[root@master ~]# vim /etc/puppet/modules/ssh/manifests/service.pp

class ssh::service {

        service {"sshd":

                ensure => running,

                hasstatus =>true,

                hasrestart =>true,

                enable =>true,

                require =>Class["ssh::config"]

}

}

wKiom1kR1Vmi2d-TAAAj6ngb85M621.png-wh_50 

⑤創建模塊主配置文件,將以上配置文件加載進去,輸入以下信息:

[root@master ~]# vim /etc/puppet/modules/ssh/manifests/init.pp

class ssh{

        include ssh::install,ssh::config,ssh::service

}

wKioL1kR1Wzx8azHAAAScx1Gluc466.png-wh_50 

此時/etc/puppet/modules/ssh/manifests下有四個文件

[root@master ~]# ll /etc/puppet/modules/ssh/manifests/

wKioL1kR1YHTdZZSAAAucmOXcLw447.png-wh_50 

⑥建立服務器ssh統一維護文件

由於服務器和客戶端的sshd_config文件默認一樣,此時將服務器端/etc/ssh/sshd_config複製到模塊默認路徑

[root@master ~]# cp /etc/ssh/sshd_config  /etc/puppet/modules/ssh/files/ssh/

wKiom1kR1ZTiHWrpAAAHh2IoE0U498.png-wh_50

[root@master ~]#

⑦創建測試節點配置文件,並將ssh加載進去

[root@master ~]# vim /etc/puppet/manifests/nodes/ssh.pp

 

wKioL1kR1eixxW5EAAAkw9i6V44552.png-wh_50 

⑧將測試節點載入puppet,即修改site.pp

[root@master ~]# vim /etc/puppet/manifests/site.pp

wKioL1kR1frQN2F0AAAKseiHKAE319.png-wh_50 

⑨修改服務器端維護的sshd_config配置文件

[root@master ~]# vim /etc/puppet/modules/ssh/files/ssh/sshd_config

Port 9922    

wKiom1kR1hSTGCtkAAAp_1xfvNs972.png-wh_50 

⑩重新啓動puppet

[root@master ~]# /etc/init.d/puppetmaster restart

Stopping puppetmaster:                                     [  OK  ]

Starting puppetmaster:                                     [  OK  ]      

wKioL1kR1ifznvWqAAAXWTFvu6Y472.png-wh_50             

2.客戶端主動拉取  注:這裏使用clinet1測試;client2同理

[root@client1 puppet]# puppet agent  -t

wKiom1kR1j2Al-pKAAApRHbguIc418.png-wh_50 

 ①檢查客戶端/etc/ssh/sshd_config配置是不是自動變了

[root@client1 puppet]# vim /etc/ssh/sshd_config

Port 9922

②查看服務器ssh服務是否重啓,端口是否生效

[root@client1 puppet]# netstat -tunlp|grep ssh

wKioL1kR1lCAbaQIAAApqgWcHM8684.png-wh_50    

3.服務器推送同步

客戶端配置

①修改配置文件

[root@client1 puppet]# vim /etc/puppet/puppet.conf

最後一行添加如下

listen = true  //使puppet監聽8139端口

wKioL1kR1oKDIMZ_AAAE_kdaE90518.png-wh_50 

[root@client1 puppet]# vim /etc/puppet/auth.conf

allow *  //允許任何服務器推送

wKiom1kR1pPhMPVYAAAH13hsQzQ317.png-wh_50 

②啓動puppet客戶端

[root@client1 puppet]# /etc/init.d/puppetclient start

Starting puppet:                                           [  OK  ]

wKioL1kR1qbiz-YOAAASspGMCTA772.png-wh_50 

[root@client1 puppet]# netstat -anpt|grep 8139  //自身puppet端口號

wKioL1kR1rngtmkUAAAdKkQk2Ec539.png-wh_50 

③修改/etc/ssh/sshd_config配置文件

[root@client1 puppet]# vim /etc/ssh/sshd_config

Port  22

wKiom1kR1suiTKRxAAAWcqTgXp4475.png-wh_50 

[root@client1 puppet]#service  sshd  restart

wKioL1kR1t3y0p6fAAAViF2WwjU342.png-wh_50 

服務器端配置

④從服務器開始向客戶端推送

[root@master ssh]# puppet kick  client1.test.com

wKiom1kR1vHS-yzbAAAuQfSr8Ig894.png-wh_50 

⑤校驗結果

[root@client1 puppet]# vim /etc/ssh/sshd_config

Port 9922

wKiom1kR1wPCeJ_QAAAO9pzTBYA509.png-wh_50 

[root@client1 puppet]# service sshd restart

[root@client1 puppet]# netstat -anpt|grep 9922

wKiom1kR1xah5WQMAABFgTp6vwA894.png-wh_50   


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章