Terraform搭建AWS蓝绿部署时负载均衡无法访问问题求助
负载均衡无法访问的问题修复
你遗漏了4项关键配置,按优先级修复如下:
- 缺少公有子网和公网路由表的关联
你已经创建了绑定互联网网关的公网路由表,但没有将两个公有子网关联到该路由表,导致子网内的ALB和EC2都无法和公网通信。添加如下资源即可:
resource "aws_route_table_association" "public_subnet_1_assoc" { subnet_id = aws_subnet.public_subnet_1.id route_table_id = aws_route_table.web.id } resource "aws_route_table_association" "public_subnet_2_assoc" { subnet_id = aws_subnet.public_subnet_2.id route_table_id = aws_route_table.web.id }
- 公有子网未开启自动分配公网IP
默认情况下AWS公有子网不会自动给实例分配公网IP,EC2没有公网IP就无法给公网请求回包。在aws_subnet.public_subnet_1和aws_subnet.public_subnet_2的资源配置中添加参数:
map_public_ip_on_launch = true
- 多余的EIP配置需要删除
你配置的aws_eip.lb是绑定到单台EC2的资源,和ALB完全无关,反而会占用公网资源,直接删除该资源即可,ALB会自动分配公网访问地址。 - 目标组未配置健康检查
默认的健康检查规则可能会误判实例状态,导致ALB拒绝转发流量。在aws_lb_target_group.my_tg资源中添加健康检查配置:
health_check { path = "/" protocol = "HTTP" matcher = "200-399" interval = 30 timeout = 5 healthy_threshold = 2 unhealthy_threshold = 2 }
修改完成后重新执行terraform apply,等待ALB状态变为active、目标组内的实例状态变为healthy后即可正常访问负载均衡DNS。
公有子网是否需要NAT网关
你的判断正确,公有子网不需要配置NAT网关。
NAT网关的核心作用是为没有公网IP的私有子网资源提供主动访问公网的能力,公有子网的资源可以直接通过互联网网关和公网通信,不需要经过NAT网关。只有后续你将EC2实例部署到私有子网时,才需要配置NAT网关。
内容的提问来源于stack exchange,提问作者Mr. Oleg
相关产品推荐
相关产品推荐

