ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

saltstack安装部署

2019-09-19 14:04:05  阅读:262  来源: 互联网

标签:部署 salt 指定 Salt minion master key saltstack 安装


saltstack安装部署

一、saltstack简介

1.简单介绍

  saltstack是基于python开发的一套C/S架构配置管理工具,它的底层使用ZeroMQ消息队列pub/sub方式通信,使用SSL证书签发的方式进行认证管理。ZeroMQ使SaltStack能快速在成千上万台机器上进行各种操作,而且采用RSA Key方式确认身份,传输采用AES加密,使传输的安全性得到保障。
  saltstack是基于C/S架构的服务模式,服务器端叫做Master,客户端叫作Minion,并且有消息队列中的发布与订阅(pub/sub)服务模式,minion与master之间通过ZeroMQ消息队列通信。Master和Minion端都以守护进程的模式运行,一直监听配置文件里面定义的ret_port也就是4506端口(接收minion请求)和publish_port也就是4505端口(ZMQ的发布消息)。当minion运行时会自动连接到配置文件里面定义的Master地址ret_port端口进行连接认证。

2.通信模型

  Salt使用发布 - 订阅模式与受管系统进行通信。 连接由Salt minion发起,这意味着你不需要在这些系统上打开任何传入端口(从而减少攻击向量)。 Salt master使用端口4505和4506,必须打开端口才能接收访问连接。

  Publisher (端口4505)所有Salt minions都需要建立一个持续连接到他们收听消息的发布者端口。 命令是通过此端口异步发送给所有连接,这使命令可以在大量系统上同时执行。

  Request Server (端口4506)Salt minions根据需要连接到请求服务器,将结果发送给Salt master,并安全地获取请求的文件或与特定minion相关的数据值(称为Salt pillar)。 连接到这个端口的连接在Salt master和Salt minion之间是1:1(不是异步)。

3.Salt minion认证

  当minion第一次启动时,它会在网络中搜索一个名为salt的系统(尽管这可以很容易地更改为IP或不同的主机名)。 当发现时,minion发起握手,然后将公钥发送给Salt master。
  在初始连接之后,Salt minions的公钥存储在服务器上,并且必须使用salt-key命令(或通过某种自动机制)在Salt master上接受。 这可能是让新用户混淆的原因,因为Salt不会提供解密消息所需的安全密钥,直到Salt minions的公钥被接受(这意味着Salt minions在被接受其密钥之前不会运行任何命令)。
  在minion密钥被接受后,Salt主机会返回其公钥以及旋转的AES密钥,该密钥用于加密和解密由Salt master发送的消息。 返回的AES密钥使用Salt minion最初发送的公钥进行加密,因此只能由该Salt minion解密。

二、saltstack安装

1.下载yum源
wget -P /etc/yum.repos.d https://mirrors.aliyun.com/saltstack/yum/redhat/7.2/x86_64/saltstack-rhel7.repo

2.在master端安装
yum -y install salt-master

3.在minion端安装
yum -y install salt-minion

三、saltstack的配置

master端
在 /etc/salt/master下添加
master: 192.168.1.3
user: root
service salt-master start 启动

minion端
在/etc/saltminion下添加
#这里要指向salt-master服务器,可以是IP,也可以是域名,也可以是主机名,不过主机名就要写/etc/hosts了,如果用的是内部DNS服务器的话可以用主机名或者域名的形式。
master: 192.168.1.3 
user: root
id: agent1
service salt-minion start

注意Salt master的管理命令需要系统root权限才能执行,需要在执行命令时使用sudo或直接切换为root用户。
查看所有的密钥

[root@localhost]# sudo salt-key --list-all  # salt-key -L 
Accepted Keys:
agent1
Denied Keys:
Unaccepted Keys:
Rejected Keys:

接受一个指定密钥
salt-key --accept=<key>

接受所有密钥
salt-key --accept-all

测试

[root@localhost]# sudo salt '*' test.ping
agent1:
    True
    
注:
master 秘钥对默认存储在/etc/salt/pki/master/master.pub  /etc/salt/pki/master/master.pem
master 端认证的公钥存储在:/etc/salt/pki/master/minions/
minion 秘钥对默认存储在/etc/salt/pki/minion/minion.pub  /etc/salt/pki/minion/minion.pem
minion 存放的master公钥/etc/salt/pki/minion/minion_master.pub
minion_id 默认存储在/etc/salt/minion_id #?

salt命令详解

salt "*" sys.list_modules   # 查看所有模块

# salt -h
Usage: salt [options] '<target>' <function> [arguments]

