一、故障背景
环境配置:Kubernetes(K8s)集群使用CoreDNS作为DNS解析服务,默认未启用IPv6解析功能;
资源特性:腾讯云COS(对象存储)的内网IPv4地址为169.254.0.49网段(该网段属于APIPA自动专用IP地址段,常规环境下被判定为无路由的“无效地址”);
故障现象:应用访问COS内网域名时,日志频繁抛出ENOTFOUND错误,影响业务正常访问。
二、故障表现
日志中出现 ENOTFOUND 字样
三、故障触发链路(流程图解)
1 解析顺序
应用发起COS域名解析
→ 调用操作系统底层`getaddrinfo()`函数
→ 优先解析IPv6(AAAA记录)
→ CoreDNS默认配置返回`NXDOMAIN`,解析判断失败
→ 降级解析IPv4(A记录)
→ CoreDNS返回COS内网地址169.254.0.49
→ 系统校验地址有效性
→ 169.254.0.49为无路由的无效地址
→ `getaddrinfo()`返回底层错误`EAI_NONAME`
→ 应用层网络库将错误映射为`ENOTFOUND`日志输出
2 关键判定
-
若 IPv6 解析失败(如返回 NXDOMAIN),且 IPv4 解析返回有效可路由地址
→ 函数返回成功,应用用 IPv4 通信,无 ENOTFOUND; -
若 IPv6 解析失败,且 IPv4 解析返回无效地址(如 169.254.0.49)
→ 函数判定 “无可用地址”,返回 EAI_NONAME(对应应用层的 ENOTFOUND);
3 关键配置
# Coredns配置
.:53 {
errors
health {
lameduck 30s
}
kubernetes cluster.local. in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
}
hosts {
1.1.1.1 baidu.com
fallthrough
}
prometheus :9153
template ANY HINFO . {
rcode NXDOMAIN
}
template ANY AAAA {
rcode NXDOMAIN
}
forward . 183.60.83.19 183.60.82.98 {
prefer_udp
}
cache 30
reload
loadbalance
ready
}
四、问题解决
删除 CoreDNS 对 IPV6 解析的特性化配置
# Coredns配置
.:53 {
errors
health {
lameduck 30s
}
kubernetes cluster.local. in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
}
hosts {
1.1.1.1 baidu.com
172.19.0.15 yach-doc-shimo-test.zhiyinlou.com
fallthrough
}
prometheus :9153
template ANY HINFO . {
rcode NXDOMAIN
}
template ANY AAAA {
rcode NXDOMAIN
}
forward . 183.60.83.19 183.60.82.98 {
prefer_udp
}
cache 30
reload
loadbalance
ready
}
评论区