SaltStack自动化运维——SaltStack简介、SaltStack环境部署、秘钥认证过程

一、SaltStack简介

SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能。
SaltStack是一个分布式远程执行系统,我们可以在成千万台远程节点上根据不同业务进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理。

1.1 SaltStack组件

SaltStack 采用 C/S模式,Salt Master就是server端,Salt Minions就是client端。

  • Salt Master:中心管理系统。此系统用于将命令和配置发送到在受管系统上运行的Salt minion。
  • Salt Minions:被管理的系统。 该系统运行Salt minion,它从Salt master接收命令和配置。

1.2 SaltStack原理

minion与master之间通过ZeroMQ消息队列通信。minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信。master可以发送任何指令让minion执行了,如cmd.run,当我们执行salt ‘*’ cmd.run 'uptime’的时候,master下发任务匹配到的minion上去,minion执行模块函数,并返回结果。master监听4505和4506端口,4505对应的是ZMQ的PUB system,用来发送消息,4506对应的是REP system是来接受消息的。

  • 是命令发送到远程系统,而且是并行发送不是串行的
  • 使用安全加密协议
  • 提供简单的编程接口
  • 更加细致化的领域控制系统来远程执行,使得系统成为目标不止可以通过主机名,还可以通过系统属性

ZeroMQ
ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。
ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。

1.3 SaltStack优点

  • 使用python语言编写,相当轻量级
  • 通讯层采用ZeroMQ PUB-SUB pattern实现,使得它很快速
  • 开源,可以通过python自己编写模块

二、SaltStack部署及秘钥认证过程

配置主机

主机(ip) 服务
物理机(172.25.2.250)
server1(172.25.2.1) salt-master
server2(172.25.2.2) salt-minion
server3(172.25.2.3) salt-minion

2.1 SaltStack部署

1、创建saltstack的yum源
在物理机上,将我已找到的saltstack的相关软件包的目录,复制到httpd服务的默认发布目录下,并且创建第三方软件仓库。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在server1上,编写指向性文件,并且 发送到server2和server3

在这里插入图片描述

扫描二维码关注公众号,回复: 8740589 查看本文章

在这里插入图片描述

2、在server1上,安装salt-master: yum install salt-master,并开启服务。

3、安装lsof和net-tools,来监控4505和4506端口。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 4505:(publish_port)为saltstack的消息发布系统
  • 4506:(ret_port)为saltstack客户端与服务端通信的端口。

4、在server2和server3上,安装 salt-minion:yum install -y salt-minion在这里插入图片描述
更改/etc/salt/minion文件,写入masterip,开启服务:systemctl start salt-minion
在这里插入图片描述
在这里插入图片描述

  • 这里要指向salt-master服务器,可以是IP,也可以是域名,也可以是主机名,不过主机名就要写/etc/hosts了,如果用的是内部DNS服务器的话可以用主机名或者域名的形式。

在这里插入图片描述

5、此时,我们可以 在master端(server1)上,查看到所有minion-key:salt-key -L,并接受:salt-key -A

salt-key -L              ##查看所有minion-key
salt-key -a <key-name>   ##接受某个minion-key
salt-key -d <key-name>   ##删除某个minion-key
salt-key -A              ##接受所有的minion-key
salt-key -D              ##删除所有的minion-key

第一次客户端的证书在未验证Unaccepted Keys:的下面,通过此证书的验证,再次查看出现在了Accepted Keys:下面表示已经通过了验证,可以建立通信了
在这里插入图片描述
6、此时,端口4505和4506,已经监控到了server2和server3

在这里插入图片描述
查看进程,安装python-setproctitle,查看python端口情况,每个进程的功能是啥
在这里插入图片描述

2.2 SaltStack秘钥认证过程

  • md5sum命令用于生成和校验文件的md5值。md5sum逐位对文件内容进行校验。与文件名无关,也就是文件内容相同,其md5值相同。 在网络传输、设备之间转存、复制大文件等时,可能会出现传输前后数据不一致的情况。那么校验文件的完整性是很重要的。

当初始化安装 minion 启动服务后

  • minion端会在/etc/salt/pki/minion下自动生成公钥、私钥和在/etc/salt/的一个ID值,,然后将公钥发送给master,minion服务会将以ID值命名的公钥发送给 master ,直到接受为止;
  • master通过salt-key -a认证完毕后,会将minion 端发送来的,以ID值命名的公钥存放在 /etc/salt/pki/master/minions 目录中,此时认证通信已完成;
  • master认证完毕后,会将自身的公钥发送给 minion,并存储为 /etc/salt/pki/minion/minion_master.pub

1、minion端生成 秘钥对/etc/salt/pki/minion/minion
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、master 端认证的 公钥 存储在:/etc/salt/pki/master/minions/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这也就说明了,minion端开启服务后生成一秘钥对,并将公钥发送到master端,master认证完毕后,将minion 端发送的公钥存放在 /etc/salt/pki/master/minions 目录

3、master自身的公钥/etc/salt/pki/master/

在这里插入图片描述
在这里插入图片描述
4、minion端master公钥 存放在/etc/salt/pki/minion/

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这也就说明了,master认证完毕后,会将自身的公钥发送给 minion,并存储为 /etc/salt/pki/minion/minion_master.pub

5、minion_id 默认存储在minion端的/etc/salt/
在这里插入图片描述
如果,minion端出现密钥对不匹配的情况,造成在master端显示在denied keys列表中无法通过认证。那么,先在master端删除该id,再删除minion端的key文件(minion_master.pub、minion.pem、minion.pub),最后重启服务

发布了102 篇原创文章 · 获赞 21 · 访问量 5320

猜你喜欢

转载自blog.csdn.net/ranrancc_/article/details/103282841