AWS使用ALB负载均衡遇到的问题
问题描述
ALB
负载均衡 RGC-Dev-ALB.xxx.cn-north-1.elb.amazonaws.com.cn
解析到2个IP 54.223.xxx.xx
和52.81.xxx.xx
, 发现每2次请求会失败一次,在进一步测试抓包发现没有收到52.81.xxx.xxx
的返回信息。
问题分析
随后检查ALB
建立在两个子网(subnet-a1xxxxx
和subnet-f3xxxxx
)
其中54.223.xxx.xx
在subnet-f32xxxx
中,子网路由表rtb-49xxxx
中0.0.0.0/0 指向IGW,因此客户端可以主动访问到54.223.xxx.xx
。
52.81.xxx.xx
在subnet-a1xxx
中,子网路由表rtb-24xxx
中0.0.0.0/0指向了nat gateway
(nat-0axxxxxxxxxx
), 这将导致客户端无法连接到52.81.xxx.xx
, 因此也不会收到52.81.xxx.xx
的回包。
请知晓,对于面向公网的ALB
,需要将ALB部署在公有子网中, 即子网路由表0.0.0.0/0需要指向IGW。
解决办法
目前有2个解决办法
1) 修改子网路由表rtb-24xxx
, 将0.0.0.0/0指向igw
, 请知晓, 这个修改将影响所有关联了rtb-24xxx
这个路由表的子网,
如果对应子网中的资源没有公网地址,修改完成后将失去访问公网的能力,此外对于子网中有公网地址的资源,将直接从公网路由可达。
2) 修改ALB
的子网,可以在EC2的控制台找到“负载均衡” ,选择对应的ALB
, 在“描述” > “基本配置” >"可用区" > 点击“编辑子网”, 将subnet-a1xxx
修改为同AZ的公有子网(即路由表0.0.0.0/0指向igw
的子网)
文章原文