saltstack

Posted st-st

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了saltstack相关的知识,希望对你有一定的参考价值。

saltstack 实现一个快速的远程执行系统

 

saltstack的运行方式:
  Local 本地运行,交付管理
  Master/Minion <<< 常用方式
  Salt SSH 不需要客户端

 

salt部署基本架构:
  主要区分是salt-master和salt-minion,顾名思义master是中心控制系统,minion是被管理的客户端。
  salt架构中的一种就是master > minion。

 

salt的安装

0.准备两台主机,一台master,一台minion

master:192.168.11.59

minion:192.168.11.169

master的安装和配置

# 安装
yum -y install salt-master

# 修改配置文件
interface: 0.0.0.0          # 绑定本地的地址
publish_port: 4505        # master的管理端口
user: root                     # salt运行的用户
worker_threads: 1         # salt的运行线程,一般不要超过CPU的个数
ret_port: 4506               # 跟minion的通讯端口,用于文件服务,认证,接受返回结果等
pidfile: /var/run/salt-master.pid       # 指定pid文件位置
log_file: /var/log/salt/master           # 指定log文件位置

#auto_accept: False                       # 自动接收minion的key

# 修改hosts文件
vim /etc/hosts

192.168.11.169 minion

# 启动master
systemctl start salt-master

 

 

minion的安装和配置

# 安装
yum -y install salt-minion

# 修改配置文件
vim /etc/salt/minion

master: master
master_port: 4506
user: root
id: 192.168.11.169-slave
acceptance_wait_time: 10
log_file: /var/log/salt/minion

# 修改hosts文件
vim /etc/hosts

192.168.11.59 master

# 启动
systemctl start salt-minion

 

检测master和minion的密钥

# master
[[email protected] ~]# salt-key -f slave1
Unaccepted Keys:
slave1:  5a:47:81:44:36:0d:03:0b:55:2a:2e:de:f5:c3:37:19


# minion
[[email protected] ~]# salt-call --local key.finger
local:
    5a:47:81:44:36:0d:03:0b:55:2a:2e:de:f5:c3:37:19

 

master管理minion的密钥

在minion启动后连接master会请求master为其签发证书,等待证书签发完成后,master可以信任minion,并且minion和master之间的通信是加密的。

[[email protected] ~]# salt-key -L
Accepted Keys:              # 已经接收的minion
Denied Keys:                 # 拒绝的minion
Unaccepted Keys:          # 未加入的minion
slave1                          
Rejected Keys:               # 吊销的minion


#常用参数
-L  #查看KEY状态
-A  #允许所有
-D  #删除所有
-a  #认证指定的key
-d  #删除指定的key
-r  #注销掉指定key(该状态为未被认证)

#在master端/etc/salt/master配置
auto_accept: True   #如果对Minion信任,可以配置master自动接受请求

技术分享图片

 

 日常命令参数

master端

[[email protected] ~]# rpm -ql salt-master
/etc/salt/master              #  master主配置文件
/usr/bin/salt                    # master 核心操作命令
/usr/bin/salt-cp               # master 文件传输命令
/usr/bin/salt-key             # master 证书管理命令
/usr/bin/salt-master         # master 服务命令
/usr/bin/salt-run              # master runner命令

技术分享图片

 

minion端

[[email protected] ~]# rpm -ql salt-minion
/etc/salt/minion                  # minion配置文件
/usr/bin/salt-call                  # minion 拉取命令
/usr/bin/salt-minion            # minion 服务命令
/usr/lib/systemd/system/salt-minion.service      # minion启动脚本

技术分享图片

 

salt命令,基本都在master上操作

salt * test.ping       # 探测minion主机存活命令

salt * sys.list_functions test  # 查看test模块的命令

salt * sys.list_functions cmd   # 查看cmd模块的命令

salt slave1 sys.list_functions   # 查看所有的模块


参数:
--summary         # 显示salt命令的概要
--out=json         # 结果以json格式显示
--out=yaml         # 结果以yaml格式显示

 

JSON格式和YAML格式

[[email protected] ~]# salt --out=json ‘*‘ cmd.run_all ‘hostname -I‘
{
    "slave1": {
        "pid": 1794, 
        "retcode": 0, 
        "stderr": "", 
        "stdout": "192.168.11.169"
    }
}

