这是我的设置:
我可以直接从instanceA和B SSH到instanceC,没有任何问题。
但是每当我通过SSH进入NLB的DNS时,我只能从instanceA连接。
每当我从instanceB SSH到NLB时,连接就会超时。
我检查了NLB的网络接口(interface),发现每个NLB的可用区都有一对公用和专用IP。
我可以从instanceA SSH到NLB的公用IP地址,但不能SSH到NLB的privateIP。
我可以从instanceB SSH到NLB的私有(private)IP地址,但不能SSH到NLB的publicIP。
现在,我尝试使用ssh -vvv NLB,可以看到我正在尝试连接到NLB的公共(public)IP。这可能就是为什么我无法从instanceB连接到NLB的原因,因为如上所述,instanceB只能连接到NLB的privateIP。
我试图修改InstanceC的sg,并允许从0.0.0.0/0开始使用ssh,我可以从instanceB成功访问NLB。但这不是我想要的。我不想让所有人都通过NLB访问instanceC。
我也希望instanceB能够像实例A一样通过NLB切换到instanceC。我该怎么做?我需要在sg,nlb,az等中进行哪些修改?
谢谢!
最佳答案
为了解决您的问题中的一个方面...
您应避免将Amazon EC2实例的IP地址放入安全组。如果希望允许两个实例进行通信(例如,实例A与实例C对话),则应配置:
SG-A
),允许(大概)来自Internet的传入流量SG-C
),它允许来自SG-A
的入站流量也就是说,
SG-C
应该专门引用SG-A
。该引用将自动转换为安全组ID(例如sg-xxx
)。这意味着与SG-A
关联的任何实例都将被允许在给定端口上进行与SG-C
关联的任何实例的入站连接。这种方法的好处是可以替换实例或更改IP地址,而不会影响安全组。您还可以将其他实例添加到这些安全组中,它们将被自动授予相同的权限。
底线:避免引用安全组中的特定专用IP地址。