设为首页 收藏本站
查看: 1997|回复: 0

[经验分享] Puppet 3.7 Agent/Master HTTPS通信过程及手动验证过程

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-12-2 09:52:08 | 显示全部楼层 |阅读模式
上次在1.0 中为大家介绍了如何安装最新的Puppet 3.7 以及使用最新的nginx 1.6 来替换默认的Webrick来实现高性能的HTTP服务...
  本次继续来介绍Puppet Agent和Master的详细通讯和同步的执行流程...

1. 证书验证过程...
    ssl的证书都保存在..在Agent进行查看

1
2
[iyunv@agent1 ~]# puppet config print ssldir
/var/lib/puppet/ssl



    a) 首先查看本地是否存在私钥证书...
1
2
3
4
5
6
7
8
9
10
#如果存在删除 rm -rf /var/lib/puppet/ssl
[iyunv@agent1 ~]# ls /var/lib/puppet/ssl/private_keys/$HOSTNAME.pem
ls: cannot access /var/lib/puppet/ssl/private_keys/agent1.dbsa.cn.pem: No such file or directory

#如果证书不存在,通过下面命令创建一个...
puppet cert generate $HOSTNAME

#然后仅保留公钥和私钥,其他的删掉.
rm -rf /var/lib/puppet/ssl/ca/
rm -rf /var/lib/puppet/ssl/certs/$HOSTNAME.pem




     b) 从Server下载ca..

1
curl -sk https://master.dbsa.cn:8140/production/certificate/ca > /var/lib/puppet/ssl/certs/ca.pem




    c) 查看$ssldir/certs/<name>.pem 是否存在...
1
2
3
4
#如果是刚通过puppet cert generate 创建的证书,这个文件肯定存在.
#但是通过上面的命令删掉后,就不存在了..
[iyunv@agent1 ssl]# ll /var/lib/puppet/ssl/certs/$HOSTNAME.pem
ls: cannot access /var/lib/puppet/ssl/certs/agent1.dbsa.cn.pem: No such file or directory




    d) 通过Server获取$ssldir/certs/<name>.pem
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#如果可以查询到,说明证书已经被签署过...
curl -sk https://master.dbsa.cn:8140/production/certificate/$HOSTNAME  
#如果上面的命令能查询到,执行下面的命令把签署过的证书保存下来...
curl -sk https://master.dbsa.cn:8140/production/certificate/$HOSTNAME > /var/lib/puppet/ssl/certs/$HOSTNAME.pem


#如果通过上面的命令无法获取证书...可能是在Puppet端没有对证书进行过签名..
#可以通过下面的命令查询未签名的证书...,如果查询到证书,说明证书为签署,下次会在进行重试...
curl -sk  https://master.dbsa.cn:8140/production/certificate_request/$HOSTNAME



#如果上面的命令也无法获取证书,那就是Agent没有向Master发起过证书签名的请求
#通过下面的命令创建请求的csr文件,然后发送请求.....
openssl req -new -key /var/lib/puppet/ssl/private_keys/$HOSTNAME.pem -subj "/CN=$HOSTNAME" -out /var/lib/puppet/ssl/certificate_requests/$HOSTNAME.pem  -sha256
curl -k -H"Content-Type: text/plain" -X PUT https://master.dbsa.cn:8140/production/certificate_request/$HOSTNAME --data-binary @/var/lib/puppet/ssl/certificate_requests/$HOSTNAME.pem




    e) 通过私钥和ca签署过的证书抓取crl.pem
1
2
#crl主要是验证证书的有效性,撤销的证书等..
curl -sk https://master.dbsa.cn:8140/prod ... _revocation_list/ca --key /var/lib/puppet/ssl/private_keys/$HOSTNAME.pem  --cert /var/lib/puppet/ssl/certs/$HOSTNAME.pem  > /var/lib/puppet/ssl/crl.pem






2. 获取主机信息...
    在Puppet中Agent和Master都是通过RESTful的HTTPS API进行通信。

    Agent通过私钥将数据加密,发送给Server.
    Server通过Agent签署的csr证书,解密数据,并加密数据发回给Agent
    Agent收到数据后用私钥解开.
    并且通过crl来验证证书的有效性

   a) 在证书验证完毕后,开始获取该Agent在Server中的对象信息..
