如何使用 Salt Stack 将 Minions 全部置于 NAT 之后(不可公开访问,默认 Salt 端口未打开)?

如何使用 Salt Stack 将 Minions 全部置于 NAT 之后(不可公开访问,默认 Salt 端口未打开)?

Salt Stack 小兵能否使用在所有消费者 NAT 路由器中默认打开的标准端口(并且小兵没有公共 DNS 记录或静态 IP)从 NAT/防火墙等后面与 Salt Master 进行通信?

我正在努力完成我的第一个盐教程,但我遇到了困难。

我可以在 Ubuntu salt-master 上配置 iptables。但我无法控制 minions 所处的路由器/NAT。

到目前为止我尝试了以下设置:

在/etc/salt/主服务器中:

publish_port: 465
ret_port: 443

在/etc/salt/minion中:

master_port: 465

那没有用。

背景:

我有一个定制开发的应用程序,目前运行在大约 40 台 Kubuntu 笔记本电脑上(计划增加更多)。每隔几个月我必须更新该应用程序。(通常这仅相当于替换 .jar 文件,这需要 root 权限。)我还必须运行 Ubuntu 更新和一些其他小操作。我一直手动逐个执行此操作,使用 Team Viewer 登录每个客户端。

我希望大幅改善此流程。我知道的两个选项是:

  1. 使用反向 ssh 隧道和 bash 脚本。我测试过,它有效。但我没有得到使用 Salt Stack 时得到的任何报告等。

  2. 使用 Salt Stack(或类似)管理工具。但我需要一个非常简单的工具。我不能把时间花在复杂的学习上。

我查看了 Puppet 和一堆相关工具。我发现唯一一个对我来说足够简单的工具(到目前为止)是 Salt Stack。但我现在陷入困境,因为我的 minion 无法联系到 salt-master,如上所述。

我很感激您的建议。

答案1

答案是“它就是有效”。无需更改配置文件(无论是 master 还是 minion)。无需担心 minion 的 NAT 或防火墙。

但是,在主服务器上,需要在防火墙上打开两个端口。我通过以下方式完成了此操作:

iptables -A INPUT -m state --state new -m tcp -p tcp --dport 4505 -j ACCEPT
iptables -A INPUT -m state --state new -m tcp -p tcp --dport 4506 -j ACCEPT

在 minions 上,向 /etc/hosts 添加一个条目,将名称“salt”指向 master 的 IP 地址。示例:

root@minion2:~# cat /etc/hosts
127.0.0.1       localhost.localdomain   localhost
111.222.333.444  salt salt.example.com

确实,非常简单。

答案2

为了使 minion 的连接能够通过任何允许 http 和 https 端口传出的防火墙,我们在 master 上使用了这个:

publish_port: 80
ret_port: 443

这是关于 minion 的:

publish_port: 80
master_port: 443

我仍然发现这些名字令人困惑 —— 我希望publish_portmaster 上的名字与master_portminion 上的名字相对应 —— 但事实就是这样。

相关内容