[[email protected] ~]# salt --out=yaml ‘*‘ cmd.run_all ‘hostname -I‘
slave1:
  pid: 1800
  retcode: 0
  stderr: ‘‘
  stdout: 192.168.11.169

技术分享图片

 

YAML语法

语法规则
    大小写敏感
    使用缩进表示层级关系   
    缩进时禁止tab键,只能空格
    缩进的空格数不重要,相同层级的元素左侧对其即可
    # 表示注释行

yaml支持的数据结构
    对象: 键值对,也称作映射 mapping 哈希hashes 字典 dict    冒号表示 key: value   key冒号后必须有
    数组: 一组按次序排列的值,又称为序列sequence 列表list     短横线  - list1
    纯量: 单个不可再分的值
# YAML的编写
slave: 
 pid: 1794
 port:
  - 3306
  - 80
  - 22
 ip: 192.168.11.169


# 对应的json格式
{ slave: { 
    pid: 1794, 
    port: [ 3306, 80, 22 ], 
    ip: 192.168.11.169 } 
}

 

cmd是超级模块,是远程执行命令的模块,用于指定minion执行命令

salt minion名字 cmd.run 命令

*   -- 代表所有minion

 

service模块,是远程管理服务的模块,即systemctl

salt minion名字 service.start/status/stop/restart 服务     # 相当于在minion执行systemctl start/status/stop restart 服务

*   -- 代表所有minion

 

pkg模块,是远程安装软件的模块,即yum

# salt ‘minion节点‘ pkg.install/remove ‘软件‘

salt slave1 pkg.install httpd        # 相当于在minion执行 yum install httpd
salt slave1 pkg.version httpd       #  查看安装软件的版本
salt slave1 pkg.remove httpd      # 相当于在minion执行 yum remove httpd

 

 slat采集静态信息

Grains 是saltstack组件中非常重要之一,在配置部署时候回经常使用,Grains记录minion的静态信息,比如常用属性,CPU、内存、磁盘、网络信息等。

Minions的Grains信息是Minion启动时采集汇报给Master的
Grains是以 key value形式存储的数据库,可以看做Host的元数据(metadata)
Grains保存着收集到的客户端的详细信息
如果slave机器数据变化,grains就过期了
在生产环境中需要自定义Grains,可以通过
Minion配置文件
Grains相关模块定义
Python脚本定义

salt ‘slave‘ sys.doc grains#查看grains的命令用法

salt slave1 grains.items     # 查看minion主机的所有Grains数据

salt slave1 grains.item ipv4 host # 查看minion主机的ipv4和主机名

 

自定义Grains静态数据

# 给minion主机设置grains的自定义数据
salt slave1 grains.setval  serial_number ab-cd-ef-01-02

# 清空Grains自定义数据的值,默认变为None
salt slave1 grains.delval  serial_number

# 删除Grains自定义数据,需要修改minion的grains配置文件,重启服务
 # 在minion上
[[email protected] ~]# vim /etc/salt/grains 
[[email protected] ~]# systemctl restart salt-minion
# 给slave1设置静态数据
[[email protected] ~]# salt ‘slave1‘ grains.setval   serial_number ab-cd-ef-01-02
slave1:
    ----------
    serial_number:
        ab-cd-ef-01-02

# 查询slave1的静态数据
[[email protected] ~]# salt ‘slave1‘ grains.item serial_number
slave1:
    ----------
    serial_number:
        ab-cd-ef-01-02

# 清空slave1的静态数据
[[email protected] ~]# salt ‘slave1‘ grains.delval serial_number
slave1:
    None

# 查询slave1的静态数据
[[email protected] ~]# salt ‘slave1‘ grains.item serial_number
slave1:
    ----------
    serial_number:
        None

# minion上修改grains的配置文件删除了静态数据,所以无法查询
[[email protected] ~]# salt ‘slave1‘ grains.item serial_number
slave1:
    Minion did not return. [No response]

 













以上是关于saltstack的主要内容,如果未能解决你的问题,请参考以下文章

首发分析 | SaltStack远程执行代码多个高危漏洞透析(CVE-2021-25281/25282/25283)

Python操作Saltstack

预警通报关于SaltStack多个高危漏洞的预警通报

漏洞告警SaltStack多个高危漏洞(CVE-2021-25281/25282/25283)

漏洞更新SaltStack 多个高危漏洞(含漏洞分析及深信服解决方案)

Saltstack