工作之后我们作为运维人员会用到很多的运维工具,而puppet就是其中的一种,在诸多的自动化工具中,只要会使用一个就足矣,当然如果你有精力可以多搞几个。

背景知识


Puppet的核心功能是配置管理。一般来说,用户在master上集中做配置,同时,被管理节点上的agent会定期从master上下载配置数据,再应用(apply)到本地,从而使管理节点的状态(用户,组,文件,安装包,服务等的设置和运行状态)与masters上定义的保持一致。

有时,出于测试的目的,并不希望真的应用配置,那么就需要执行puppet agent –test –noop让agent运行在dry-run状态

触发条件


在无master模式下(masterless),可以运行puppet agent apply <manifest文件路径> 命令直接加载本地manifest,并应用到本地。这种方式一般只用于测试,生产环境大都使用agent/master模式。

在agent/master模式下,agent默认每30分钟自动触发一次。也就是说在master上做的任何更改可能要过30分钟才能在agent端生效。如果你想改变这个时间间隔,可以通过在agent上修改puppet.conf的runinterval属性

    [agent]      runinterval=10         #修改为每10分钟运行一次

或者使用splay属性

    [agent]      splay=true              #默认是false。设置为true之后,运行间间隔变为随机数。当agent很多时,可以一定程度降低master的负载    splaylimit = 20m     #间隔最长是20分钟,也可以设置成秒,分,小时,天,年

在agent/master模式下,还可以从master上运行puppet kick命令主动触发。为了使用这个功能,需要做以下配置。

1  在agent的puppet.conf中打开listen属性或者运行puppet agent –listen,然后agent就会在8139端口监听master发过来的指令。

    [agent]      listen = true         #agent会监听本地8139端口,需重启服务

注意:如果agent节点有防火墙,打开8139端口

2  然后在master上运行puppet agent <agent节点FQDN>触发一次新的配置应用。

工作流程


1. agent向master发起连接,并使用SSL证书相互认证身份。如果agent是第一次连接master,agent会生成私钥,下载CA证书的副本,提交证书申请,然后等待一个超时(waitforcert)。如果master在这个时间内签发了agent的证书,agent会下载证书,继续后面步骤。

2. 如果pluginsync是true,agent从master下载plugin

3. agent向master请求catalog,同时向master发送fact(软件及硬件信息,比如hostname, ip).然后等待catalog生成。

4. master使用site.pp(4的左侧部分)或者ENC(4的右侧部分)进行节点分类,获取agent节点所需的配置。然后使用一些agent/master提供的变量,比如facts,environement还有内部变量,编译相关manifest生成catalog

5. agent从master下载catalog,然后应用到本地。

6. 如果catalog中使用了mount point,比如"source=>"puppet:///abc",agent会在应用过程中访问master的相关URI(/file_metadata/和/file_content/)下载文件内容并应用到本地

7. agent将应用结果生成report,发送给master

8. 结束本次应用,agent等待下一次。

注意:在以上agent/master的通讯过程中,都是agent主动调用master上暴露出来的RESTful API并将数据“拉”到本地,master并不主动向agent发送任信息。

下面我们来看看上边步骤中涉及到的各种功能和配置

SSL证书及认证


证书相关的属性可以在agent/master的puppet.conf里配置

[main]  ssldir=/var/lib/puppet/ssl                    #设置存储所有SSL证书及相关文件的目录[agent]               #以下为可选配置。不设置会使用默认值certname=mycert.example.com         #agent节点的证书名称,默认是节点FQDN.等同于puppet agent --certname mycert.example.com。master会用这个值来做节点分类waitforcert=300s                               #默认值120秒。这个例子中,如果master没有为当前节点签发的证书,agent等待300秒再检查。等同于puppet agent --waitforcert 300. 

注意:agent需要对master URI(/certificate/,/certificate/ca和/certificate_request)有相应权限,以读取CA证书,提交证书申请和下载签发的证书。权限设置在auth.conf中。 默认是所有agent对这些URI都有权限。

证书及相关文件存在下面的目录中

/var/lib/puppet/ssl                    #存储所有SSL证书相关文件,在puppet.conf中定义为$ssldir ├── ca                                    #CA证书目录,只存在于master上  │   ├── ca_crl.pem                 #被CA取消(revoke)的证书│   ├── ca_crt.pem                 #CA证书│   ├── ca_key.pem                #CA证书私钥│   ├── inventory.txt                #所有CA证书签过的证书的列表│   ├── private│   │   └── ca.pass                 #保护CA证书私钥的密码│   ├── requests                     #存储所有master收到的但还未签署的agent的证书│   ├── serial                          #下一个被签证书的序列号│   └── signed                        #存储所有的已签证书,包含master和所有agent的证书│       ├── agent.pem        │       └── master.pem├── certificate_requests          #当前节点所生成的证书申请,包括已提交和签发的├── certs                                 #当前节点所有可见的已经签发的证书│   ├── ca.pem                       #CA证书的拷贝  │   └── master.pem                 #当前节点的已经被签证书├── private                         ├── private_keys                    #当前节点的私钥│   └── master.pem└── public_keys                     #当前节点公钥    └── master.pem

也可以通过下面的命令查看/签发/撤销/清除证书

puppet cert list                                         #显示等待签署的证书puppet cert list -a                                     #显示所有的证书, 结果中+开始的行表示已经签发(sign)的证书,-的行表示已经撤销(revoke)的证书,没有+/-的行是已经提交申请,等待被签发的证书puppet cert sign -a|<hostname>              #签署所有的或者特定节点的证书puppet cert clean -a|<hostname>            #物理上删除该证书所有文件。没有证书,agent会连接master失败puppet cert revoke -a|<hostname>         #撤销证书。Pupet将证数加入ca_crl.pem,但是不删除物理文件。效果与clean相同,导致agent连接master失败   puppet config print ssldir --p agent        #显示ssldir的值

