Puppet或Chef是否适合在多租户环境中pipe理非常基本的服务器configuration?

这涉及多租户环境,如小型托pipe公司。

木偶(或类似的)是一个合适的技术来照顾基本的,但临界的质量变化? 例如:

  • 更新DNSparsing器(resolv.conf)
  • 设置SSH密钥
  • 更新NTPconfiguration
  • configurationsnmpd
  • 部署监视脚本,例如SNMP Perl扩展或Nagios脚本

我关心的是安全性和侵入性:

  1. 我不希望任何服务器能够看到它不应该的任何configuration
  2. 我担心木偶大师可能容易受到服务器的攻击
  3. 我不希望Puppet做任何不该做的更改,或者恢复在服务器上完成的任何手动更改。

我应该告诫说,我从来没有使用木偶制作,只是在testing实验室中快速发挥,所以有可能我想这是一个错误的方式!

试试Ansible(ansible.cc)。 可能是为了你。 没有代理在您的客户端上运行。 它增长得非常快。

另一个很好的select是盐堆。

Ansible和Salt很容易理解,如果你愿意的话,你可以使用它们作为命令行工具,就像分布式shell一样。

是的,这当然是可能的。 决定你是否应该这样做是由你自己决定的。

关于你的查询:

1)足够公平。 stream量是基于ssl的,所以证书pipe理很重要。 也不要相信客户提供的与其身份有关的任何“事实”,因为客户可以改变这些事实。 你想依靠客户端的SSL证书来提供服务器的身份validation。 说实话,如果你正确地使用像hiera这样的东西,并且避免在代码中使用巨大的基于主机名的if-blocks(你真的应该这样做),你会没事的。

2)不应该,假设你保持打补丁。 适当configuration,傀儡大师只有一个小小的向量可以被客户攻击。 也就是说,如果受到威胁的话,效果会很大,所以请注意locking它。

3)这真是一个testing和部署问题。 如果你有固体木偶代码,它不会拧你的文件。 它需要一点时间来得到这种sorting,但基本(如你需要)不长。

木偶(或类似的)是一个合适的技术来照顾基本的,但临界的质量变化?

是的,可以这样使用。 我用它来支持外部客户端系统。

我不希望任何服务器能够看到它不应该的任何configuration

如果您使用木偶,则不能启用自动签名。 自动签名允许主机自动请求证书。 您的configuration和权限几乎肯定会直接绑定到证书中的CN上。 你不想随机的电脑上网,并能声称他们实际上是所有秘密的高安全性的东西系统。

如果你真的偏执,你可以调整木偶文件服务器设置来创build只有一些系统可以访问的共享。 文件服务器访问权限基于证书。

我不希望Puppet做任何不该做的更改,或者恢复在服务器上完成的任何手动更改。

有许多不同的方法来允许本地变更。

我经常使用的一种方法如下。 基本上,如果你将一个列表传递给一个source ,那么这个木偶就会尝试列表中的每个项目。 所以我添加列表中的第一个项目指向一个本地文件。

  file { '/etc/ssh/sshd_config': ensure => present, source => ["/etc/ssh/sshd_config_local", "puppet:///modules/ssh/$ssh_config_file"], ... } 

另一个select是使用符号链接。 如果有人想使用木偶版本,他们符号链接到木偶版本的文件。 如果他们想在本地维护他们的configuration,那么他们不会创build符号链接。

  file { '/etc/ssh/sshd_config_puppet': ensure => present, source => "puppet:///modules/ssh/$ssh_config_file", ... } 

另一种可能是使用augeas进行行级更改,而不是更改整个文件。 对你的改变要保守。

3> Puppet或任何这类工具中都没有自动撤销。 你必须写明确的代码来撤销。 此外,您可以研究puppet的环境function,在testing新代码的testing实验室(可能是VM)以及使用代码审查。

我不希望Puppet做任何不该做的更改,或者恢复在服务器上完成的任何手动更改。

对于使用木偶文件types创build的configuration文件,可以通过设置:

 replace => false, 

我使用它在第一次将应用程序部署到服务器时生成一些configuration文件,但是对该configuration文件的任何编辑都不会被Puppet覆盖。

然而,这不符合木偶的理念是一个幂等的部署脚本。

如果可以的话,可能会更好,让不同的由puppetpipe理的pipe理可编辑的文件不在puppetpipe理的文件中。

木偶适用于许多具有相同configuration的服务器。 例如,编写由贵公司提供的共享Web服务器的所有configuration,然后创build该服务器的N个实例。 之后一次对所有实例进行更改(例如,您发现需要更改所有apache虚拟主机的AllowOverride)非常简单。 您还可以将所有configuration信息存储在一个地方,并在版本控制下进行。 在完美的情况下,您可以通过丢弃破损的主机来处理硬件故障,replace为新主机,设置相同的主机名并签名所需的证书。 一切都可以通过木偶来完成。

但是,如果两台主机之间几乎没有configuration共享,那么使用木偶可能会比手动configuration效率低。 另外pipe理一半的服务器的configuration与手动木偶和另一半可能没有多大意义。

总结 :如果你可以为要pipe理的主机创build统一和结构化的configuration,Puppet是你最好的朋友,但是如果你必须处理每个服务(主机,虚拟主机,数据库),Puppet将不会添加很有价值。