AWS VPC:使用带有负载均衡器和专用子网的NAT和Internet网关时的奇怪行为

时间:2016-09-15 23:40:37

标签: amazon-web-services amazon-ec2 amazon-cloudformation amazon-elb amazon-vpc

根据this document考虑​​以下设置:

  • 包含四个子网的AWS VPC。一个公共和三个私人(每个可用区一个)
  • VPC附有互联网网关。
  • 公有子网(10.0.1.0/24)有一个Elastic Load Balancer(V2),一个NAT网关和一个用于SSH的Bastion服务器进入环境。该子网的路由表定义为: 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"
          }
        ]
      }
    }

子网AppServerSubnetAZ0AppServerSubnetAZ1AppServerSubnetAZ2是私有子网,其路由指向NAT网关,如前所述。

私有子网中的实例可以访问Internet外部,但LoadBalancer会停止工作。我开始在负载均衡器上获得超时。

网络ACL设置正确,上述两种情况中的更改是路由表中的更改。

似乎无法弄清楚出了什么问题?我会假设NAT网关会负责路由负载均衡器流量以及上面的文章/链接吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我不知道将NAT网关和ELB用于私有子网中的EC2实例是多么可行。

我会建议您保留路由表

... if [HardwareService] = true then ...

使用EC2实例而不是NAT网关实现NAT。

答案 1 :(得分:0)

您误解了引用的文档。

负载均衡器必须位于公有子网上,且实例应位于私有子网上。

当私有子网上的路由指向Internet网关时,为什么这样做?这是一个棘手的问题。如果defaut路由指向Internet网关,它实际上不再是私有子网。它是一个公共子网。

在传统网络方面,不要考虑平衡器及其背后的实例通常位于共同子网上。 VPC不会那样工作。对可用区域内的子网边界的流量没有性能损失,对单个子网内的流量也没有性能优势。