aliyun上ecs内容器偶发提示内网alb地址DNS解析失败
日志
报错核心是:DNS 解析失败
urllib3.exceptions.NameResolutionError:
Failed to resolve 'alb-xxx.cn-hangzhou.alb.aliyuncs.com'
([Errno -3] Temporary failure in name resolution) 域名解析出现临时失败
解释:
Python 的
urllib3在请求目标域名时,依赖系统的 DNS 解析器。错误
Temporary failure in name resolution表示当时系统没能把域名解析成 IP。可能原因:
- 本地 DNS 配置有问题(/etc/resolv.conf 配置不对,或者上游 DNS 不可用)
- 容器/虚拟机环境内 DNS 不通(比如 Docker 默认用 127.0.0.11,有时转发异常)
- 网络限制(出口被防火墙阻断,VPC 内 DNS 服务不可用)
- 目标域名确实不可解析(但 ALB 域名一般不会这样,除非拼错或服务被释放)
经过排查是偶发,判定是vpc内dns服务不稳定(或者在升级什么的导致的)。
排查步骤
先测试本机能否解析
1
2nslookup alb-xxx.cn-hangzhou.alb.aliyuncs.com
dig alb-xxx.cn-hangzhou.alb.aliyuncs.com- 能解析:说明系统 DNS 正常,可能是运行环境(容器)里的 DNS 设置不对
- 不能解析:检查
/etc/resolv.conf是否指向有效 DNS(比如8.8.8.8或公司内网 DNS)
或者ping
在 Python 内测试 DNS
1
2import socket
socket.gethostbyname("alb-xxx.cn-hangzhou.alb.aliyuncs.com")看能不能返回 IP。
检查容器/VM 网络
- Docker 里:确认
/etc/resolv.conf没指向失效的 127.0.0.11 - Kubernetes 里:确认 CoreDNS 服务是否正常
- Docker 里:确认
临时修复
修改
/etc/resolv.conf,加上:nameserver 8.8.8.8 nameserver 223.5.5.5 # 阿里 DNS或者在 Python 里直接访问 IP(不推荐长期这样,ALB IP 可能变动)