如何实现公网Puppet Master与内网Puppet Agent的连接?
公网Puppet Master与内网Agent连接方案
以下是几种可行的连接方案,根据你的网络环境选择:
方案1:直接连通(内网Agent可访问公网)
这是最直接的方式,适用于内网Agent能发起对外HTTPS请求的场景:
- Master端配置:
- 调整防火墙/安全组规则,允许内网Agent所在公网出口IP段访问Master的
8140端口(Puppet默认通信端口)。 - 确认Puppet服务正常运行:
puppetserver status。
- 调整防火墙/安全组规则,允许内网Agent所在公网出口IP段访问Master的
- Agent端配置:
- 修改
/etc/puppetlabs/puppet/puppet.conf(开源Puppet路径)的[agent]段:server = 公网Master的域名或IP certname = 你的Agent唯一标识(如hostname) - 触发证书请求:
puppet agent -t。
- 修改
- 证书签署:
- 在Master端列出待签署证书:
puppet cert list。 - 签署Agent证书:
puppet cert sign <Agent的certname>。 - 回到Agent端再次执行
puppet agent -t,验证连接成功。
- 在Master端列出待签署证书:
方案2:VPN隧道(内网Agent无法直接访问公网)
如果内网是封闭环境,Agent无法直接出网,建议通过VPN建立加密隧道:
- 在公网Master上部署VPN服务(如WireGuard、OpenVPN),配置允许内网Agent接入的规则。
- 在内网Agent上配置VPN客户端,连接到Master的VPN服务,获取同一虚拟网段的IP。
- 修改Agent的
puppet.conf,将server设置为VPN网段内的Master IP。 - 后续证书请求、签署步骤同方案1。
- 优势:所有Puppet通信都在加密隧道内,无需暴露Master的8140端口到公网,安全性更高。
方案3:反向SSH隧道(临时测试场景)
适合临时验证连接,或无VPN条件的场景(需Agent能SSH到公网中转服务器):
- 在Agent上建立正向SSH隧道,将Master的8140端口映射到Agent本地:
(如果中转服务器就是Master,可简化为ssh -L 8140:公网MasterIP:8140 中转服务器用户名@中转服务器IPssh -L 8140:localhost:8140 用户名@公网MasterIP) - 修改Agent的
puppet.conf,设置server = 127.0.0.1。 - 执行
puppet agent -t发起证书请求,后续签署步骤同方案1。 - 注意:长期使用需配置SSH密钥免密登录,并用
autossh保持隧道后台运行。
方案4:Puppet Bolt(无持久Agent需求)
如果不需要持续的Agent-Master同步,仅需执行一次性配置任务,可使用Puppet Bolt:
- 确保内网Agent开启SSH服务,且公网Master能通过端口转发/VPN访问Agent的SSH端口。
- 在Master上安装Bolt工具,编写Puppet任务或计划。
- 执行命令推送配置:
bolt plan run <计划名称> --targets <内网Agent的IP>。
关键注意事项
- 安全性:始终启用Puppet证书验证;限制Master 8140端口的访问来源;VPN/SSH场景使用密钥认证替代密码。
- 时间同步:确保Master和Agent的系统时间一致,避免证书过期或验证失败。
- 延迟优化:跨公网连接时,可调整Agent的
runinterval参数(默认30分钟),减少频繁同步带来的网络压力。
内容的提问来源于stack exchange,提问作者Majedur
相关产品推荐
相关产品推荐