如果证书被意外清除或者撤销,可以重新生成

1 在master上清除证书记录和相关物理文件

puppet cert clean <certname>

2 停止agent进程,例如

puppet resource service puppet ensure=stopped

3 在agent节点上找到证书目录(默认是/var/lib/puppet/ssl)

puppet config print ssldir --p agent

4 在agent节点上手工删除$ssldir目录

5 在agent节点重新启动agent,这一过程会自动提交证书申请

puppet resource service pe-puppet ensure=running

6 在master上签署证书

puppet cert list puppet cert sign <certname>

如果有很多管理节点,也可以使用autosign来自动签发证书

1 在master上修改puppet.conf

[main] autosign=true  #允许autosign

2 在master上修改/etc/puppet/autosign.conf,创建白名单

*.scratch.example.com   #master自动签发名字(certname)以scratch.example.com结束的证书

更多内容请关注:辛舒展08

Puppet应用配置的工作原理相关推荐

  1. BOSHIDA 电源模块 PLC的硬件结构配置与工作原理

    BOSHIDA  电源模块 PLC的硬件结构配置与工作原理 中.大型PLC的结构外型,它通常采用积木式结构,可以根据需要将各种标准模块进行搭接,常用的模块有电源模块.CPU模块.输入模块.输出模块以及 ...

  2. 交换机的配置、工作原理以及管理MAC地址表

    1.网桥和交换机 网桥: (1)主要基于软件 (2)每个网桥实现一个spanning-tree 交换机 (1)主要基于硬件(ASIC) -(2) 每个交换机可以支持多个spanning-tree sw ...

  3. 聊一聊微服务常见配置中心工作原理

    0. 环境 nacos版本:1.4.1 Spring Cloud : 2020.0.2 Spring Boot :2.4.4 Spring Cloud alibaba: 2.2.5.RELEASE S ...

  4. SAP Spartacus 默认路由配置的工作原理

    这个默认配置文件的名称:default-routing-config.ts 查看哪些地方消费了 defaultRoutingConfig: provudeDefaultConfig 是一个 helpe ...

  5. DRBD安装配置、工作原理及故障恢复

    一.DRBD简介 DRBD的全称为:Distributed ReplicatedBlock Device(DRBD)分布式块设备复制,DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群.其实 ...

  6. Tomcat工作原理 、JVM内存溢出及合理配置、配置文件详解

    一 Tomcat工作原理 Server 要完成的任务很简单,就是要能够提供一个接口让其它程序能够访问到这个 Service 集合.同时要维护它所包含的所有 Service 的生命周期,包括如何初始化. ...

  7. Redis进阶 - Redis主从工作原理详解

    文章目录 主从配置 主从工作原理 全量复制 增量复制 主从复制风暴 主从配置 简要回顾一下,Redis的主从配置 复制一份redis.conf文件 将相关配置修改为如下值: port 6380pidf ...

  8. 计算机网络——网络硬件和网络设备及其工作原理

    计算机网络--网络硬件和网络设备及其工作原理 常见的网络硬件有网卡.中继站.集线器.桥连接器.交换机.路由器. 一. 网卡: 网卡是工作在链路层的网络组件,是局域网中连接计算机和传输介质的接口,不仅能 ...

  9. Nginx 反向代理工作原理简介与配置详解

    Nginx 反向代理工作原理简介与配置详解 测试环境 CentOS 6.8-x86_64 nginx-1.10.0 下载地址:http://nginx.org/en/download.html 安装 ...

最新文章

  1. php 时间倒计时代码 个人写法 有好的想法的欢迎贴出来分享
  2. 量子位MEET大会正式启动!邀AI企业共同预见智能科技新未来
  3. Java Programming Test Question 3
  4. netflix zuul 1.x与zuul2.x之比较
  5. 利用TensorFlow和神经网络来处理文本分类问题
  6. ThinkPHP框架整合phpqrcode生成二维码DEMO
  7. 最小熵原理系列:词向量的维度应该怎么选择?
  8. JVM内存溢出分析-实战JVM(二)
  9. 利用已有的大数据技术,如何构建机器学习平台
  10. Eclipse中Mybatis的自动提示的配置
  11. 实现一个简单的Tomcat 1
  12. 【疲劳检测】基于matlab行为特征疲劳驾驶检测【含Matlab源码 944期】
  13. 欧姆龙编程软件(CXONE)使用教程
  14. 通过阿里云API 身份证图片或拍身份证 读取身份证正反面信息
  15. 我的政治理想《爱因斯坦文集》
  16. Vue中使用微信JSDK实现图片上传
  17. 记录一次关于百度网盘打开提示页面不存在的问题(吃相不要太难看)
  18. 保研经验分享:痛并快乐的成长经历
  19. Wi-Fi弱网传输优化不成功有感
  20. 响铃:只做“连接器”,企业微信如何实现“人即服务”

热门文章

  1. Python官方中文教程(转)1
  2. 华为HCNA实验11-配置直连路由
  3. html css加载不了_前端面试准备笔记之html和css(03)
  4. 【运维面试】面试官:MySQL 存储引擎有哪几种,他们的区别是什么?
  5. KMP算法--子串查找问题
  6. 哪里有适合Mac苹果电脑系统的音频格式转换软件
  7. Rule Compilation error xxx cannot be resolved
  8. keil5软件添加芯片
  9. 电销人怎么利用外呼系统避免封号?
  10. 【正则表达式】——10个非常常见的正则表达式案例,轻松搞定正则表达式