Linux Saltstack salt-ssh salt-syndic salt-api部署

一、salt-ssh简介

salt-ssh可以独立运行的,不需要minion端。

salt-ssh 用的是sshpass进行密码交互的。

以串行模式工作,性能下降,即类似与ansible的模式。

二、部署salt-ssh

实验前关闭一个minion端:

[root@server3 ~]# systemctl stop salt-minion

 
   
   
   
   
  • 1

安装salt-ssh:

[root@server1 ~]# yum install -y salt-ssh

 
   
   
   
   
  • 1

配置roster文件,默认的本地路径是 /etc/salt/roster:

[root@server1 ~]# vim /etc/salt/roster
[root@server1 ~]# cat /etc/salt/roster
server3:
  host: 172.25.63.3
  user: root
  passwd: redhat

 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这样就配置完成了,接下来进行测试:

[root@server1 ~]# salt-ssh server3 test.ping
server3:
    True

 
   
   
   
   
  • 1
  • 2
  • 3

可以看出部署成功,但是速度很明显变慢了。

注意当第一次访问的时候可能会由yes或no的选项:
Linux Saltstack salt-ssh salt-syndic salt-api部署_第1张图片
可以加-i选项直接忽略:

[root@server1 ~]# salt-ssh server3 test.ping -i
server3:
    True

 
   
   
   
   
  • 1
  • 2
  • 3

也可以配置ssh忽略主机key的检测:

[root@server1 ~]# vim .ssh/config
[root@server1 ~]# cat .ssh/config
StrictHostKeyChecking no

 
   
   
   
   
  • 1
  • 2
  • 3

测试其他命令:

[root@server1 ~]# salt-ssh server3 cmd.run df
server3:
    Filesystem            1K-blocks    Used Available Use% Mounted on
    /dev/mapper/rhel-root  17811456 1419016  16392440   8% /
    devtmpfs                 495428       0    495428   0% /dev
    tmpfs                    507512       0    507512   0% /dev/shm
    tmpfs                    507512    6896    500616   2% /run
    tmpfs                    507512       0    507512   0% /sys/fs/cgroup
    /dev/sda1               1038336  135208    903128  14% /boot
    tmpfs                    101504       0    101504   0% /run/user/0

 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

可以看出部署成功。

实验结束后打开minion端:

[root@server3 ~]# systemctl start salt-minion

 
   
   
   
   
  • 1

一、salt-syndic简介

如果大家知道zabbix proxy的话那就很容易理解了,syndic其实就是个代理,隔离master与minion。

Syndic必须要运行在master上,再连接到另一个topmaster上。

Topmaster 下发的状态需要通过syndic来传递给下级master,minion传递给master的数据也是由syndic传递给topmaster。

topmaster并不知道有多少个minion。

syndic与topmaster的file_roots和pillar_roots的目录要保持一致。
Linux Saltstack salt-ssh salt-syndic salt-api部署_第2张图片

二、salt-syndic配置

主机作用

主机 ip 作用
server4 172.25.63.4 topmaster
server1 172.25.63.1 salt-master(即syndic节点)
server2 172.25.63.2 salt-minion
server3 172.25.63.3 salt-minion

且各主机selinux与防火墙均关闭。

topmaster端

在server4安装salt-master:

[root@server4 yum.repos.d]# yum install salt-master -y
[root@server4 ~]# cd /etc/salt/
[root@server4 salt]# vim master
[root@server4 salt]# cat -n master | grep 1047
  1047	order_masters: True			##作为顶级master

 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
启动服务:

[root@server4 salt]# systemctl enable --now salt-master.service 

 
   
   
   
   
  • 1

syndic节点端

安装salt-syndic:

[root@server1 ~]# yum install salt-syndic -y

 
   
   
   
   
  • 1

编辑配置文件将其指定为syndic节点:

[root@server1 ~]# vim /etc/salt/master
[root@server1 ~]# cat -n /etc/salt/master | grep 1051
  1051	syndic_master: 172.25.63.4				##指向topmaster

 
   
   
   
   
  • 1
  • 2
  • 3

在这里插入图片描述重启master端并启动syndic:

[root@server1 ~]# systemctl restart salt-master.service 
[root@server1 ~]# systemctl start salt-syndic.service 

 
   
   
   
   
  • 1
  • 2

接着就可以在topmaster端查看下级master的连接授权:

[root@server4 salt]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
server1
Rejected Keys:

 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

可以看到server1等待授权,接受server1:

[root@server4 salt]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
server1
Proceed? [n/Y] Y
Key for minion server1 accepted.

 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

