我有三个具有弹性 IP 的 EC2 实例。
每个实例都包含一个服务器。
每个服务器都需要在每台机器上打开 TCP 端口 8181、2181、2888 和 3888。
每个服务器都应该能够通过这些端口与其他服务器通信。
我创建了一个安全组(例如,名为sg-4d775c42
:),其中我放置了以下规则:
自定义 TCP 规则 | TCP | 8181 | sg-4d775c42
自定义 TCP 规则 | TCP | 2181 | sg-4d775c42
自定义 TCP 规则 | TCP | 2888 | sg-4d775c42
自定义 TCP 规则 | TCP | 3888 | sg-4d775c42
我以为这些规则的意思是安全组中的每台机器都sg-4d775c42
可以调用同一组中其他机器的端口 8181、2181、2888 和 3888。
但事实好像并不是这样!
如果我向全世界开放端口,即遵循以下规则:
自定义 TCP 规则 | TCP | 8181 | 0.0.0.0/0
自定义 TCP 规则 | TCP | 2181 | 0.0.0.0/0
自定义 TCP 规则 | TCP | 2888 | 0.0.0.0/0
自定义 TCP 规则 | TCP | 3888 | 0.0.0.0/0
当然,我的服务器可以互相交谈。
此外,这 3 个服务器之间的私有通信是第一步。第二步是将这 3 个服务器组合到另一个实例的另一个私有网络。
所以我的问题是:
如何创建(或模拟)在我的 EC2 实例之间打开端口的私有网络?
答案1
我以为这些规则的意思是安全组sg-4d775c42中的每台机器都可以调用同一组中其他机器的端口8181、2181、2888和3888。
确实如此,但前提是您使用其 AWS 内部 IP。您可以使用ec2-xxx-xxx-xxx-xxx.us-region-1.compute.amazonaws.com
每个实例获取的地址(将返回 AWS 网络内的内部 IP)或直接通过实例的私有 IP 来执行此操作。
如果您使用实例的弹性 IP 访问公共互联网,AWS 将丢失有关它们所属安全组的所有信息,因此只有基于 IP 的规则才会起作用。