SaltStack 的通讯架构模型:
Salt 采用服务端-代理的通讯模型(也可以通过 SSH 方式实现非代理模式)。服务端称为 Salt master,代理端称为 Salt minion。
Salt master 负责发送命令予 Salt minion,随后收集并展示这些命令的执行结果。一台 Salt master 可以管理几千台的系统。
 
SaltStack 的通讯模型
Salt master 与 minion 通讯采用的是”订阅-发布“的模式。通讯的连接由 Salt minion 发起,这意味着 minion 无须开启进向的端口(注意:此方式极大地简便了网络规则的设定)。而 Salt master 的 4505 和 4506 端口(默认)必须开启,以接收外部的连接。其中端口功能如下表所示。
端口名称 描述
Publisher
(发布者)
默认端口号 4505,所有的 Salt minion 通过此端口与 master 建立持续的连接,用于监听信息。master 通过此端口,以异步的方式发送命令至所有连接,从而让所有 minion 以近似同步地方式执行操作。
Request Server
(请求服务器)
默认端口号 4506,为了发送执行结果至 Salt master,Salt minion 需要通过此端口连接至请求服务器(Request Server)。同时 Salt minion 也需要通过此端口安全地请求文件以及 minion 专用的数据值(该值也被称为 Salt pillar)。此端口上,Salt master 和 minion 会建立一对一的连接。
通讯模型如下图所示。

 
Salt minion 验证机制:
(1).当 minion 启动时,其将搜索网络中的 master。当找到时, minion 将发送公钥给 Salt master,从而实现初次握手。其过程如下图所示。
(2).当初次握手后,Salt minion 的公钥将被保存在服务端,此时 master 需要使用过 salt-key 命令接收公钥(也可以采用自动机制)。注意:在 Salt minion 的公钥被接收前,Salt master 是不会将密钥发放给 minion 的,也就是说 minion 在此之前不会执行任何命令。
(3).当 Salt minion 的公钥被接收后,Salt master 就会把公钥连同用于加解密 master 信息的可变动 AES 密钥发送至 Salt minion。其中,返回给 Salt minion 的 AES 密钥由 minion 的公钥加密,可由 Salt minion 解密。
 
SaltStack 的安全通讯机制:
当完成验证后,Salt master 与 Salt minion 基于 AES 密钥进行加解密操作。AES 加密密钥基于最新的 TLS 版本,使用显式初始化向量和 CBC 块链接算法生成。
 
SaltStack 的可变动密钥:
Salt 的可变动 AES 密钥用于加密由 Salt master 发送至 Salt minion 的作业,也用于加密至 Salt master 文件服务的连接。每次 Salt master 重启Salt minion 解除验证后,该可变动的 AES 密钥均会自动更新
 
SaltStack 的加密通讯信道:
Salt master 与 minion 间的公开通讯均以同一个可变动 AES 密钥加密。但对于 Salt master 与 minion 的直接通讯(点对点),每个会话都采用一个唯一的 AES 密钥
例如:统一公布的作业采用可变动 AES 密钥进行加密;而以 Salt pillar 格式发送 minion 专用数据时,master 与每个 minion 都会有独立的会话,且每个会话采用唯一的 AES 密钥进行加密。

SaltStack 用户接入控制:
在命令发送至 minion 之前,Salt 将会检查发布者访问控制列表(ACL),确保接收到命令的 minion 具有正确的权限。如果权限符合,则命令将被发送至对应 minion,否则将返回报错。Salt 还可以返回将响应命令的 minion 列表,以此确定返回是否结束。
 
参考资料:
https://docs.saltstack.com/en/getstarted/system/communication.html
 
 
 
 

