如何在一个Puppet代理中使用多个不同的Puppet主控节点?

4

需要让一个Puppet Agent联系一些不同的Puppet Master。

原因:有不同的组创建独立的清单集合。

可能的组及其任务

  • 应用供应商:应用配置
  • 安全:硬化
  • 操作:路由表,监控工具

每个组都应该运行自己的Puppet Master-数据(清单和适当的数据)应严格分离。如果可能,甚至应该让一组看不到/无法访问其他组的清单(我们在Puppet Agent操作系统上使用MAC)。

所有失败的想法和思路:

  • 仅使用Hiera不够灵活-需要有不同的清单。
  • r10k:支持多个环境,但在每个环境中只能访问一组清单。
  • 多个但相同的Puppet服务器使用例如DNS轮询:这是另一种方式。我们需要不同的Puppet Master。

一些可能可行的方式但...

  • 运行多个Puppet Agent实例。 这“感觉”很奇怪。优点:可以按需限制访问权限(例如,应用程序Puppet Agent可以在应用程序用户下运行)。
  • 修补Puppet使其能够处理多个Puppet Master。 缺点:可能需要一些工作。
  • 使用其他机制来分担责任。 例如:使用不同的git存储库。 创建一个Puppet Master。 Puppet Master拉取所有不同的存储库并提供清单。

我的问题:

  1. 是否有一种简单直接的方式实现这个要求?
  2. 如果没有,是否有一些最佳实践如何做到这一点?
2个回答

2
我认为你试图做的事情最好通过将所有模块和数据合并到一个主节点上来处理,利用环境将达到完全相同的情况(不同的主节点提供不同的模块/数据集)。这可以通过实现标准的多主节点架构来实现(一个CA主节点用于证书签名,多个编译主节点由同一CA主节点签署证书,配置以将证书流量转发到其他地方),并配置每个主节点具有所需的内容。然后在每次运行时必须指定要检查的主节点(使用cronjob或其他方法),并且有可能一次检查会更改另一个设置(可能消除加固/安全概念)。
我敦促你深入考虑如何协作你的各个方面(每个部门的git存储库中的层级数据和模块具有访问控制),以便一个中央主节点可以满足你的需求(访问该主节点是获取来自任何地方的数据/模块的唯一方式)。
这种类型的设置将很难实现,但最终结果将更加可靠和可维护。 Puppet公司甚至可能能够提供咨询帮助你正确实现它。
顺便提一下,可能还有其他方法。

3
另一种选择是将来自不同来源的模块合并到同一个环境中,放在单个(逻辑)主机上。这不仅更容易设置,而且还可以免费自动检测一个组的规格说明和另一个组的规格说明之间的冲突。如果将不同组的规格说明拆分到不同的环境中,则会失去将所有内容放在同一个主控端上的许多优势(但不是全部)。 - John Bollinger
谢谢你的回答。我目前正在尝试使用一个Puppet Master和多个Git服务器来实现这个版本。请给我一些时间来评估它。 - Andreas Florath

0

我经常发现将puppet agent多重主机化对于开发目的非常方便,因为使用本地puppet服务器可以立即测试清单更改 - 如果您仅使用目录环境和单个(远程)puppet服务器,则无需提交,推送和r10k deploy environment

我发现最好的方法是只是改变路径配置(否则会遇到例如CA证书无法验证其他服务器等问题)- 这是您“运行多个puppet agent实例”的建议形式。 (我仍然以特权方式运行它们,因此它们都可以使用apt package {}等)。

对于Puppet 3,我会使用--libdir来改变libdir(因为ssldir在libdir下),但现在(Puppet 4+)看起来更明智的是改变--confdir。 因此,例如:

$ sudo puppet agent -t                 # Runs against main puppet server
$ sudo puppet agent -t \
  --server=puppet.dev.example.com \
  --confdir=/etc/puppetlabs/puppet-dev # Runs against dev puppet server

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接