如果我设置我的主机文件,使它们使用内部 IP 地址引用所有其他 ec2 节点,这会起作用吗,还是我必须使用外部 IP 地址?
我需要在安全组中指定任何内容才能使内部 IP 地址正常工作吗?
例如 /etc/hosts
ip-10-11-12-13.internal some_node_name
如果我这样做,我可以在脚本中的任何位置引用我之前使用过 IP 地址的 some_node_name 吗?
在我的傀儡代理服务器上,我有一个对我的傀儡大师的引用,例如:
public-ip-here puppet
当我重新启动 Puppet 代理时,系统日志显示他们找不到主代理,并显示以下消息:getaddinfo:名称或服务未知
我确实通过更新让它工作了/etc/default/puppet
我添加了选项:
--server=public-ip-here
据我所知,puppet 默认会尝试使用“puppet”,而且我在我的 hosts 文件中设置了它,那么为什么它不选择它呢?
答案1
在 EC2 中使用 puppet 的一个技巧是给你的 puppetmaster 分配一个 ElasticIP,然后为 ElasticIP CNAME 创建一个 DNS 条目,而不是为 IP 创建一个 A 记录。
AWS DNS 服务器使用 DNS“视图”根据查询是来自同一 EC2 区域内还是外部来改变其响应。如果 CNAME 请求来自 EC2 区域内,AWS DNS 服务器将使用 CNAME 的内部 IP 进行响应。(阅读有关条件 DNS 响应的 BIND“视图”)
您应该在 DNS 中使用 CNAME,以便当 EC2 puppet 客户端向 AWS DNS 服务器查询 Puppetmaster 的 IP 时,它们将收到一个响应,将它们定向到 puppetmaster 的内部 IP,而不是外部 IP。
摘要:不要使用 /etc/hosts 在 EC2 中查找 puppetmaster,因为内部 IP 可能会发生变化,并且无法跨多个区域工作。使用指向存储在 DNS 中的 ElasticIP CNAME 的 CNAME 记录。
答案2
hosts 文件是错误的。如果你的 puppet 服务器有一个内部 IP 10.0.1.10。那么你想要连接到它的每个节点都是
10.0.1.10 puppet
然后该节点将无需 --server 行即可正常连接。如果所有节点都位于美国东部,则它们必须使用内部 IP。如果您的 Puppet 服务器位于东部,而一些客户端位于西部,则西部的客户端使用公共 IP,而东部的客户端仍使用内部 IP。