参考书籍: SaltStack 技术入门与实战
SaltStack 是基于 Python 开发的一套 C/S 架构配置管理工具,它的底层使用 ZeroMQ 消息队列 pub/sub 方式通信,使用 SSL 证书签发的方式进行认证管理。
SaltStack 服务架构
由于 SaltStack 是一种基于 C/S 架构的服务模式,可以简单地理解为如果我们想使用 SaltStack 就需要在现有的环境下引入与维护一套 C/S 架构。在 SaltStack 架构中服务器端叫做 Master,客户端叫做 Minion,在我们理解的传统 C/S 架构中,客户端发送请求给服务器端,服务器端接收请求并且处理完成后再返回给客户端。在 SaltStack 架构中不仅有传统的 C/S 架构服务模式,而且有消息队列的发布与订阅(pub/sub)服务模式。这使得 SaltStack 应用场景更加丰富。目前在实际环境中一般使用 SaltStack 的 C/S 架构进行配置管理。
在 Master 和 Minion 端都是以守护进程的模式运行,一直监听配置文件里面定义的 ret_port(接受 minion 请求)和 publish_port(发布消息)的端口。当 Minion 运行时会自动链接到配置文件里面定义的 Master 地址 ret_port 端口进行连接认证。默认客户端请求 id 是 socket.getfqdn() 取到的值,也可以在 Minion 启动之前修改 Minion 的 id 值。关于整个启动通信过程,可以使用 debug 查看详细记录。
C/S 架构如下
- Master 端:
1 | salt-master -l debug |
- Minion 端:
1 | salt-minion -l debug |
SaltStack 架构安装
目前 SaltStack 支持很多平台的安装部署。具体每个平台的安装部署教程可以参照 SaltStack 官方文档。在安装之前我们需要先了解一下 SaltStack 的一些软件依赖,只有了解了安装和运行 SaltStack 的依赖,我们才能判断 SaltStack 到底适不适合我们的生产环境,以及能不能大规模的使用它。
SaltStack 软件依赖
SaltStack 对 Python 版本和 Python 模块有一定的要求。目前 SaltStack 有两种消息系统,一种是 REAT,另一种是 ZeroMQ,默认使用 ZeroMQ。
SaltStack 的软件依赖列表如下
- Python 版本大于2.6 或版本小于 3.0:对 Python 版本要求
- msgpack-python:SaltStack 消息交换库
- YAML:SaltStack 配置解析定义语法
- Jinja2:SlatStack states 配置模板
- MarkupSafe:Python Unicode 转换库
- apache-libcloud:SaltStack 对云架构编排库
- Requests:HTTP Python 库
- ZeroMQ:SaltStack 消息系统
- pyzmq:ZeroMQ Python 库
- PyCrypto:Python 密码库
- M2Crypto:OpenSSL Python 包装库。
安装方式
下面通过一个案例简单介绍 在 CentOS 上进行 SaltStack 部署。安装方式有四种,这里推荐使用 yum 方式安装。
部署环境见下表:
角色 | 系统版本 | 主机名 | IP地址 |
---|---|---|---|
Master | CentOS 7.5 x86_64 | console | 172.16.68.30 |
Minion | CentOS 7.5 x86_64 | memcache | 172.16.68.106 |
使用 yum 方式安装最新版 SaltStack,安装命令如下:
- 安装 epel 存储库
1 | yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm |
- 清理缓存
1 | yum clean expire-cache |
- 安装需要的 Salt 组件
1 | yum install salt-master |
- 设置开机启动,以及启动服务
1 | systemctl start salt-master # 启动主控端 |
- SaltStack 防火墙配置
在主控制端添加TCP4505,TCP4506 的规则,而在被控制端无须配置防火墙,原理是被控制端直接与主控制端的 zeromq 建立长链接,接收广播到的任务信息并执行,具体操作如下:
1 | # firewalld 配置规则 |
配置 SaltStack
SaltStack 分两种角色,一种为 master(主控端),另一种为 minion(被控端),安装完毕后需要对两种角色的配置文件进行修改,下面具体说明:
Master 主控端配置
- 更新主控端关键项配置
1 | [/etc/salt/master] |
- 重启 SaltStack salt-master 服务使配置生效
1 | systemctl restart salt-master |
minion 被控端配置
- 更新被控端关键项
1 | [/etc/salt/minion] |
- 重启 SaltStack salt-minion 服务使配置生效
1 | systemctl restart salt-minion |
验证安装
通过 test 模块的 ping 方法,可以确认指定被控端设备与主控端是否建立信任关系及连同性是否正常,探测所有被控端采用 ‘*’ 来代替’172.16.68.106’即可,如下:
1 | salt '172.16.68.106' test.ping |
证书管理
SaltStack 使用 SSL签证的方式进行安全认证,当 /etc/salt/master 没有配置 auto_accept: True 时,需要通过 salt-key 命令来进行证书认证操作,接下来我们就开始进行证书的管理。
1 | salt-key -L # 查看当前证书签证情况 |
更多的证书管理命令可以运行 salt-key -h 查看,下面列举了 salt-key 命令的一些 action 操作解释
- salt-key -l ARG,–list=ARG,显示指定状态的 key(支持正则表达式)
- salt-key -L,显示已经或未认证的被控端id,Accepted Keys 为已认证清单,Unaccepted Keys 为未认证清单;
- salt-key -A,接受所有 id 证书请求;
- salt-key -a id,接受单个 id 证书请求;
- salt-key -r REJECT, –reject=REJECT,拒绝指定等待认证的 key(支持正则表达式)
- salt-key -R, –reject-all,拒绝所有等待认证的key
- salt-key –include-all,显示所有状态的 key(包含 non-pending 状态)
- salt-key -p PRINT, –print=PRINT,打印指定的 public key(支持正则表达式)
- salt-key -P, –print-all,打印所有的 public key
- salt-key -d DELETE, –delete=DELETE,删除指定 key
- salt-key -D, –delete-all,删除所有的 key
- salt-key -f FINGER, –finger=FINGER,显示指定key 的指纹信息(支持正则表达式)
- salt-key -F, –finger-all,显示所有 key 的指纹信息