我有一个问题,我相信其他人已经遇到,我正在试图find最好的解决scheme。 它可能有点长,所以请裸露在我身边。
请注意:端口22只是一个示例端口将有实例,当它不是端口22我正在处理。
"server-1" has a security group "group-1" "server-2" has a security group "group-2" "server-1" has an elastic ip address assigned to it ie 111.222.333.444
和
"group-2" is allowed to connect to "group-1" via port 22
所以如果我通过以下命令从服务器2 ssh到服务器1
ssh -iKEY.pem [email protected]
连接是好的,按预期工作。
但是,如果我尝试通过这个命令连接。
ssh -iKEY.pem [email protected]
它不工作,我认为是明显的原因
为了连接到服务器1 ,我离开了awsnetworking,因此aws将服务器2的连接视为外部资源,不再是aws实例。 这意味着它不会使用这样的安全组:
"group-2" is allowed to connect to "group-1" via port 22
我想通过ElasticIP地址连接到服务器1 ,所以我可以愉快地重新启动服务器1和/或服务器2 ,而不必担心aws实例名称/ IP地址已经改变,即第一个ssh示例中的域名将在重新启动/新实例接pipe时发生变化。
所以我的问题确实是做这件事的最佳做法。 我现在看到的选项是:
做一个反向DNS查询ElasticIP地址,并使用此域名formsserver-2连接到服务器1,即弹性IP地址是111.222.333.444,反向查找将返回我
ec2-111-222-333-444.eu-west-1.compute.amazonaws.com
我不能继续build立这个手动,因为我也需要知道什么可用性区域的实例是为了做到这一点(我想非常不要在意它在哪里)。
我会假设有一个aws API调用,我可以做到抓住当前的实例名称,连接到ElasticIP地址。 Iam不太知道应用程序是否在aws服务器上,并希望远离api。
在aws中使用vpc实例。 这样,我总是可以将相同的私有IP地址附加到服务器1,并且即使在重启任一服务器之后也可以可靠地连接到它。 然而,这似乎来与很多configuration和维护。
我可以在重启后手动更新指向server-1的任何configuration设置(这不是一个系列build议)。
打开服务器1端口22到世界(注:我想打开其他端口,不仅仅是22),并担心应用程序进行身份validation。 (再不是一个明智的select,如果我想要打开端口80到服务器2,那么必须使用.htaccess或类似的身份validation连接,因此只是移动这个问题,而不是真的解决它)。
我有选项1和2的问题是,我必须始终做这些查找产生大规模的应用程序或我caching它,必须忍受的事实,如果服务器1的实例改变,即重新启动那么有一段时间server-2将无法连接到server-1,直到它将实例名称解除caching为止。
选项3可能是最好的解决scheme,但它configuration和维护是耗时的,需要我们公司内部的额外知识。
有没有人有其他build议,将工作?
根据您的要求,我会同意使用VPC是最理想的解决scheme。 既然听起来像你已经完成了你的研究,你知道VPC允许对子网和主机寻址进行更精细的控制。 要回答你的问题,那就是“最佳实践”方法。
我要做的是创build两个私有子网,每个子网中都有一个子网,并在每个子网中放置一个弹性networking接口,并使用静态私有IP地址。 然后您可以随意附加/分离ENI到适当的实例。 这允许一些很酷的东西和function,例如在服务器之间热切换一个网卡,同时stream量仍然stream经它。 是的,build立VPC有一个重要的学习曲线,但是当使用多个需要彼此交stream的EC2实例时,这种折中的安全性和灵活性大大提高。
值得注意的是,使用AWS API(如您所提到的)也是您的迫切需求的可行解决scheme。 但是,越往下走这个写定制解决scheme的道路,随着需求的增长,需要花费的时间就越多。
查找实例公共dns的AWS api方法是这样的:
http://169.254.169.254/latest/meta-data/public-hostname
(这是一个AWS内部IP,而不是外部服务。)
但是至于问题的根源,Elastic IP的公有DNS应该永久与该Elastic IP关联,无论它指向哪个重新启动/新实例。 我所有的弹性IP公共DNS看起来像ec2-11-22-33-44.compute-1.amazonaws.com。 你怎么有一个在公共DNS的地区? 上面的api返回什么?