这是一个主要关于厨师的问题。在研究使用 Chef 控制 Amazon VPC 内部的节点时,我遇到了一些困难,主要是没有外部 IP 地址的节点不容易被 chef 访问。
我完成了场景 #2 的基本教程 http://docs.amazonwebservices.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html#Case2_Launch_NAT
但是,这次超时:
knife ec2 server create -N app-server-1 -f m1.small -i rails-quick-start.pem -r "role[base]" -G WebServerSG -S rails-quick-start -x ubuntu -s subnet-580d7e30 -y -I ami-073ae46e -Z us-east-1d
我做错了什么?
为了使 knife 能够与服务器通信,您可能需要设置 VPN。如果您的 VPC 已经通过 VPN 连接到您的本地网络,那么它应该可以工作,但如果没有,您可能需要运行 OpenVPN 服务器或类似的东西。
您还可以通过其他两种方式设置服务器:
- 创建一个 EC2 实例并让它启动。然后用刀子引导它。
- 使用适当的用户数据创建一个 EC2 实例,并对其进行云初始化设置(如果您正在运行的就是包含云初始化的 ubuntu)。
解决方案是设置一个隧道,并将公开可见计算机的某个端口上的ssh隧道传输到云中的所有其他计算机。所以我的负载均衡器在套接字 80 上提供 http 流量,可通过套接字 22 访问,并使用套接字 2222、2223、2224、...通过隧道将 SSH 传送到非公有云实例。在负载均衡器(或任何公共实例)上运行:
ncat --sh-exec "ncat PRIVATE.SUBNET.IP 22" -l 2222 &
例如:
ncat --sh-exec "ncat 10.0.1.1 22" -l 2222 &
需要有一种将弹性 IP 关联到实例的方法,以便获取公有 IP 以便于访问,然后通过 EIP 执行所有引导和 SSH 活动。