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。

  • 可能原因:

    1. 本地 DNS 配置有问题(/etc/resolv.conf 配置不对,或者上游 DNS 不可用)
    2. 容器/虚拟机环境内 DNS 不通(比如 Docker 默认用 127.0.0.11,有时转发异常)
    3. 网络限制(出口被防火墙阻断,VPC 内 DNS 服务不可用)
    4. 目标域名确实不可解析(但 ALB 域名一般不会这样,除非拼错或服务被释放)

经过排查是偶发,判定是vpc内dns服务不稳定(或者在升级什么的导致的)。

排查步骤

  1. 先测试本机能否解析

    1
    2
    nslookup 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

  1. 在 Python 内测试 DNS

    1
    2
    import socket
    socket.gethostbyname("alb-xxx.cn-hangzhou.alb.aliyuncs.com")

    看能不能返回 IP。

  2. 检查容器/VM 网络

    • Docker 里:确认 /etc/resolv.conf 没指向失效的 127.0.0.11
    • Kubernetes 里:确认 CoreDNS 服务是否正常
  3. 临时修复

    • 修改 /etc/resolv.conf,加上:

      nameserver 8.8.8.8
      nameserver 223.5.5.5   # 阿里 DNS
      
    • 或者在 Python 里直接访问 IP(不推荐长期这样,ALB IP 可能变动)