负载均衡器后面的AWS EC2 Internet访问



使用Terraform在私有子网中创建两个ec2的VPC。安装过程需要SSH到ec2,从Internet安装包更新并安装应用程序软件。为此,在一个公共子网中有一个IGW和一个NAT-GW。此时,两个ec2都可以访问Internet,因为两个专用子网都路由到NAT-GW。Terraform和SSH到私有子网是通过Client VPN完成的。

其中一个EC2将托管web服务,因此添加并配置经典模式负载均衡器以针对web服务器EC2。使用经典模式,因为我找不到一种方法,使Terraform构建应用模式LBs。负载均衡器要求实例使用路由到IGW的子网,因此将其从路由到NAT-GW更改为路由到IGW。此时,负载均衡器联机,EC2响应,公共Internet可以使用为LB提供的DNS端点访问web服务。

但是现在web服务器EC2不能再访问Internet本身了。我无法卷曲google.com或获取软件包更新。

我想找到一种方法,让EC2从LB后面访问互联网,而不是使用CloudFront。

我想把EC2保持在私有子网中,因为公共子网会导致EC2有一个公共IP地址,我不希望这样。

寻找一种在不切换子网的情况下使LB工作的方法,因为这会使EC web服务在进行更新时不可用。

不需要任何iptables或防火墙技巧。我真的很想要一个与疾病无关的AWS解决方案。

关于你所面临的问题的几点/澄清:

  • 公网子网中的实例不需要NAT Gateway。他们可以通过IGW向internet发起出站请求。NGW允许私有子网实例的出站IPv4连接。
  • 负载均衡器本身需要在公共子网上。LB将路由到的实例没有。只要允许流量通过安全组,它们可以在同一子网或不同子网中,也可以在公共或私有子网中。
  • 您可以在公共子网上创建没有公共IP的实例。然而,他们将无法接收或发送流量到互联网。
  • Terraform支持alb。资源为aws_lb,load_balancer_type设置为"application"(这是默认选项)。

也就是说,您想要的公私配置是完全可能的。

  1. 您的ALB和NAT网关需要在公共子网上,EC2实例需要在私有子网上。
  2. 私网路由表中需要有到NGW的路由,以方便出方向的连接。
  3. EC2实例的安全组需要允许来自ALB安全组的流量。

听起来你有步骤1和2工作,所以从ALB到EC2的连接是你必须工作的。也可以在这里查看文档页面- https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html

最新更新