Options(选项):

      --version : 查看saltstack软件的版本号。

      --versions-report : 查看saltstack软件以及依赖包的版本号。

      -h, --help : 查看帮助信息。

      --saltfile=SALTFILE:指定saltfile的路径。 如果没有通过,将在当前工作目录中搜索一个。

      -c CONFIG_DIR, --config-dir=CONFIG_DIR:指定配置文件的目录(默认是/etc/salt/)。

      -t TIMEOUT, --timeout=TIMEOUT:指定超时时间默认是5秒。

      --hard-crash:捕捉到original异常不退出默认关闭。

      -s, --static:以组的形式返回所有minion的数据。

      -p, --progress:显示进度图,需要progressbar的python包。

      --failhard :在第一个执行错误返回之后停止批处理。

      --async : 异步执行。

      --subset=SUBSET : 对目标minions的随机子集执行程序. minions在执行前会先验证是否存在该命名的函数,再去执行

      -v, --verbose : 打开命令详细,显示jid和活动的工作查询

      --hide-timeout : 隐藏超时时间。

      --show-jid : 显示任务的jid。

      -b BATCH, --batch=BATCH, --batch-size=BATC : 按照百分比执行任务。

      -a EAUTH, --auth=EAUTH, --eauth=EAUTH, --external-auth=EAUTH : 指定外部认证方式。

      -T, --make-token : 生成master token.

      --return=RETURNER : 设置一种替代方法。 默认情况下,salt将从命令将返回数据发送回主服务器,但返回数据可以重定向到任意数量的系统,数据库或应用程序。

      --return_config=RETURNER_CONF : 指定命令返回的设置文件。

      -d, --doc, --documentation : 查看指定模式或所有模块文档。

      --args-separator=ARGS_SEPARATOR :   指定发送命令跟命令参数的分隔符,当用户想把一个命令当作参数发送给另一个命令执行时。

      --summary :  显示汇总信息。

      --username=USERNAME : 指定外部认证的用户名。

      --password=PASSWORD :  指定外部认证的密码。

      --metadata=METADATA :  将元数据传递给Salt,用于搜索作业。

Logging Options(日志相关参数):

      -l LOG_LEVEL, --log-level=LOG_LEVEL : 指定日志级别。

      --log-file=LOG_FILE : 指定日志记录文件

      --log-file-level=LOG_LEVEL_LOGFILE : 日志文件日志记录级别。'all', 'garbage', 'trace', 'debug', 'info', 'warning', 'error','critical', 'quiet'. 默认: 'warning'.

Target Options(目标选择选项):

      -E, --pcre : 正则匹配

      -L, --list:  列表匹配,目标表达式将被解释为以逗号分隔的列表。

      -G, --grain:  grains匹配。

      --grain-pcre :grains加正则匹配。

      -N, --nodegroup:组匹配。

      -R, --range:范围匹配。

      -C, --compound : 综合匹配(指定多个匹配,空格隔开)。

      -I, --pillar : pillar值匹配。

      -J, --pillar-pcre : pillar加正则匹配。

      -S, --ipcidr : minions网段地址匹配。

Output Options(输出参数):
      --out=OUTPUT, --output=OUTPUT : 使用指定的输出器从'salt'命令打印输出。 内置的是 'key', 'yaml',  'overstatestage', 'newline_values_only', 'pprint',  'txt', 'raw', 'virt_query', 'compact', 'json', 'highstate', 'nested', 'quiet', 'no_return'.

      --out-indent=OUTPUT_INDENT, --output-indent=OUTPUT_INDENT :   在空格中打印由提供的值缩进的输出。 负值禁用缩进。 仅适用于支持缩进的输出器。

      --out-file=OUTPUT_FILE, --output-file=OUTPUT_FILE : 输出到指定文件。

      --out-file-append, --output-file-append :  输出附加到指定的文件。

      --no-color, --no-colour :  关闭所有的颜色显示。

      --force-color, --force-colour : 强制输出颜色显示。

      --state-output=STATE_OUTPUT, --state_output=STATE_OUTPUT : 覆盖配置的state_output值输出,指定state格式(full, terse, mixed, changes or filter)输出,默认值是full。

salt-key命令详解
# salt-key -h

Actions:
     -l ARG, --list=ARG:显示指定状态的key(支持正则表达式)

     -L, --list-all :列出所有公钥。"--list all"已经弃用。

     -a ACCEPT, --accept=ACCEPT: 接受指定的公钥(除了挂起的密钥之外,使用--include-all匹配拒绝的密钥),支持正则表达式。

     -A, --accept-all :接收所有等待认证的key。

     -r REJECT, --reject=REJECT :拒绝指定等待认证的key(支持正则表达式)

     -R, --reject-all:拒绝所有等待认证的key。

     --include-all: 显示所有状态的key。

     -p PRINT, --print=PRINT :打印指定的公钥支持正则表达式。

     -P, --print-all:打印所有的公钥。

     -d DELETE, --delete=DELET:删除指定的key。

     -D, --delete-all:删除所有的key。

     -F, --finger-all:显示所有key的指纹信息。
查找模块
salt '*' -d|grep ":" |grep disk

查找某个模块拥有的方法
salt 'agent1' sys.list_functions test

标签:部署,salt,指定,Salt,minion,master,key,saltstack,安装
来源: https://www.cnblogs.com/wangyajian/p/11549078.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有