如下结论bash
结论1
因为minion配置文件里能配置的只有master的IP和master的ret_port,而没法指定master的publish_port
所以minion获取的master的publish_port是在认证经过以后,master告诉它的。再认证经过以前minion端是不知道master的publish_porttcp
使用tcpdump抓包验证了,以及lsof :4506验证了。刚开始是连4506端口的blog
结论2
假如salt-master和salt-minion不在一个机房。而且2个机器均无外网IP,可是均可以上网
salt-master和salt-minion若是正常通讯的话,须要在master机房防火墙作端口映射
假如master机器内网IP是192.168.56.11 master机房防火墙IP是200.200.200.200
minion端配置文件里master的IP是200.200.200.200,其中ret_port也是master机房防火墙的端口ip
ret_port能够不一对一映射
好比下面格式。 master监听在4506端口。防火墙能够映射54506端口到master机器的4506端口
192.168.56.11:4506-----200.200.200.200:54506io
其中publish_port必须一对一映射
master配置文件里的publish_port端口必须和防火墙外网端口一致
192.168.56.11:4505-----200.200.200.200:4505
或者说
192.168.56.11:54505-----200.200.200.200:54505table
实际生产环境也验证了。ast
某地区的minion配置以下class
minion配置的ret_port以下配置
配置本身的id,和主机名不同iptables
防火墙端口映射
其中publish_port是一对一映射的
master的端口
master端的配置文件
场景3
若是防火墙没一对一映射,好比下面场景,防火墙映射2个端口给salt使用 10.0.1.61:4505-----200.200.200.200:14505 10.0.1.61:4506-----200.200.200.200:14506 解决办法 若是防火墙没一对一映射。还能够在master上经过iptables解决,作一个nat 能够这么处理,修改master的配置,让publish_port监听14505端口,4506给ret_port使用不变 iptables -t nat -A PREROUTING -d 10.0.1.61 -p tcp --dport 4505 -j DNAT --to-destination 10.0.1.61:14505