saltstack介绍
Salt,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯,主要功能有远程执行,配置管理。
Saltstack原理
Salt
使用server-agent
通信模型,服务端组件被称为Salt master
,agent
被称为Salt minion
Salt master
主要负责向Salt minions
发送命令,然后聚合并显示这些命令的结果。一个Salt master
可以管理多个minion
系统
Salt server
与Salt minion
通信的连接由Salt minion
发起,这也意味着Salt minion
上不需要打开任何传入端口(从而减少攻击)。Salt server
使用端口4505
和4506
,必须打开端口才能接收到访问连接
- Publisher (端口4505)所有
Salt minions
都需要建立一个持续连接到他们收听消息的发布者端口。命令是通过此端口异步发送给所有连接,这使命令可以在大量系统上同时执行。 - Request Server (端口4506)
Salt minios
根据需要连接到请求服务器,将结果发送给Salt master
,并安全地获取请求的文件或特定minion
相关的数据值(称为Salt pillar
)。连接到这个端口的连接在Salt master
和Salt minion
之间是1:1(不是异步)。
[root@VM_0_11_centos minions]# lsof -i:4505 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME salt-mast 7580 root 12u IPv4 93674988 0t0 TCP *:4505 (LISTEN) salt-mast 7580 root 14u IPv4 93692192 0t0 TCP 172.27.0.11:4505->106.53.236.195:48158 (ESTABLISHED)
安装Master,并启动服务
yum -y install salt-master service salt-master start
安装 Salt-Minion 指向 Salt-Master 网络地址
yum -y install salt-minion vim /etc/salt/minion 找到以下配置,可以使用主机名,也可以使用IP地址 #master: salt 修改成 master: 192.168.1.100 如果遇到 [ERROR ] Error parsing configuration file: /etc/salt/minion - conf should be a document, not <type 'str'>. [ERROR ] DNS lookup of 'salt' failed. 修改minion文件的master是漏了空格 #master: salt 应该修改为 master:空格ip 启动 service salt-minion start
SaltStack认证方式
Salt
的数据传输是通过 AES
加密,Master
和 Minion
之前在通信之前,需要进行认证。
Salt
通过认证的方式保证安全性,完成一次认证后,Master 就可以控制 Minion 来完成各项工作了。
1. minion
在第一次启动时候,会在 /etc/salt/pki/minion/
下自动生成 minion.pem(private key)
和 minion.pub(public key)
, 然后将 minion.pub
发送给 master
2. master
在第一次启动时,会在 /etc/salt/pki/master/
下自动生成 master.pem
和 master.pub
;并且会接收到 minion
的 public key
, 通过 salt-key
命令接收 minion public key
, 会在 master
的 /etc/salt/pki/master/minions
目录下存放以 minion id
命令的 public key
;验证成功后同时 minion
会保存一份 master public key
在 minion 的 /etc/salt/pki/minion/minion_master.pub
里。
Salt认证原理总结
minion将自己的公钥发送给master master认证后再将自己的公钥也发送给minion端
Master端认证示例
1)根据上面提到的认证原理,先看下未认证前的master
和minion
的pki
目录
# master上查看 [root@salt-master ~]# tree /etc/salt/pki/ /etc/salt/pki/ ├── master │ ├── master.pem │ ├── master.pub │ ├── minions │ ├── minions_autosign │ ├── minions_denied │ ├── minions_pre │ │ └── salt-minion01 │ └── minions_rejected └── minion # minion上查看 [root@salt-minion01 ~]# tree /etc/salt/pki/ /etc/salt/pki/ ├── master └── minion ├── minion.pem └── minion.pub
salt-key
命令解释:
[root@salt-master ~]# salt-key -L Accepted Keys: #已经接受的key Denied Keys: #拒绝的key Unaccepted Keys: #未加入的key Rejected Keys: #吊销的key #常用参数 -L #查看KEY状态 -A #允许所有 -D #删除所有 -a #认证指定的key -d #删除指定的key -r #注销掉指定key(该状态为未被认证) #配置master自动接受请求认证(master上配置 /etc/salt/master) auto_accept: True
salt-key
认证
#列出当前所有的key [root@VM_0_11_centos minions]# salt-key -L Accepted Keys: Denied Keys: Unaccepted Keys: VM_0_13_centos Rejected Keys: #添加指定minion的key [root@VM_0_11_centos minions]# salt-key -a VM_0_13_centos -y The following keys are going to be accepted: Unaccepted Keys: VM_0_13_centos Key for minion VM_0_13_centos accepted. #添加所有minion的key [root@salt-master ~]# salt-key -A -y [root@VM_0_11_centos minions]# salt-key -L Accepted Keys: VM_0_13_centos Denied Keys: Unaccepted Keys: Rejected Keys: # master上 [root@VM_0_11_centos minions]# tree /etc/salt/pki/ /etc/salt/pki/ └── master ├── master.pem ├── master.pub ├── minions │ └── VM_0_13_centos ├── minions_autosign ├── minions_denied ├── minions_pre └── minions_rejected # minion上 [root@VM_0_13_centos minion]# tree /etc/salt/pki/ /etc/salt/pki/ └── minion ├── minion_master.pub ├── minion.pem └── minion.pub
Saltstack远程执行
远程执行是 Saltstack
的核心功能之一。主要使用 salt
模块批量给选定的 minion
端执行相应的命令,并获得返回结果。
Salt命令的语法结构
salt '<target>' <function> [arguments]
目标主机Target匹配方式
1、通配符匹配 [root@salt-master ~]# salt '*' test.ping [root@salt-master ~]# salt 'salt-minion01' test.ping [root@salt-master ~]# salt '*01' test.ping [root@salt-master ~]# salt 'salt-minion0[1|2]' test.ping [root@salt-master ~]# salt 'salt-minion0[!1|2]' test.ping [root@salt-master ~]# salt 'salt-minion0?' test.ping 2、列表匹配 [root@salt-master ~]# salt -L 'salt-minion01,salt-minion02' test.ping 3、正则匹配 [root@salt-master ~]# salt -E '^salt' test.ping [root@salt-master ~]# salt -E '^salt.*2$' test.ping 4、IP匹配 [root@salt-master ~]# salt -S '192.168.1.32' test.ping [root@salt-master ~]# salt -S '192.168.1.0/24' test.ping 5、复合匹配 [root@salt-master ~]# salt -C 'G@os:CentOS and S@192.168.1.32' test.ping
模块Module
test 模块多用于测试 user 模块用于用户管理 cmd 模块可以执行任意shell命令 pkg 模块用于软件包管理 file 模块多用于配置 service 模块用于服务管理
test模块
模块名:test 功能:用于测试 [root@salt-master ~]# salt '*' test.ping
cmd模块
模块名:cmd 功能:实现远程的命令行调用执行(默认具备root操作权限,使用时需评估风险) #查看所有minion内存和磁盘使用情况 [root@salt-master ~]# salt '*' cmd.run "free -m" [root@salt-master ~]# salt '*' cmd.run "df -h" [root@salt-master ~]# salt 'salt-minion02' cmd.run 'uptime'
把文件复制到某台机器上
salt-cp 'VM_0_13_centos' /data/script/log /data/log/
如何记录操作日志
在master上为/etc/salt/master
在minion上为/etc/salt/minion
修改日志级别
log_level: //日志级别 支持的日志级别有'garbage', 'trace', 'debug', info', 'warning', 'error', ‘critical ’ ( 默认为’warning’)
日志的默认目录为/var/log/salt/