SaltStack 的通讯及安全机制的更多相关文章

  1. JMM之Java线程间通讯——等待通知机制及其经典范式

    在并发编程中,实际处理涉及两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体). 通信是指线程之间以何种机制来交换信息.在共享内存的并发模型里,线程之间共享程序的公共状 ...

  2. 【工业串口和网络软件通讯平台(SuperIO)教程】八.SuperIO通讯机制与设备驱动对接的说明

    SuperIO相关资料下载:http://pan.baidu.com/s/1pJ7lZWf 1.1    通讯机制说明 通讯的总体机制采用呼叫应答方式,就是上位机软件主动发送请求数据命令,下位机终端接 ...

  3. Android消息传递之Handler消息机制

    前言: 无论是现在所做的项目还是以前的项目中,都会遇见线程之间通信.组件之间通信,目前统一采用EventBus来做处理,在总结学习EventBus之前,觉得还是需要学习总结一下最初的实现方式,也算是不 ...

  4. Python的GIL机制与多线程编程

    GIL 全称global interpreter lock 全局解释锁 gil使得python同一个时刻只有一个线程在一个cpu上执行字节码,并且无法将多个线程映射到多个cpu上,即不能发挥多个cpu ...

  5. v76.01 鸿蒙内核源码分析(共享内存) | 进程间最快通讯方式 | 百篇博客分析OpenHarmony源码

    百篇博客分析|本篇为:(共享内存篇) | 进程间最快通讯方式 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁) | 同样 ...

  6. 学习saltstack (四)

    一.salt常用命令 salt 该命令执行salt的执行模块,通常在master端运行,也是我们最常用到的命令 salt [options] '<target>' <function ...

  7. 对蓝牙profile的理解

    蓝牙profile协议概览.pdf 之所以把Profile翻译为配置文件,是为避免和JavaME中的简表混淆.配置文件也是蓝牙 SIG官方网站给出的标准翻译. 想要使用蓝牙无线技术,设备必须能够翻译特 ...

  8. Linux高级编程--10.Socket编程

    Linux下的Socket编程大体上包括Tcp Socket.Udp Socket即Raw Socket这三种,其中TCP和UDP方式的Socket编程用于编写应用层的socket程序,是我们用得比较 ...

  9. IO端口和IO内存的区别及分别使用的函数接口

    每个外设都是通过读写其寄存器来控制的.外设寄存器也称为I/O端口,通常包括:控制寄存器.状态寄存器和数据寄存器三大类.根据访问外设寄存器的不同方式,可以把CPU分成两大类.一类CPU(如M68K,Po ...

随机推荐

  1. LG2590 [ZJOI2008]树的统计

    题意 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: ...

  2. (转)如何获得当前ListVIew包括下拉的所有数据?

    ListView listView = activity.getListView();获取的仅仅是当前屏幕显示的list,但是具有下拉信息,不在当前屏幕,但是下拉显示的数据无法或得到.谁知道如何获得当 ...

  3. redis+php实现微博功能(一)

    (一).微博功能概况 微博用户账号注册 微博用户登录 微博发布 添加微博好友(粉丝) 微博推送 微博冷数据写入mysql数据库 (二).redis数据结构设计 这节分享微博用户注册与登录:我们完全采用 ...

  4. LINUX下多路径的介绍和安装配置(测试未写完)

    一.什么是多路径 普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系.而到了有光纤组成的SAN环境,或者由iSCSI组成的IPSAN环境,由于主机和存储通过了光纤交换机或者多块网卡及IP来 ...

  5. jsp中取两位小数

    var d=1.11111111;  var c = d.toFixed(2);  alert(c);

  6. golang的https服务器

    先生成ssl证书 openssl genrsa - openssl req - 然后,大概这样 package main import ( "log" "net/http ...

  7. 以Linux下的测试程序说明递归型互斥量和普通互斥量的区别

    先贴代码和测试结果 // Mutex.h: 对pthread的互斥量的RAII包装 #ifndef _MUTEX_H_ #define _MUTEX_H_ #include <stdio.h&g ...

  8. Eclipse中创建新的Spring Boot项目

    本文转载自:http://blog.csdn.net/clementad/article/details/51334064 简单几步,在Eclipse中创建一个新的spring Boot项目: 1.E ...

  9. 模拟admin组件自己开发stark组件之自定义list_display,反向解析url

    反向解析 在上一篇文章中,我们创建好了stark这个组件,一个应用一个表有四个默认的url,那么我们如何区别这些url,因为可能会有重复现象(本组件不会,因为前面拼接了应用名,表明,肯定唯一),概念请 ...

  10. 记录关于ubuntu无线上网只能ping通5~7个数据包的问题

    问题是这样的,我的笔记本(ubuntu desktop)连接上wifi后,信号很好,但是上网上不了,ping网关也不通,ping外网仅仅只有当笔记本刚刚连接上wifi的时候能ping通5至6个包,然后 ...