AWS目标组不健康:Docker容器部署.NET API访问异常排查
核心故障根因
Docker部署场景下应用负载均衡器(ALB)的目标组没有任何特殊配置要求,当前故障完全是配置逻辑错配导致:
你前期直连EC2弹性IP时已经验证过,容器的80端口HTTP服务可正常访问、443端口HTTPS服务无法响应,但后续配置目标组时,你将转发端口、健康检查协议全部设置为HTTPS:443,ALB向后端实例发起请求时根本拿不到有效响应,自然判定目标不健康,拒绝转发所有流量。
现存配置问题梳理
- 目标组协议端口配置错误:你在ALB层已经配置了SSL证书,ALB本身就承担SSL卸载能力,不需要后端实例再处理HTTPS流量,配HTTPS:443转发到后端属于多此一举,且后端443端口本身就没有正常提供服务。
- 安全组规则大概率存在漏配:你之前能直连弹性IP访问服务,只能说明你放通了本地客户端IP到实例的访问权限,不能证明ALB可以正常访问实例服务端口,这是新手配置ALB时最容易踩的漏项。
- ALB可用区配置不符合规范:当前你只给ALB关联了eu-west-2c单个可用区,ALB标准部署要求至少关联2个及以上可用区的公有子网,单可用区配置即使调通也存在极高的单点故障风险。
分步修复方案
- 修正目标组配置
- 将目标组的转发目标端口从443改为80,对应当前容器实际正常监听的HTTP服务端口
- 健康检查协议调整为
HTTP,检查端口选择「与流量端口一致」,检查路径如果你的.NET API没有配置专门的健康检查端点可以暂时保留/,如果有/health之类的无鉴权健康检查路径建议替换为专用路径,避免默认路径的鉴权、重定向逻辑导致健康检查误判,成功判定状态码保留200即可,超时、间隔、健康阈值参数无需调整 - 保存配置后等待30-60秒,观察目标组健康状态是否转为健康
- 核对安全组规则
- EC2实例关联的安全组入站规则,放通80端口的TCP访问,源地址直接填写ALB自身关联的安全组ID即可,不需要开放0.0.0.0/0的80端口访问,减少实例暴露面
- ALB关联的安全组入站规则,放通80、443端口的TCP访问,源地址设置为0.0.0.0/0(公网服务场景)
- 补全ALB多可用区配置
- 给ALB额外添加至少1个eu-west-2区域内的其他可用区,对应子网选择公有子网,满足ALB的最低部署要求
- 访问验证
- 目标组健康检查全部转为健康后,先直接访问ALB自动分配的DNS名称,验证80端口是否能正常跳转到HTTPS,443端口是否能正常返回API响应
- ALB自身访问正常后,核对Route53托管区内的A记录别名是否正确指向当前ALB,再验证域名访问是否正常
补充说明
公网场景下把SSL卸载放在ALB层是标准生产架构,后端容器不需要额外配置SSL证书、不需要监听443端口,只需要正常提供HTTP服务即可,既可以省去后端更新证书的运维成本,也能降低实例的加解密计算开销。
内容的提问来源于stack exchange,提问作者Alex Lynn
相关产品推荐
相关产品推荐