现在salt-syndic集群部署成功。

测试

在topmaster执行:

[root@server4 salt]# salt '*' test.ping
server2:
    True
server3:
    True

 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5

可以看出topmaster可以访问到minion端。

一、salt-api简介

SaltStack 官方提供有REST API格式的 salt-api 项目,将使Salt与第三方系统集成变得尤为简单。

官方提供了三种api模块:

  • rest_cherrypy
  • rest_tornado
  • rest_wsgi

官方链接:https://docs.saltstack.com/en/latest/ref/netapi/all/index.html#all-netapi-modules

二、salt-api配置及使用

安装salt-api:

[root@server1 ~]# yum install salt-api -y

 
   
   
   
   
  • 1

生成证书:

[root@server1 ~]# cd /etc/pki/tls/private
[root@server1 private]# openssl genrsa 2048 > localhost.key
Generating RSA private key, 2048 bit long modulus
.................+++
...............+++
e is 65537 (0x10001)
[root@server1 private]# cd /etc/pki/tls/certs
[root@server1 certs]# make testcert		//根据提示填写相关信息即可

 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这时我们生成了证书(localhost.crt)和key(localhost.key)。

创建用户认证文件:

[root@server1 certs]# cd /etc/salt/master.d/
[root@server1 master.d]# vim tls.conf
[root@server1 master.d]# cat tls.conf 
rest_cherrypy:
  port: 8000
  ssl_crt: /etc/pki/tls/certs/localhost.crt
  ssl_key: /etc/pki/tls/private/localhost.key

 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

创建用户授权文件:

[root@server1 master.d]# vim auth.conf
[root@server1 master.d]# cat auth.conf 
external_auth:
  pam:							#热插拔模式
    saltapi:					#用户
      - .*
      - '@wheel'
      - '@runner'
      - '@jobs'

 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

创建用户并配置密码:

[root@server1 master.d]# useradd -s /sbin/nologin saltapi
[root@server1 master.d]# passwd saltapi

 
   
   
   
   
  • 1
  • 2

重启master服务并启动salt-api服务:

[root@server1 master.d]# systemctl restart salt-master.service 
[root@server1 master.d]# systemctl start salt-api.service 

 
   
   
   
   
  • 1
  • 2

启动后8000端口以开启:

[root@server1 master.d]# netstat -antlup | grep 8000
\tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      21157/salt-api      
tcp        0      0 127.0.0.1:53016         127.0.0.1:8000          TIME_WAIT   -    

 
   
   
   
   
  • 1
  • 2
  • 3

获取认证token:

[root@server1 master.d]# curl -sSk https://localhost:8000/login     -H 'Accept: application/x-yaml'     -d username=saltapi     -d password=redhat  -d eauth=pam
return:
- eauth: pam
  expire: 1589864868.838355
  perms:
  - .*
  - '@wheel'
  - '@runner'
  - '@jobs'
  start: 1589821668.838354
  token: 738aea2609580fdf80011eaa0794657016a29a4b
  user: saltapi

 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在返回的信息中包含我们需要的token。

测试推送任务:

[root@server1 master.d]# curl -sSk https://localhost:8000  \
>     -H 'Accept: application/x-yaml' \
>     -H 'X-Auth-Token: 738aea2609580fdf80011eaa0794657016a29a4b'\
>     -d client=local \
>     -d tgt='*' \
>     -d fun=test.ping
return:
- server2: true
  server3: true

 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

命令中token为上各命令的返回值,从返回值可以看出salt-api配置成功。

测试其他命令:

[root@server1 master.d]# curl -sSk https://localhost:8000      -H 'Accept: application/x-yaml'     -H 'X-Auth-Token: 738aea2609580fdf80011eaa0794657016a29a4b'    -d client=local     -d tgt='*'     -d fun=cmd.run -d arg=hostname
return:
- server2: server2
  server3: server3

 
   
   
   
   
  • 1
  • 2
  • 3
  • 4

也可以调用state模块:

[root@server1 master.d]# curl -sSk https://localhost:8000      -H 'Accept: application/x-yaml'     -H 'X-Auth-Token: 738aea2609580fdf80011eaa0794657016a29a4b'    -d client=local     -d tgt='*'     -d fun=state.sls -d arg=keepalived

 
   
   
   
   
  • 1

也可以基于这个api开发自动化运维系统(github上有现成的项目,搜索oms)。

你可能感兴趣的:(Linux Saltstack salt-ssh salt-syndic salt-api部署)