一、SaltStack简介
SaltStack (以下简称为 Salt)是基于 Python 开发的 一套 C/S 架构配置管理工具,其底层 使用的是 ZeroMQ 消息队列 PUB/SUB 方式通信,并且使用 SSL 证书签发的方式来进行认 证管理 。
Saltstack 比 Puppet 出来晚几年,是基于Python 开发的,也是基于 C/S 架构,服务端 master 和客户端 minions ;Saltstack 和 Puppet 很像,可以说 Saltstatck 整合了 Puppet 和 Chef 的功能,更加强大,更适合大规模批量管理服务器,并且它比 Puppet 更容易配置。
三大功能: 远程命令执行,配置管理(服务,文件,cron,用户,组),云管理。
支持系统:大多数都支持,windows 上不支持安装 master。
Salt的具体步骤如下
- 第一步:salt stack的master与minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc。
- 第二步:salt命令,以ls查看为例,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jobid,根据jobid获取命令执行结果。
- 第三步:master接收到命令后,将要执行的命令发送给客户端minion。
- 第四步:minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理。
- 第五步:minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给master。
- 第六步:master接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中。
- 第七步:salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端
Salt的优势
- 基于 C/S 架构设计,部署简单方便。
- 主控端(Master)和被控端(Minion)基于证书认证,安全可靠.
- 配置简单、功能强大,可扩展性强 。
- 支持 API 及自定义模块,可以通过 Python 轻松扩展 。
- 速度优于其他自动化配置管理工具 。
- 支持现如今所有流行的云平台及 Docker 和 openstack。
二、Salt的安装
Salt 的依赖组件大家可 以参考如下网址: http://docs.saltstack.com/en/latest/topics/installation/index.html
Salt 目前的通信模式总共分为两种模式 : ZeroMQ 和 REAT。 鉴于 REAT 目前还不是太 稳定,我们在这里选择 ZeroMQ 模式 。
1、环境介绍
所有主机均已关闭selinux与防火墙
机器主机名 | 角色 | IP | 系统 |
server | Master | 172.17.7.101 | CentOS7.5 x86_64 |
node1 | Minion | 172.17.7.102 | CentOS7.5 x86_64 |
node2 | Minion | 172.17.7.103 | CentOS7.5 x86_64 |
2、Master安装(server)
#更改主机名
[root@linuxli ~]# hostnamectl set-hostname server
#配置IP地址
[root@server ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:da:bd:33 brd ff:ff:ff:ff:ff:ff
inet 172.17.7.101/16 brd 172.17.255.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::8670:9455:18a2:d70a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
#安装epal源(包含salt的各种安装包)
[root@server ~]# yum -y install epel-release
#安装salt-master
[root@server ~]# yum -y install salt-master
#启动master
[root@server ~]# systemctl enable salt-master.service
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-master.service to /usr/lib/systemd/system/salt-master.service.
[root@server ~]# systemctl start salt-master.service
#查看版本
[root@server ~]# salt --version
salt 2015.5.10 (Lithium)
#查看salt依赖包的版本
[root@server ~]# salt --versions-repo
Salt: 2015.5.10
Python: 2.7.5 (default, Apr 11 2018, 07:36:10)
Jinja2: 2.8.1
M2Crypto: 0.21.1
msgpack-python: 0.5.6
msgpack-pure: Not Installed
pycrypto: 2.6.1
libnacl: Not Installed
PyYAML: 3.10
ioflo: Not Installed
PyZMQ: 14.7.0
RAET: Not Installed
ZMQ: 4.1.4
Mako: Not Installed
Tornado: Not Installed
timelib: Not Installed
dateutil: Not Installed
#查看安装目录
[root@server ~]# tree /etc/salt/
/etc/salt/
├── master
└── pki
└── master
├── master.pem
├── master.pub
├── minions
├── minions_autosign
├── minions_denied
├── minions_pre
└── minions_rejected
3、Minion安装(node1+node2)
#更改主机名
[root@linuxli ~]# hostnamectl set-hostname node1
#配置IP
[root@node1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:ee:07:04 brd ff:ff:ff:ff:ff:ff
inet 172.17.7.102/16 brd 172.17.255.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::2cf0:27cb:417c:9cf5/64 scope link noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::8670:9455:18a2:d70a/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
#安装epal源(包含salt的各种安装包)
[root@node1 ~]# yum -y install epel-release
#安装salt-minion
[root@node1 ~]# yum -y install salt-minion
#修改配置文件
[root@node1 ~]# sed -i 's/#master: salt/master: 172.17.7.101/g' /etc/salt/minion //指定master的ip
[root@node1 ~]# sed -i 's/#id:/id: node1/g' /etc/salt/minion //设置当前minion的id号(唯一id,node2自行设置)
#启动minion
[root@node1 ~]# systemctl enable salt-minion.service
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-minion.service to /usr/lib/systemd/system/salt-minion.service.
[root@node1 ~]# systemctl start salt-minion.service
4、Master中认证minion节点
#查看salt安装目录
[root@server ~]# tree /etc/salt/
/etc/salt/
├── master
└── pki
└── master
├── master.pem
├── master.pub
├── minions
├── minions_autosign
├── minions_denied
├── minions_pre
│ ├── node1
│ └── node2
└── minions_rejected
#查看证书认证管理情况
[root@server ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
node1
node2
Rejected Keys:
#接受所有的证书
[root@server ~]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
node1
node2
Proceed? [n/Y] y
Key for minion node1 accepted.
Key for minion node2 accepted.
[root@server ~]# salt-key -L
Accepted Keys:
node1
node2
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[root@server ~]# tree /etc/salt/
/etc/salt/
├── master
└── pki
└── master
├── master.pem
├── master.pub
├── minions
│ ├── node1
│ └── node2
├── minions_autosign
├── minions_denied
├── minions_pre
└── minions_rejected
#测试连通性
[root@server ~]# salt '*' test.ping
node1:
True
node2:
True
#查看master与minion建立的连接
[root@server ~]# lsof -ni |grep 4505
salt-mast 1978 root 13u IPv4 22129 0t0 TCP *:4505 (LISTEN)
salt-mast 1978 root 15u IPv4 37463 0t0 TCP 172.17.7.101:4505->172.17.7.103:35400 (ESTABLISHED)
salt-mast 1978 root 16u IPv4 37465 0t0 TCP 172.17.7.101:4505->172.17.7.102:59438 (ESTABLISHED)
[root@server ~]# lsof -ni |grep 4506
salt-mast 1998 root 21u IPv4 22135 0t0 TCP *:4506 (LISTEN)
salt-mast 1998 root 28u IPv4 37459 0t0 TCP 172.17.7.101:4506->172.17.7.103:53706 (ESTABLISHED)
salt-mast 1998 root 29u IPv4 37462 0t0 TCP 172.17.7.101:4506->172.17.7.102:54892 (ESTABLISHED)
如果 Master上面没有配置“ auto_accept:True”(自动认证), 那么 Salt证书管理命令如下:
- 查看所有的key情况:salt-key -L
- 接受某个key:salt-key -a ID
- 接受所有的key:salt-key -A
- 删除某个key:salt-key -d
- 删除所有的key:salt-key -D
5、Salt的命令格式
Salt的命令格式比较简单,具体如下所示:
salt '操作目标' 方法 [参数]
example:
salt '*' test.ping
查看所有的minion状态:
[root@server ~]# salt-run manage.status
down:
up:
- node1
- node2
查看所有没在线的Minion
[root@server ~]# salt-run manage.down
查看所有在线的Minion
[root@server ~]# salt-run manage.up
- node1
- node2
查看Minion的版本, 该命令会提示哪些Minion的版本需要升级:
[root@server ~]# salt-run manage.versions
Master:
2015.5.10
Up to date:
----------
node1:
2015.5.10
node2:
2015.5.10
三、Salt的常用组件
1、Salt常用的操作目标
Salt在工作中不仅仅只操作单 Minion机器,它还可以以范围 、 主机 ID列表及网段的 形式来集成化地操作 Minion 机器, 工作中常用的操作目标包括如下几种。
- 1 )匹配所有目标,我们前面应该提到过其用法,即“*”,示例代码如下所示:
[root@server ~]# salt '*' test.ping
- 2)单机操作,这里比较简单, salt后面直接带上单机的 ID 号即可,示例代码如下所示:
[root@server ~]# salt 'node1' cmd.run 'free -m'
- 3)正则匹配( -E),顾名思义,即通过正则表达式来进行匹配即可,示例代码如下所示:
[root@server ~]# salt -E '^n' test.ping
- 4)通过主机 ID 名列表的形式进行匹配(- L),示例代码如下所示:
[root@server ~]# salt -L 'node1,node2' test.ping
- 5)根据Minion端的IP或子网进行匹配(-S), 示例代码如下所示:
[root@server ~]# salt -S 172.17.0.0/16 test.ping
- 6)根据 Minion 端的 grains 详细信息进行匹配过滤( -G),例如,获取主机发行版本为 7.5.1804 的 Python 版本号,示例代码如下所示:
[root@server ~]# salt -G 'osrelease:7.5.1804' cmd.run 'python -V'
node2:
Python 2.7.5
node1:
Python 2.7.5
- 7)根据分组名称来进行匹配过滤,即“-N (…nodegroup)”, 我们一般会根据业务类型 来划分分组,因为业务类型具备相同的特点,包括部署环境 、 应用平台、配置文件等
[root@server ~]# vim /etc/salt/master.d/nodegroup.conf
nodegroups:
backup: 'L@61.174.1.2, 61.174.1.3 ,'
waf: 'L@192 .168.1.4,192.168.1.5,192.168.1.6,'
hadoop: 'L@192.168.1.10,192.168.1.11,192.168.1.12,’
dns: 'L@192.168.1.99,192.168.1.100,192.168.1.101,’
[root@server ~]# salt -N waf test.ping
2、Salt常用模块
Salt 提供了非常丰富的模块( Module)功能 涉及操作系统的基础功能 、 常用工具支持 等,模块是由一系列的 Python 函数组合在一起形成的函数组合 。
使用 Salt的sys模块的list_modules函数列举了 Minion上的所有模块(这里还是以上 面的俩台node机器进行举例说明):
[root@server ~]# salt 'node1' sys.list_modules
[root@server ~]# salt 'node1' sys.list_modules
node1:
- acl
- aliases
- alternatives
- archive
- artifactory
- augeas
- blockdev
- btrfs
- buildout
- cloud
- cmd
- composer
- config
- container_resource
- cp
- cron
- data
- defaults
- devmap
- disk
- django
- dnsmasq
- dnsutil
- drbd
- elasticsearch
- environ
- etcd
- event
- extfs
- file
- firewalld
- gem
- genesis
- git
- gnome
- grains
- group
- hashutil
- hg
- hipchat
- hosts
- http
- img
- incron
- ini
- introspect
- ip
- ipset
- iptables
- jboss7
- jboss7_cli
- key
- keyboard
- kmod
- locale
- locate
- logrotate
- lowpkg
- lvm
- match
- mine
- modjk
- mount
- network
- openstack_config
- pagerduty
- partition
- pillar
- pip
- pkg
- pkg_resource
- postfix
- publish
- pyenv
- random
- random_org
- rbenv
- ret
- rsync
- runit
- rvm
- s3
- saltutil
- schedule
- scsi
- sdb
- seed
- serverdensity_device
- service
- shadow
- slack
- smtp
- sqlite3
- ssh
- state
- status
- supervisord
- svn
- sys
- sysctl
- syslog_ng
- system
- test
- timezone
- user
- vbox_guest
- virtualenv
- xfs
#举例模块内的可用函数
[root@server ~]# salt 'node1' sys.list_functions test
node1:
- test.arg
- test.arg_repr
- test.arg_type
- test.assertion
- test.attr_call
- test.collatz
- test.conf_test
- test.cross_test
- test.echo
- test.exception
- test.fib
- test.get_opts
- test.kwarg
- test.module_report
- test.not_loaded
- test.opts_pkg
- test.outputter
- test.ping
- test.provider
- test.providers
- test.rand_sleep
- test.rand_str
- test.retcode
- test.sleep
- test.stack
- test.try_
- test.tty
- test.version
- test.versions_information
- test.versions_report
#查看某个模块中某个函数的用法
[root@server ~]# salt 'node1' sys.doc test.ping
'test.ping:'
Used to make sure the minion is up and responding. Not an ICMP ping.
Returns ``True``.
CLI Example:
salt '*' test.ping
3、远程命令执行模块
在多台主机上同时执行一条相同命令, 比如像获取所有的Minion端的内存使用情况
cmd模块可以 执行所有命令 , 这就意味着它存在安全隐患 , 使用时需要评估风险
[root@server ~]# salt '*' cmd.run 'free -m'
node2:
total used free shared buff/cache available
Mem: 991 116 455 6 419 703
Swap: 2047 0 2047
node1:
total used free shared buff/cache available
Mem: 991 117 451 6 422 701
Swap: 2047 0 2047
在所有的 Minion 端执行 test.sh 脚本
>此时我们应该要保证 Master端的 /srv/salt 目录里面有 test.sh程序, 它在执行 的过程会做两个动作: 首 先同 步 test.sh 到 Minion 端 的 cache 目 录(/var/cache/salt/minion/ 们Ies/base/),然后再执行之 。
[root@server ~]# salt '*' cmd.script salt://test.sh
node1:
----------
cache_error:
True
pid:
0
retcode:
1
stderr:
stdout:
node2:
----------
cache_error:
True
pid:
0
retcode:
1
stderr:
stdout:
4、用户和用户组模块(即group和user)
- group.add
group.add:添加指定用户组
[root@server ~]# salt '*' group.add test 505
node1:
True
node2:
True
- group.info
group.info:返回用户组信息
比如,我们可以用此命令查看刚才建立的 test组的信息
[root@server ~]# salt '*' group.info test
node2:
----------
gid:
505
members:
name:
test
passwd:
x
node1:
----------
gid:
505
members:
name:
test
passwd:
x
- group.getent
group.getent:返回所有用户组的信息
[root@server ~]# salt '*' group.getent
- user.add
user.add:在所有的minion端上创建一个用户
用法:
salt ‘*’ user.add name
例如,我们在所有的 Minion端上建立 test用户 , uid和 gid分别为 505, home目录为/home/test, shell 为 /bin/bash
[root@server ~]# salt '*' user.add test 505 505 test /home/test /bin/bash
node1:
True
node2:
True
- user.info
user.info:返回用户信息,我们可以用此命令查看刚刚建立的test用户
[root@server ~]# salt '*' user.info test
node1:
----------
fullname:
gid:
505
groups:
- test
home:
/home/test
homephone:
name:
test
passwd:
x
roomnumber:
shell:
/bin/bash
uid:
505
workphone:
node2:
----------
fullname:
gid:
505
groups:
- test
home:
/home/test
homephone:
name:
test
passwd:
x
roomnumber:
shell:
/bin/bash
uid:
505
workphone:
- group.adduser
group.adduser:添加一个用户到指定组中(必须是一个已经存在的组和已经存在的用户)
[root@server ~]# salt '*' user.add test1
node1:
True
node2:
True
[root@server ~]# salt '*' group.adduser test1 test
node1:
True
node2:
True
- group.deluser
比如 ,我们从 test组里删除之前建立 的 test用户
[root@server ~]# salt '*' group.deluser test1 test
node1:
True
node2:
True
不要搞反了,前面是用户名,后面是组名
- user.delete
user.delete:在Minion端删除一个用户
[root@server ~]# salt '*' user.delete test1
node1:
True
node2:
True
5、cp模块
cp模块的功能: 实现远程文件和目录的复制,以及下载 URL等操作。
- 1)下载指定 URL 的内 容到指定位置:
[root@server ~]# salt '*' cp.get_url http://www.baidu.com/index.html /tmp/index.html
node2:
/tmp/index.html
node1:
/tmp/index.html
- 2)将 Master机器的 /etc/hosts文件复制到 Minion端的指定位置:
[root@server ~]# salt '*' cp.cache_local_file /etc/hosts
node1:
/var/cache/salt/minion/localfiles/etc/hosts
node2:
/var/cache/salt/minion/localfiles/etc/hosts
- 3)将 Master机器的 test.sh文件复制到 Minion端的指定位置:
[root@server ~]# mkdir -p /srv/salt
[root@server ~]# touch /srv/salt/test.sh
[root@server ~]# salt '*' cp.get_file salt://test.sh /tmp/test.sh
node1:
/tmp/test.sh
node2:
/tmp/test.sh
如果目标目录不存在的话,带上makedirs=True 参数,则创建该目录
6、pkg包管理
pkg包管理模块的功能 : 管理 Minion端机器的程序包,例如我们最常见的 yum 和 apt get 等
- 1)为所有的 Minion 端安装 Nginx 包
[root@server ~]# salt '*' pkg.install nginx
- 2)为node1主机安装php包
[root@server ~]# salt 'node1' pkg.install php
node1:
----------
httpd:
----------
new:
2.4.6-89.el7.centos
old:
httpd-tools:
----------
new:
2.4.6-89.el7.centos
old:
libzip:
----------
new:
0.10.1-8.el7
old:
mailcap:
----------
new:
2.1.41-2.el7
old:
php:
----------
new:
5.4.16-46.el7
old:
php-cli:
----------
new:
5.4.16-46.el7
old:
php-common:
----------
new:
5.4.16-46.el7
old:
- 3)为vagrantI 主机卸载php包
[root@server ~]# salt 'node1' pkg.remove php
node1:
----------
php:
----------
new:
old:
5.4.16-46.el7
7、service服务模块
service 服务模块的功能:Minion 端程序包服务器管理模块
- 1)所有的 Minion 端都开启 Nginx 服务
[root@server ~]# salt '*' service.start nginx
node1:
True
node2:
True
- 2)所有的 Minion端都加载 Nginx服务
[root@server ~]# salt '*' service.reload nginx
node1:
True
node2:
True
- 3)所有 的 Minion 端都关闭 Nginx 服务
[root@server ~]# salt '*' service.stop nginx
node1:
True
node2:
True
- 4)查看所有的 Minion 端的 Nginx 服务状态
[root@server ~]# salt '*' service.status nginx
node1:
False
node2:
False
- 5)开启所有 的 Minion 端的 Nginx 开机 自启动服务
[root@server ~]# salt '*' service.enable nginx
node1:
True
node2:
True
- 6)关闭所有 的 Minion 端的 Nginx 开机自启动服务
[root@server ~]# salt '*' service.disable nginx
node1:
True
node2:
True
8、file文件服务模块
file文件服务模块的功能:针对所有的 Minion端文件的常见操作,例如文件读写、权 限控制等操作
- 1)为所有的 Minion端 /tmp/index.html文件内容追加“hello,world”内容
[root@server ~]# salt '*' file.append /tmp/index.html 'hello,world'
node1:
Wrote 1 lines to "/tmp/index.html"
node2:
Wrote 1 lines to "/tmp/index.html"
- 2)查看 /tmp/index.html的 stats信息
[root@server ~]# salt '*' file.stats /tmp/index.html
- 3)查看/tmp/index.html 的 mode 权限信息
[root@server ~]# salt '*' file.get_mode /tmp/index.html
node1:
0644
node2:
0644
- 4)将 /tmp/route_auto.sh 的 mode 权限信息修改为 755
[root@server ~]# salt '*' file.set_mode /tmp/index.html 755
node1:
0755
node2:
0755
- 5)复制所有的 Minion端的 /tmp/index.html文件至 /root 目录下面
[root@server ~]# salt '*' file.copy /tmp/index.html /root/index.html
node1:
True
node2:
True
- 6)所有 的 Minion 端都删除/tmp/index.html 文件
[root@server ~]# salt '*' file.remove '/tmp/index.html'
node1:
True
node2:
True
其实这些步骤也可以用cmd.run来代替
9、Cron模块
Cron 模块的功能:实现 Minion 端的 Crontab 操作
- 1)查看 node1 机器的 root 用户的 Crontab 清单
[root@server ~]# salt 'node1' cron.raw_cron root
node1:
- 2)添加 Minion 端的 Crontab 定时作业
参数说明:第一个参数为用户,剩下的表示分 、 时 、 日 、 月、周、命令 、 任务描述信息 (可忽略),建议每个参数都引用起来,比如说添加定时 ntpdate对时任务
[root@server ~]# salt 'node1' cron.set_job root '*/5' '*' '*' '*' '*' '/usr/sbin/ntpdate ntp.aliyun.com >>/dev/null 2>&1'
node1:
new
[root@server ~]# salt 'node1' cron.raw_cron root
node1:
# Lines below here are managed by Salt, do not edit
*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com >>/dev/null 2>&1
- 3)查看指定 Minion端的 Crontab定时作业任务,后面记得要带上用户名(如 root)
[root@server ~]# salt 'node1' cron.ls root
node1:
----------
crons:
|_
----------
cmd:
/usr/sbin/ntpdate ntp.aliyun.com >>/dev/null 2>&1
comment:
None
daymonth:
*
dayweek:
*
hour:
*
identifier:
None
minute:
*/5
month:
*
env:
pre:
special:
- 4)删除指定 Minion端的 Crontab定时作业任务.
例如,我们要删除刚才添加的 ntpdate对时任务( cmd记得带上)
[root@server ~]# salt 'node1' cron.rm_job root '/usr/sbin/ntpdate ntp.aliyun.com >>/dev/null 2>&1'
node1:
removed
10、network模块
network模块的功能:返回 Minion端的详细网络信息。
- 1)获取 node1 机器的网卡配置
[root@server ~]# salt 'node1' network.interfaces
- 2)获取 node1 机器的 IP 地址配置信息
[root@server ~]# salt 'node1' network.ip_addrs
node1:
- 172.17.7.102
- 3)在 node1 机器上执行 dig 指定网站并获取相关信息
[root@server ~]# salt 'node1' cmd.run 'yum -y install bind-utils'
[root@server ~]# salt 'node1' network.dig www.baidu.com
node1:
; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.1 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60071
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 1194 IN CNAME www.a.shifen.com.
www.a.shifen.com. 218 IN A 220.181.38.150
www.a.shifen.com. 218 IN A 220.181.38.149
;; Query time: 54 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Jul 10 13:09:33 CST 2019
;; MSG SIZE rcvd: 104
11、iptables模块
iptables 模块的功能:操作 Minion 端机器的 iptables 规则
- 1)为所有的 Minion 端机器添加允许 172.17.7.101 访问的规则
[root@server ~]# salt '*' iptables.insert filter INPUT position=1 rule='-s 172.17.7.101 -j ACCEPT'
node1:
node2:
- 2)为所有的 Minion 端机器删除 192.168.185.10 的相关规则
[root@server ~]# salt '*' iptables.delete filter INPUT rule='-s 172.17.7.101 -j ACCEPT'
node1:
node2:
- 3)为所有的 Minion 端机器保存 iptables 规则
[root@server ~]# salt '*' iptables.save /etc/sysconfig/iptables
node1:
Wrote 1 lines to "/etc/sysconfig/iptables"
node2:
Wrote 1 lines to "/etc/sysconfig/iptables"