我有几个实例运行在相同的安全组(说:组-A),需要相互交谈,特别是端口4369。
每个实例都有一个不同的弹性IP。
安全组configuration为允许通过TCP传入stream量:4369 Soruce:sg-XXXXX(Group-A)
然而,实例只能通过内部IP(10.xxx.xxx.xx)或亚马逊公共DNS:ec2-ELASTIC-IP.compute-1.amazonaws.com(显然亚马逊将把它翻译成内部IP) 。
如果我使用弹性IP,它将无法正常工作。 如果我使用自己的指向Elastic IP的FQDN,它将不起作用。
如果将入站规则中的源从sg-XXXXX(Group-A)更改为0.0.0.0,则可以使用我自己的FQDN和弹性IP。 但是我们不会将这个用于安全方面。 如果我删除入站规则,什么都不起作用,甚至使用内部IP。
那么如果我想使用我自己的FQDN我应该怎么做? (worker-1.company.com – >弹性IP),它更易读易pipe理。
您描述的行为是正常的,因为当通过弹性IP实例之间进行通信时,安全组内机器的身份(依赖于sg-xxxxxxxx源的安全组configuration)无法真正build立完整信心,因为翻译地址通过中间硬件发送stream量(大概),stream量不再被视为直接来自实例。
解决办法是使用指向公有DNSlogging的CNAMElogging来命名DNS中的主机,而不是指向特定IP地址的Alogging。
在company.com DNS区域中:
worker-1 IN CNAME xx-xx-xx-xx.compute-1.amazonaws.com.
现在,worker-1.company.com将从内部查询私人IP,并从外部查询公共IP。
这并不完美,但是您可以在每个实例的hosts文件中添加从FQDN到私有IP的显式映射。 所以你的代码将使用FQDN,但networking实际上会使用私人通信(无论如何,这是更安全)。
如果你有一个相对固定的小实例,这是一个合理的select。 如果可能的话,你应该自动化这个过程。
您也可以使用亚马逊的路由53作为服务。 将您的FQDN映射到实例的公共DNS名称。 在EC2内部,这将映射到私有IP。 您仍然需要使用Route 53 API自动执行此操作。