![Chef 服务器需要公开吗?](https://linux22.com/image/684466/Chef%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%9C%80%E8%A6%81%E5%85%AC%E5%BC%80%E5%90%97%EF%BC%9F.png)
我在本地网络上运行了一个 Chef 服务器,并使用同一网络上的其他机器对其进行了测试,一切正常。我启动了一个 ec2 实例,并尝试引导,它一直运行,直到尝试连接到 Chef 服务器。我的问题是,有没有办法绕过 Chef 服务器的公共设置?或者有没有办法可以绕过节点对服务器的任何要求?
答案1
当你应用最常见的模型来使用Chef 客户端和...一起Chef 服务器,则客户端需要访问服务器。您可以应用任何网络技术(从 VPN 到将客户端 IP 列入白名单),但客户端(通常)会定期检查。
另一种方法是使用零厨师(在过去的美好时光里,人们使用厨师独奏为此,您可能会找到一些有关此内容的博客文章)。这样,您可以从本地磁盘(EC2 实例的磁盘)或 IIRC 直接从 HTTP URL(即 S3)运行您的食谱。
厨师不遵循推模型,它允许您仅通过 SSH 连接设置目标实例。如果您确实需要它,那么 Ansible 可能更适合您。
尽管如此,我还是建议你让你的 Chef Server 也在 AWS 上运行 - 或者直接使用他们的 Chef 产品AWS OpsWorks。
答案2
我目前的设置和你一样:
- Chef 服务器(内部)
- AWS EC2 实例(外部)
当我从 Chef Server 引导到 AWS EC2 时,它会失败。
解决方案对我有用:
- 将您的 Chef 服务器与公共 IP 地址关联。我通过反向 NAT 实现了这一点。
- 一旦您的 Chef Server 向公众开放,请确保您的内部防火墙允许来自 AWS EC2 实例的 TCP/IP 连接。
在 AWS EC2 实例上,修改 hosts 文件以包含以下内容
# Chef Server Public IP Address | Chef Server Hostname 111.111.111.111 production-chef-server.mydomain.com
- 跑步
knife bootstrap aws-ec2-public-ip -x root