Salt使用服务器代理通讯模型,服务器组件称为 Salt Master, 代理称为 Salt Minion。算法
Salt Master负责向Salt Minion发送命令,而后聚合并显示这些命令的结果。单个Salt Master能够管理数千个系统。数据库
saltstack组件以下:api
salt master: 中央管理系统,用于将命令和配置发送到在受管系统上运行的Salt minion安全
salt minion: 管理系统,该系统运行Salt minion,从Salt master接收命令和配置。服务器
执行模块 : 从命令行对一个或多个受管系统执行的命令,用途以下1.实时监控,状态和详细信息。2.一次性命令和脚本。3.部署、critical、更新。
网络
state.sls : 系统配置的声明性或命令式表达。session
Grains : 系统变量,Grains是有关地产受管系统的静态信息,包括操做系统,内存和许多其余系统属性。你还能够为任何系统定义自定义grains。ssh
pillars : 用户定义的变量。这些安全变量被定义并存储在Salt Master中,而后使用Master 分配给一个或多个Minions,pillars存储的数据例如端口、文件路径、配置参数和密码之类的指。异步
top file : 将Master state.sls 和 Salt Pillar数据发送给Salt minion。
加密
Runners : 在Salt master 上执行的模块,用于执行支持任务。Salt Runners 报告做业状态,链接状态,从外部api读取数据,查询链接的Salt minions等。
Returners : 将Salt minions 返回的数据发送到另外一个系统,例如数据库。Salt returners can run on the Salt minion or on the Salt master.
Reactor : 在 SaltStack环境中发生事件时出发反应。
Salt Cloud/Salt Virt : 在云或虚拟机管理程序上提供系统,并当即对其进行管理。
Salt SSH : 在没有Salt minion的系统上经过ssh运行Salt 命令。
Salt 使用服务器代理通讯模型。(还提供经过ssh运行无代理的能力。)
Salt Master负责向Salt minions 发送命令,而后聚合并显示这些命令的结果。
Salt使用发布-订阅模式与受管系统进行通讯。链接由Salt Minion发起,这意味着受控端不须要监听端口(从而减小攻击)。Salt Master使用的端口为4505 和4506,必须打开它们才能接受传入链接。
4505:全部Salt Minion创建与发布者端口的持久链接,并监听消息。命令经过此端口异步发送到全部链接,这使命令能够同时在大量系统上执行。
4506:Salt Minion根据须要,链接到服务器,将结果发送到Salt Master,并安全地请求文件和minion 特定的数据值(salt pillar)。Salt Minion 和Salt Master之间的链接时非异步的。
当minion 第一次启动时,它会在网络中搜索一个名为salt的服务器(该配置在/etc/salt/minion能够配置为ip或其余主机名)找到后,minion启动握手,而后将其公钥发送给Salt master。
在初始链接以后,Salt minion的公钥存储在服务器上,而且必须使用salt-key命令(或经过修改配置文件进行自动认证)在Salt master上接受它。这多是新用户混淆的根源,由于在接受Salt minion的公钥以前,Salt 不会提供解码消息所需的安全密钥(意味着Salt minion在接受认证以前不会运行任何命令)。
接受minion 密钥后Salt master将返回其公钥以及用于加密和解密Salt master发送的消息的旋转AES密钥。返回的AES密钥使用最初由Salt minion发送的公钥加密,所以只能由Salt minion解密。
Salt master和Salt minion以前的全部进一步通讯都使用AES密钥加密。AES加密密钥根据最新接受的TLS版本使用显示初始化向量和CBC块链接算法。
旋转AES密钥用于加密由Salt主服务器发送到Salt minion的做业,并加密与Salt主文件服务器的链接。每次Salt 主服务器从新启动时以及每次使用salt-key命令删除Salt minion密钥时,都会生成并使用新密钥。
旋转密钥后,全部的salt minions 必须从新进行身份验证才能接收更新的密钥。这使AES key 能够在不中断minion链接的状况下旋转。
Salt master 和 Salt minion之间的发布通讯使用旋转AES密钥进行加密。Salt master和Salt minion之间的直接通讯使用每一个会话的惟一AES密钥进行加密。
For example, published jobs are encrypted using the rotating AES key, while secure, minion-specific data sent using Salt pillar is encrypted with a unique AES key for each Salt minion and session.
在向minions发送命令以前,Salt会对发布者ACL执行一些内部检查,以确保执行该命令的用户具备正确的权限。若是用户被受权对指定目标进行指定命令,这发送该命令。若是不是,则返回错误。Salt还返回预期相应命令行界面的minions列表,所以他知道等待返回的时间。