第一部分
准备篇
Puppet可谓是配置管理工具中的旗舰产品,有别于chef等其他配置管理工具,它可以使系统管理员的工作变得更轻松,从而提升工作效率,并且只需要维护简单的关系就能掌握一切。使用Puppet,我们可以从系统安装、配置管理、系统监控来实现运维体系的一体化、流水线化、产品化。通过简单的后台系统我们就可以完成所有的动作,并且能查看机器的进度与当前状态。是不是觉得这项工作非常让人振奋呢?那就让我们一起探究Puppet的奥秘吧!
本篇主要是为了更好地学习和使用Puppet而做的准备。我们通过第1章来了解Puppet,看看它的发展历程,重点掌握它的工作原理;通过第2章对安装、配置Puppet的讲解进一步加深对Puppet工作原理的理解;通过第3章的实例,创建一个属于自己的配置,进而掌握基本的配置方法;最后通过第4章学习Puppet的几种工作环境,我们以后能够更好地利用Puppet实现不同环境的配置管理。
第1章
认识Puppet
本章首先介绍什么是Puppet,为什么它具有这么优秀的特征,以及它的发展历程。随后将Puppet和当前主流开源配置管理工具进行对比,阐述为什么要使用Puppet。了解Puppet的组织结构并掌握Puppet的工作原理,这是本章的重点,希望读者多次阅读这部分内容,以便完全理解。Puppet最新版本为3.0(截至2013年9月),不同版本之间新的特性及是否可以混合使用,以及配置文件的相关知识,这些都是本章将要介绍的内容。
1.1Puppet的起源与发展现状
1.1.1什么是Puppet
官方的定义是这样的:Puppet是一个开源的新一代的集中化配置管理工具,它由自己所声明的语言表达系统配置,通过客户端与服务端之间的连接,维护着关系库。Puppet的设计目标是让Puppet成为一个由富有表现力的语言支撑的足够强大的库。这样只需要编写短短的几行代码的自动化应用程序即可实现设计目标。同时Puppet是开放的,允许添加任何新的功能。
通常这样定义:Puppet是一个跨平台的集中化配置管理系统,它使用自有的描述语言,可管理配置文件、用户、Cron、软件包,系统服务等,Puppet把这些统称为“资源”。Puppet的设计目标就是简化对这些资源的管理以及妥善处理资源之间的依赖关系。
Puppet是基于Ruby语言(http://www.ruby-lang.org/)并使用Apache协议授权的开源软件(在Puppet 2.7.0与Facter 1.6.0之前是基于GPLv2协议授权的),它既能以客户端-服务端(C/S)的方式运行,也能独立运行。客户端默认每30分钟会与服务端确认一次更新,以确保配置的一致性。
1.1.2Puppet起源与发展
Puppet主要由Luke Kanies和他的公司Puppet Labs开发,于2005年正式面世。Luke Kanies于1997年就涉足UNIX和系统管理,由于平常需要进行大量的开发工作,在试用当时的配置管理软件不满意后,他便想到自己开发一套工具来管理资源。他认为这套工具实现的关键是如何使每个资源成为一个合集,每个资源又有自己的行为,并且产生相应的行为动作。在Luke Kanies的努力下终于有了今天这款出色的Puppet产品。当然也感谢Ruby语言。
Puppet于2005年面世,发行版本也由0.2发展到了3.0。Puppet Labs的目标不只是把它当做配置工具,还把它当做“拯救世界”的工具。特别是在近几年,其发展势头迅猛。截至2011年11月Puppet Labs共融资1600万美元,加上商业软件Puppet Enterprise的发布及对Mcollective软件的收购,版本更新也更加迅速,但Puppet Labs的目标不只是让版本发行更迅速,还要极大地提升性能。我们可以看到2.7较之前版本在编译性能上提升了60%以上,3.0版本对Ruby1.9提供了完美支持、Master在CPU消耗上提升了6倍的性能、提供了更多发行版操作系统的支持。特别是在2012年5月,Puppet Labs率先与OpenStack整合,这非常振奋人心。由此可见,Puppet Labs的前景不可估量。
Puppet从0.25.x直接跳到大版本2.6且逐渐不再维护0.25.x,在2010年时通过Yum安装的Puppet还是0.25.x版本。有人会问2.6就比0.25.x性能好吗?其实不然,2.6主要是在功能上的改进,为此Puppet Labs改变了版本命令方式,增加了新的特性并取消了XML-RPC传输层,除此之外没有其他大的改动。因此我们可以理解为,只是命令方式的变更。
虽然目前Puppet在短短2年内由2.6发展至3.0,从3.0.0版本开始,Puppet使用的是严格的3段版本号,最左边为大版本号(功能向后兼容),中间为新功能变化,最右为修复bug。伴随着版本的更新官方文档也在快速更新当中,这为我们学习提供了很大的便捷,也增强了我们掌握Puppet的信心。
由于Puppet 0.2x支持的特性非常少,不建议再安装使用它。对于正在使用此版本的用户,建议升级成最新版。对于新用户,建议直接安装Puppet 3.0版本。对于正在使用Puppet 2.6或2.7的用户,建设逐步升级,且先升级Master,然后再升级Agent,平滑过渡,以避免遇到不可预知的问题。
提示
更多Puppet版本信息可参考:http://projects.puppetlabs.com/projects/1/wiki/Release_Notes。
. 1.1.3版本语言特征
Puppet各版本之间的语言也存在着差异,当然,版本越高,支持的特征越多,具体如表1-1所示。
表1-1Puppet各版本语言特征差异对比语法 0.24.x 0.25.x 2.6.x 2.7.x 3.x
运算符 支持 支持 支持 支持 支持
多资源的关系 支持 支持 支持 支持 支持
类的继承 支持 支持 支持 支持 支持
追加变量 支持 支持 支持 支持 支持
类命名 支持 支持 支持 支持 支持
C注释风格 支持 支持 支持 支持 支持
节点正则 不支持 支持 支持 支持 支持
变量表达式 不支持 支持 支持 支持 支持
正则表达式 不支持 支持 支持 支持 支持
条件表达式 不支持 不支持 支持 支持 支持
链接资源 不支持 不支持 支持 支持 支持
哈希 不支持 不支持 支持 支持 支持
类的参数化 不支持 不支持 支持 支持 支持
运行阶段 不支持 不支持 支持 支持 支持
In语法 不支持 不支持 支持 支持 支持
Unless语法 不支持 不支持 不支持 不支持 支持
1.1.4命令差异
Puppet命令在2.6版本发布时进行了变更,且在发布3.0版本时将2.6版本之前的旧命令完全丢弃。具体差异对比如表1-2所示。
表1-2不同版本Puppet的命令差异对比
2.6版本之前 2.6版本之后
Puppetmasterd Puppet master
Puppetd Puppet apply
Puppetca Puppet cert
Ralsh Puppet resource
Puppetrun Puppet kick
Puppetqd Puppet queue
Filebucket Puppet filebucket
Puppetdoc Puppet doc
Pi Puppet describe
1.1.5Puppet 3.0新特性
目前Puppet最新版为3.0,其中增添了许多新特性。
性能提升:目录编译采用JSON作为目录缓存。
增强操作系统与平台支持:对Ruby1.9的完美支持,对操作系统Windows、Solaris包和服务的更多支持,Yumrepo对SSL的支持。
使用Rubygems加载插件:可以通过Rubygems来安装和使用Puppet的扩展代码。
Server自动发现:通过DNS SRV寻找CA、Master、Report和Fileserver。
DSL/config变化:auth.conf增加allow_ip配置选项,unless支持,插件同步默认改为True,更新configure的语法。
其他BUG的修复:修复了3.0 Agent 与2.7Master工作的问题、kick无法工作问题、rack安装启动出错问题等。
注意
Puppet 3.0将不再支持Ruby 1.8.5以下版本。
1.2为什么要使用Puppet
1.2.1都有谁在使用Puppet
在笔者编写本书时,Puppet已拥有250家客户,包括Zynga、Twitter、纽约证券交易所、迪斯尼、Citrix、Oracle/Sun、Constant Contact、Match.com、Shopzilla、Google、RedHat等。国内越来越多的大公司也在使用Puppet,例如新浪、阿里巴巴、百度、腾讯、奇虎360、小米、United Stack、豆瓣、好乐买、趣游、PPTV等。
1.2.2常见集中化管理工具对比
目前开源的工具非常多,很多人在选择的时候犹豫不定,不知道哪个好。如果担心在使用过程中遇到问题没有人回答,资料太少而无从查起,那么选择当前最流行的工具无疑是最明智的。现在毫无疑问,应该选Puppet。
针对当前开源的配置管理工具,这里进行简单的汇总:Puppet、Chef、Func、Fabric、Capistrano、Cfengine等。下面我们就最常用的Puppet与Chef进行简单对比,主要是从用户、开发、平台、实例等几个角度出发,帮助读者从中发现Puppet的优势。在用户与第三方支持方面,Puppet更胜于Chef。详细对比如表1-3所示。
表1-3Puppet 和Chef对比
Puppet Chef
使用用户 Google、RedHat、Apple、Sina、… Admeld…
开发支持 第三方Foreman 无
商业运行 Enterprise Enterprise
程序语言 Php、Django、Ruby、… Ruby
文档环境 Mail-List、IRC Mail-List、IRC
平台支持 ALL os 较多
现成实例 Example42 无
依赖关系 灵活处理 无
提示
Puppet所支持的操作系统:http://docs.puppetlabs.com/guides/platforms.html
Chef所支持的操作系统:http://wiki.opscode.com/display/chef/Installing+Chef+Server Chef
使用者:http://www.opscode.com/customers/ Puppet
使用者:http://projects.puppetlabs.com/projects/1/wiki/Whos_Using_Puppet
1.2.3推荐Puppet的理由
有很多人问笔者:学习Puppet是否需要具有开发基础?是否需要会Ruby?笔者的回答都是“不需要”。其实我们使用任何一个工具,都不需要掌握此工具所采用的语言,只要会使用工具即可。如何更深入地理解工具的特性,最大化地发挥出它的优势才是我们的首要任务,除非想在它的基础上做二次开发。通常做二次开发都有现成的框架,调用工具的API接口即可完成。因此我们不需要掌握这类开发语言。而且开发类语言都互通的,掌握一门,其他的学起来也不难。初学者在入门时一定要意识到这一点:明确自己的目的,而不要被工具本身吓住了,“Just Do It”。
1.3Puppet的作用和特色
1.3.1为什么要有自己的语言
为什么不使用XML or YAML配置格式?为什么不直接采用Ruby输出?Puppet开发者非常巧妙地用一个反问回答了这个问题:在使用浏览器访问网站的时候为什么不直接读HTML呢?所以说Puppet使用自有语言是为了更好地处理人机接口。而Ruby输出实际上在Puppet2.6版本中已经支持,只是没有当做主输出而已。
1.3.2为什么是Ruby
用Kanies的话来说,Ruby太适合Puppet了。最开始Kanies的大量工作都是使用Perl语言来完成的,然而当他想要开发工具时,发现在Perl中得不到想要的类关系。于是试用了一下Python,虽然很多人都说它非常棒,但也满足不了需求。这时有人说Ruby很酷,Kanies进行了尝试,没想到4个小时就做出了所需工具的原型。为此直到后来为Puppet Labs选择语言时,Kanies一直也没有后悔选择了Ruby。因此选择适合自己的语言才是硬道理。我们不能一味地追求时尚,就像我们选择Puppet一样。
1.3.3管理任何机器
目前Puppet支持所有的客户端,主流的有RedHat、Centos、Gentoo、FreeBSD、Debian、OpenBSD、Mac os x、Ubuntu、SuSE、Solaris、Windows等。我们不需要担心所管理的设备无法使用Puppet,它已经尽可能地支持一切操作系统。不过使用Windows的朋友需要注意:目前Puppet所支持的资源有File、Package、Host、Group、Service、Exec,支持的类型有限。不过刚刚发布的Puppet3.0对Windows的支持进行了加强。
提示
更多信息可参考http://docs.puppetlabs.com/windows/writing.html。
处理资源与资源之间的依赖关系是Puppet的优势。Puppet管理一台主机的整个生命周期,即初始化安装、升级、维护、服务迁移及下载。在Puppet世界中,一台主机的每个生命周期内的每个动作都被抽象成一个“资源”。我们更多的是要维护一台主机上的每个“资源”,梳理好关系后将其交给Puppet维护。对于系统管理员而言,一切的配置将变得简单而有趣。后续我们将在第6章讲解Puppet的资源。
1.4Puppet组织结构
在了解了什么是Puppet后我们再来看它的组织结构,以便在后续章节中能更好地掌握其工作原理。
通常在安装好Puppet之后的/etc/puppet目录下运行tree就能看到下面的树结构:
/-- 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 #邮件报告配置文件
注意
不同安装包的树结构会不一样,为了便于读者理解,这里仅对主要的配置文件进行了说明。
1.5Puppet工作原理
下面进入本章重点——Puppet工作原理,这部分将分别从基本结构、Puppet是如何工作的、数据流、文件结构、详细交互过程等几方面循序渐进地讲解,以便读者理解并掌握这些知识。
1.5.1Puppet基本结构
我们先看一下Puppet基本结构,如图1-1所示。Puppet模块的编写主要是:应用程序、文件、服务及操作系统底层相关。客户端解析完成后发送给报告系统(见图1-1右上角)。
图1-1Puppet基本结构
1.5.2Puppet是如何工作的
接着我们来看一下Puppet是如何工作的。简单来说分4步进行。
1)定义:使用Puppet特定的语言定义基础配置信息。通常我们把这些信息写在Modules中。
2)模拟:在配置执行之前检测代码,但并不真正执行。
3)执行:按步骤1)定义的配置自动部署。检测并记录下所发生变化的部分。
4)报告:将期待的变化、实际发生的变化及任何修改发送给报告系统。
整个工作过程如图1-2所示。
1.5.3Puppet数据流
在了解了Puppet如何工作之后,我们需要继续了解它的数据流走向。
1)Node节点将Facts和本机信息发送给Master。
2)Master告诉Node节点应该如何配置,将这些信息写入Catalog后传给Node。
3)Node节点在本机进行代码解析验证并执行,将结果反馈给Master。
4)Master通过API将数据发给分析工具。报告完全可以通过开放API或与其他系统集成。
整个数据流的走向是基于SSL安全协议的,如图1-3所示。
图1-3Puppet数据流
1.5.4文件结合
在Puppet组织结构中我们了解了Puppet的树结构。那么结合数据流,这些目录的关系是如何关联起来的呢?
1)Puppet通过编译Manifest中的内容,将编译好的代码存入Catalog。
2)在执行前先进行代码的验证,再执行,完成最开始所定义好的状态。
代码编译过程如图1-4所示。
1.5.5详细交互过程
通过以上的学习,相信大家应该对Puppet的工作原理有了基本的了解,接下来我们将分析Puppet的Agent与Master的详细交互过程。通过学习这部分内容,可加深对Puppet的理解,以便在今后的使用过程中遇到任何问题都能在大脑中呈现如图1-5所示的内容,进而能快速定位故障并解决它。所有交互过程都是建立在签发证书的前提下执行的。
1)Puppet客户端Agent将节点名与facts信息发送给Master。
2)Puppet服务端Master通过分类判断请求的客户端是谁,它将要做什么。这个判断是通过site.pp中包含的Node.pp配置文件定义的。
3)Puppet服务端Master将所需要的Class类信息进行编译后存入Catalog并发送给Puppet客户端Agent,到此完成第一次交互。这一步是1.5.4节的内容。
4)Puppet客户端Agent对Catalog进行代码验证(语法检查及错误检查)并执行。主要是代码的验证,并将执行过程的信息及结果写入日志。
5)Puppet客户端Agent最终达到最开始所定义的状态,并且将结果及任何执行数据通过开放API的形式发送给Puppet服务端Master。
Puppet Master和Puppet Agent的交互过程如图1-5所示。
图1-5Puppet Master与Puppet Agent详细交互过程
1.5.6安全与认证
Puppet通信都采用SSL安全加密协议,以保障所有数据传输的安全性,为此我们不用担心数据的安全性问题。通常我们使用Puppet管理设备时也有可能建立在公司内网的基础之上,这样就更加安全了。当然,即使你所在的公司没有属于自己的内网也没有关系,Puppet所采用的SSL安全加密协议已经为我们解决了数据传输的安全问题。
提示
SSL(Secure Sockets Layer, 安全套接层)及其继任者TLS(Transport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
在学习了Puppet安全之后,我们来学习Puppet的认证。由于Puppet采用的是SSL加密协议,因此申请证书验证是必需的。
Puppet Master在启动后会向自己签发证书和key。我们可以在/var/puppet/ssl(3.1版本在/var/lib/puppet/ssl/下面)目录下看到它们。
Puppet Agent 在运行puppet apply --test时添加参数(--verbose),可以在客户端终端看到申请证书的详细过程。
Puppet Master同样也可以使用puppet cert list查看申请证书的客户端列表。使用命令puppet cert signagent_name来签发证书。
Puppet Agent就可以收到notice:Finished等相关字样。如果Master一直不签发证书,客户端会每2分钟请求一次。
证书相关的命令将会在第5章详细讲解。
Puppet只允许经过安全认证的客户端发送请求,这极大地保证了数据的安全。同时当客户端发起https://master.domain.com:8140/{environment}/{resource}/{key}这样的请求时,我们需要配置auth.conf与namespaceauth.conf。有关这两个配置文件详见1.6节。
思考
当客户端要输出“Hello World!”时,整个Puppet的数据流走向?
1.6Puppet核心配置文件详解
在学习了Puppet原理及版本差异后,我们需要掌握它的核心配置文件。Puppet所有的配置都围绕着Puppet.conf展开。读者可以回顾在1.4节讲的组织结构,以便快速掌握本节内容。
1.6.1主配置文件puppet.conf
主配置文件puppet.conf主要用于设置相关的参数、认证文件、文件系统配置文件、插件配置等。Puppet版本不同,配置选项命名方式也有所不同。Puppet 2.6以前的命名方式还以[puppetmaster]、[puppetagent]为主。Puppet 2.6以后都以[main]、[master]、[agent]为主。为了防止读者混淆,建议都采用Puppet 2.6以上版本。本书都以Puppet 2.6以上版本为主。
先看如何生成Puppet配置文件puppet.conf:
puppetd --genconfig> /etc/puppet/puppet.conf
puppetmasterd--genconfig> /etc/puppet/puppet.conf
以上命令会覆盖Puppet.conf原文件。
在本地用如下命令查看配置参考手册:
puppet doc --reference configuration
如果不知道配置文件在哪个目录下,可以使用以下命令查看:
puppet agent --configprint confdir
默认目录是/etc/puppet。
由于puppet.conf配置文件内容较多,下面笔者将列举核心配置、常用配置选项(不区分Master与Agent):
[main] #通用配置选项
vardir = /var/lib/puppet
confdir = /etc/puppet
logdir = /var/log/puppet
rundir = /var/run/puppet
ssldir = $vardir/ssl
fileserverconfig = /etc/puppet/fileserver.conf
manifestdir = /etc/puppet/manifests#可不指定默认读取此目录
manifest = /etc/puppet/manifests/site.pp#主机文件默认读取
modulepath = /etc/puppet/modules:/usr/share/puppet/modules
authconfig = /etc/puppet/namespaceauth.conf
#如果开启Listen为true需要配置此文件
pluginsync = true#插件同步配置对facter自定义有效
reportdir = /var/lib/puppet/reports
#报告文件生成目录,目录以主机名命令开头
reports = log, foreman#报告的方式与类型
# environment = production 运行环境配置,默认为生产环境
[agent]#客户端配置选项
classfile = $vardir/classes.txt
localconfig = $vardir/localconfig
runinterval = 1800#客户端默认探测时间,可按需求修改
listen = true#是否监听,执行puppet kick时需要配置
report = true#客户端的报告系统配置,不同于Master
#此项的主要目的是将报告发送至Master,主要用于客户端puppet.conf配置
report_port = 8140 #监听端口,如果服务器配置有防火墙,需开放此端口
report_server = server #默认不填,此时以下面的$server变量值为准
server = server.domain.com
[master]#服务端配置选项
certname = server.domain.com #也可以不定义,以主机名为准
reports = store, http, tagmail, log
reporturl = http://server.domain.com:3000/reports/upload
#报告发送地址,可配置在dashboard或foreman配置文件中
#有关报告系统的配置我们将在第17章讲解
autosign = /etc/puppet/autosign.conf#自动认证配置文件
提示
不同版本的配置文件可参考:http://docs.puppetlabs.com/references/。
通常我们应该如何配置主配置文件呢?下面分别进行介绍。
Puppet Master服务器端主配置文件——puppet.conf。
[main] #全局配置
#vardir用来存放缓存数据、配置、客户端传回的报告及文件备份
vardir = /var/lib/puppet
# Puppet日志文件配置目录默认为'$vardir/log'
logdir = /var/log/puppet
#PID文件目录,默认为'$vardir/run'
rundir = /var/run/puppet
#SSL签发认证文件目录,默认为 '$confdir/ssl'
ssldir = $vardir/ssl
[master]#服务器端配置
pluginsync = true #开启插件同步
reports = log, foreman #报告发送至log和foreman
environment = production #指定运行环境为生产环境
certname = server.domain.com #配置主机名为server.domain.com
Puppet Agent客户端主配置文件——puppet.conf。
[main]
logdir = /var/log/puppet
rundir = /var/run/puppet
ssldir = $vardir/ssl
pluginsync = true
[agent] #客户端配置
#关联与检索配置文件目录,默认为 '$confdir/classes.txt',也可以使用
#(--loadclasses)参数指定
classfile = $vardir/classes.txt
#本地缓存配置目录,默认为'$confdir/localconfig'
localconfig = $vardir/localconfig
runinterval = 1800 #检测时长1800秒,30分钟
listen = true #监听进程
report = true #发送报告
server = puppet.domain.com #指定Master地址
1.6.2主机配置文件site.pp
site.pp的目的主要是告诉Puppet去哪里寻找并载入所有主机相关的配置。site.pp默认存放在/etc/puppet/manifests目录中。通常我们在会此文件中定义一些全局变量。
注意
“清单”(Manifests)是Puppet中的术语,指的是包含配置信息的文件。清单文件的后缀是.pp。
生成Puppet主机配置文件site.pp的命令如下:
puppet apply --genmanifest> /etc/puppet/manifests/site.pp
通常不使用以上命令生成site.pp配置文件,主要填写的内容为:
# site.pp - all agent configure
Exec { path => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" }
#设置环境变量
$fileserver = "puppet.domain.com" #指定全局fileserver变量
$ntpserver = "ntp.domain.com" #指定ntpserver变量
#建议读者动手配置以上内容
Package { provider => "yum" } #指定软件包的安装方法为yum
#可以直接写节点配置文件,在所有Agent上创建其内容为"Hello World"的
#/tmp/temp1.txt文件
#node default {
# file { "/tmp/temp1.txt": content => "Hello World!"; }
# }
import "modules.pp"#加载模块配置文件,可以不配置
import "nodes/*.pp"#加载主机信息,可以使用通配符,也可以定义多组目录
import "test.domain.com.pp"#加载测试主机
1.6.3认证与安全配置文件
namespaceauth.conf文件用于指定允许谁访问每个名称空间。要创建namespaceauth.conf文件必须添加对每个名称空间的访问权限。以下就是针对不同名称空间的权限配置,通常不用做大的变动。
以下是配置的内容:
[fileserver]
allow *.domain.com
[puppetmaster]
allow *.domain.com
[puppetrunner]
allow culain.domain.com
[puppetbucket]
allow *.domain.com
[puppetreports]
allow *.domain.com
[resource]
allow server.domain.com
注意
当puppet.conf配置Listen=true时必须要配置此文件,否则Puppet启动时会报出“Will not start without authorization file /etc/puppet/namespaceauth.conf”的错误提示。
auth.conf认证配置文件是Puppet中的ACL,主要应用于Puppet’s REST API。例如,当客户端请求https://yourpuppetmaster:8140/{environment}/{resource}/{key}时,服务器可以根据资源定义访问权限。其配置的参考如下:
# 以auth.conf为例
path /
auth any
environment override
allow magpie.example.com
path /certificate_status
auth any
environment production
allow magpie.example.com
path /facts
method save
auth any
allow magpie.example.com
path /facts
auth yes
method find, search
allow magpie.example.com, dashboard.example.com
只看上面auth.conf配置文件,读者可能难以理解配置文件的意义,参考Puppet ACL配置语法就容易理解了。其语法规则如下:
path [~] {/path/to/resource/regex} #目录配置
[environment {list of environments}] #环境配置
[method {list of methods}] #方法命令配置
[auth[enthicated] {yes/no/on/off/any}] #授权配置
[allow {hostname/certname/*}] #允许配置
我们再来看auth.conf的配置文件:
path /facts
auth yes
method find, search
allow magpie.example.com, dashboard.example.com
#现在就不难理解这段配置的意思了。允许主机名为"magpie.example.com"和
#"dashboard.example.comd的两台客户端在facts目录进行find和search操作
提示
详细信息可参考:http://docs.puppetlabs.com/guides/rest_auth_conf.html。
1.6.4客户端自动认证配置
autosign.conf允许配置文件中的客户端自动进行签名验证,省去人工交互的过程。这对自动化配置来说省去了很多工作。在下一章介绍安装时也会讲到。
配置文件参考如下:
#允许单一客户端或者域名匹配,主机名匹配
rebuilt.example.com
*.scratch.example.com
*.local
同时Puppet客户端的证书也可以采用提前在Master上生成的方法,将生成的证书文件复制到客户端对应目录下,以实现自动认证的配置。
自动生成证书的命令为:
puppet cert generate client.domain.com
这时将在本地生成client.domain.com客户端证书文件,文件及其所在目录为:
/var/lib/puppet/ssl/private_keys/client.domain.com.pem
/var/lib/puppet/ssl/certs/client.domain.com.pem
/var/lib/puppet/ssl/certs/ca.pem
将这些文件复制到客户端相同的目录下即可。
1.6.5报告系统配置
tagmail.conf将配置的Puppet报告以邮件形式按要求发送给收件人。要使用此项功能,需要在Puppet Master端配置reports=tagmail,需要在Puppet Agent端配置report=true,同时也可以配置smtp由谁来发送。在Puppet Master端配置reportform为smtpserver or sendmail即可。默认由本机sendmail发送。
all: log-archive@example.com
webserver, !mailserver: httpadmins@example.com
emerg, crit: james@example.com, zach@example.com, ben@example.com
#日志的级别可以是:debug、info、notice、warning、err、alert、emerg、crit或者 verbose
#也可以是一个类的名字class names,一个标签名tags
1.6.6文件系统配置文件
fileserver.conf是一项安全配置,结合puppet.conf、auth.conf一起使用。配置Puppet客户端允许/禁止访问Master的文件目录。fileserver.conf的使用非常灵活,我们将在第16章节来讲解它的优化及配置。fileserver.conf配置如下:
# 配置方法
[mount_point]
path /path/to/files
allow *.example.com
deny *.wireless.example.com
#举例:允许通配主机为"*.domain.com"的主机获取/etc/puppet/files目录下
#的文件。以下为其配置方法
[files]
path /etc/puppet/files
allow *.domain.com
1.7本章小结
通过对本章的学习,我们首先了解了Puppet的发展历程、各版本存在的差异、Puppet 2.6版本的大幅度变动、Puppet 3.0版本的最新特征。接着通过学习Puppet组织结构、Puppet的工作原理、核心配置文件的相关知识,使读者能够熟练掌握Puppet的基本用法和工作原理。
如果你没有了解过Puppet,通过本章便能大致了解Puppet是什么、它有什么用途、是否适合在你的环境当中使用。如果你用过Puppet并有使用经验,通过本章的学习能够更深入地掌握它的原理。
将Puppet原理及核心信息放在第1章来讲解,是为了让大家能更全面地了解Puppet,毕竟任何一款软件的使用都离不开基础原理的掌握。
接下来一章将介绍Puppet在不同操作系统平台的安装与使用。