1
2
3
4
5
6
7
8
9
10
curl -sk --key /var/lib/puppet/ssl/private_keys/$HOSTNAME.pem  --cert /var/lib/puppet/ssl/certs/$HOSTNAME.pem  https://master.dbsa.cn:8140/production/node/$HOSTNAME

#返回的json数据结构为
[iyunv@agent1 ~]# ruby aa.rb
{"data"=>
  {"environment"=>"production",
   "name"=>"agent1.dbsa.cn",
   "parameters"=> { key => value #facter的信息 }},
"document_type"=>"Node"
}




   b) 抓取plugin的元数据..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
curl -sk --key /var/lib/puppet/ssl/private_keys/$HOSTNAME.pem  --cert /var/lib/puppet/ssl/certs/$HOSTNAME.pem  "https://master.dbsa.cn:8140/production/file_metadatas/plugins?recurse=true&links=manage"

#返回的json数据结构为一个列表,每个资源都是一个Puppet libs目录中的一个文件..
[{"metadata"=>{"api_version"=>1},
  "document_type"=>"FileMetadata",
  "data"=>
   {"mode"=>420,
    "links"=>"manage",
    "type"=>"file",
    "path"=>"/etc/puppet/modules/base/lib",
    "destination"=>nil,
    "relative_path"=>"facts/aa.rb",
    "group"=>0,
    "checksum"=>
     {"type"=>"md5", "value"=>"{md5}d41d8cd98f00b204e9800998ecf8427e"},
    "owner"=>0}},{},{},{}]

#在继续对json进行迭代抓取所有的文件,保持到本地..
curl -k --key /var/lib/puppet/ssl/private_keys/agent1.dbsa.cn.pem  --cert /var/lib/puppet/ssl/certs/agent1.dbsa.cn.pem  https://master.dbsa.cn:8140/prod ... plugins/facts/aa.rb > /var/lib/puppet/lib/facts/aa.rb




   c) 通过所有facter获取数据,并提交Server。
1
2
3
4
#然后将本地facter获取的数据以json的方式post到server的这个位置..
https://master.dbsa.cn:8140/production/catalog/$HOSTNAME

#提交后会返回一个catalog。





3. 编译catalog

1
2
3
4
5
6
7
8
9
10
11
12
13
#在base模块中添加一个文件资源..
modules/base/manifests/init.pp
  file {
    "/tmp/test.txt":
      owner => root, group => root, mode => 644,
      source => "puppet:///base/test.txt";
  }

#在fileserver.conf中,给予文件挂载点访问的权限
/etc/puppet/fileserver.conf
[base]
path /etc/puppet/modules/base/files
allow *




    a)  标准编译
       循环文件源数据,如果有变化抓回到本地...
1
2
3
4
curl -sk --key /var/lib/puppet/ssl/private_keys/$HOSTNAME.pem  --cert /var/lib/puppet/ssl/certs/$HOSTNAME.pem "https://master.dbsa.cn:8140/production/file_metadata/base/test.txt?links=manage&source_permissions=use"

#获取文件的md5如果发生变化,抓回到本地..
curl -sk --key /var/lib/puppet/ssl/private_keys/$HOSTNAME.pem  --cert /var/lib/puppet/ssl/certs/$HOSTNAME.pem "https://master.dbsa.cn:8140/production/file_content/base/test.txt"




    b)  静态编译
       配置Server启用静态编译,所有文件的源数据会嵌入到catalog中...
1
2
3
4
5
6
7
8
9
#配置Server的puppet.conf
catalog_terminus = static_compiler

#配置/etc/puppet/manifests/site.pp
filebucket { puppet:
  path => false,
}

#然后重启server端的web进程




        循环所有文件的源数据
1
2
#如果文件不一致~..直接通过md5抓取文件.
curl -sk --key /var/lib/puppet/ssl/private_keys/$HOSTNAME.pem  --cert /var/lib/puppet/ssl/certs/$HOSTNAME.pem "https://master.dbsa.cn:8140/production/file_bucket_file/md5/60b725f10c9c85c70d97880dfe8191b3"





4. Agent执行完成,发送报告
    发送报告到Server..
1
通过PUT的方式将报告发送到 /report/<node>



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-34292-1-1.html 上篇帖子: Puppet 3.7部署 下篇帖子: Puppet 3.7 Mcollective+SSL加密和权限验证 通信
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表