请考虑以下基于this document的设置:
-
具有四个子网的AWS VPC . 一个公共和三个私人(每个可用区一个)
-
VPC附加了Internet网关 .
-
公有子网(10.0.1.0/24)具有Elastic Load Balancer(V2),NAT网关和用于SSH'进入环境的堡垒服务器 . 此子网的路由表定义为:
10.0.0.0/16 -> local 0.0.0.0/0 -> igw-67e14203 (Internet Gateway)
-
三个私有子网(在每个可用区中打开)附加了以下路由表:
10.0.0.0/16 -> local 0.0.0.0/0 -> igw-67e14203
通过上述设置,负载均衡器工作正常,我可以从公共互联网访问Web服务器URL和应用程序 . 但是,使用此设置,私有子网(10.0.2.0/24,10.0.3.0/24,10.0.4.0/24)中的服务器无法访问本地网络之外的任何内容 - 甚至不能访问AWS yum存储库 . 当我将私有子网的路由表更改为: 10.0.0.0/16 -> local 0.0.0.0/0 -> nat-0a71345c417d7758a
时
-
如果我查看目标组下的运行状况检查,它会将所有三个私有子网中的所有实例都显示为正常 .
-
除非我遗漏了某些内容,因此根据文档referenced above,负载均衡器实际上可以连接到私有子网 .
ELB的配置如下:
"AppServerLoadBalancer": {
"Type": "AWS::ElasticLoadBalancingV2::LoadBalancer",
"Properties": {
"Scheme": "internet-facing",
"Tags": [
{
"Key": "environment",
"Value": {
"Ref": "Environment"
}
}
],
"SecurityGroups": [
{
"Ref": "LoadBalancerSecurityGroup"
}
],
"Subnets": [
{
"Ref": "AppServerSubnetAZ0"
},
{
"Ref": "AppServerSubnetAZ1"
},
{
"Ref": "AppServerSubnetAZ2"
}
]
}
}
子网 AppServerSubnetAZ0
, AppServerSubnetAZ1
和 AppServerSubnetAZ2
是私有子网,其路由指向NAT网关,如前所述 .
私有子网中的实例可以访问Internet外部,但LoadBalancer会停止工作 . 我开始在负载均衡器上获得超时 .
网络ACL已正确设置,上述两种情况中唯一的变化是路由表中的更改 .
只是似乎无法弄清楚出了什么问题?我会假设NAT网关将负责路由负载均衡器流量以及上面的文章/链接?
谢谢您的帮助!
2 回答
我不知道将NAT网关和ELB都用于私有子网中的EC2实例是多么可行 .
一个解决方法我建议你保留你的路由表
并使用EC2实例而不是NAT网关实现NAT .
您误解了引用的文档 .
负载均衡器 must 位于公有子网上,实例应位于私有子网上 .
当私有子网上的路由指向Internet网关时,为什么这样做?这是一个棘手的问题 . 如果defaut路由指向Internet网关,它实际上不再是私有子网 . 这是一个公共子网 .
不要在传统网络方面进行思考,因为 balancer 器及其背后的实例通常位于共同的子网上 . VPC不会那样工作 . 对可用区域内的子网边界的流量没有性能损失,对单个子网内的流量也没有性能优势 .