alpine基础镜像DNS 解析的问题


#1

猪齿鱼全部服务的构建都是以alpine作为基础镜像,但alpine系统在某些K8S环境上可能会出现域名解析IP delays 3-5秒的现像,并不是所有K8S环境都会这样,我其中一套K8S环境就出现这种情况,整个猪齿鱼平台出现时快时慢情况,其实k8s社区也有很多人反馈这个问题,https://github.com/kubernetes/kubernetes/issues/56903
大至的原因就是同时解析A和AAAA记录,造成netfilter race,详细的分析可以参考这个https://blog.quentin-machu.fr/2018/06/24/5-15s-dns-lookups-on-kubernetes/
非alpine类的的基础镜像可以通过修改 etc/resolv.conf
options single-request解决这个问题https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
但这个设置对alpine( musl/libc)是不生效的,所以我建议改用jessie-slim也只是30M而已,如果继续使用alpine推荐使用这个移除解析AAAA记录的修改版镜像
https://hub.docker.com/r/geekidea/alpine-a/
,https://github.com/kubernetes/kubernetes/issues/56903#issuecomment-409603030


#2

你好,感谢你的建议,我们会对该问题进行测试。


#3

能否提供一下你们出现这个问题的k8s环境信息?


#4

v1.10.9,其实这个情况有一定机率出现,因为我有很多套集群,而且所有的集群相同的内核相同的网络插件一样的k8s版本唯一不同可能是硬件级别有些差异,但确实碰到了这个情况,conntrack状态的如下图1
用tcpdump udp也可以看同时提交AA和AAAA第一次解析没返回,insert_failed增长


#5

https://github.com/kubernetes/kubernetes/issues/56903#issuecomment-410515255 感兴趣可以了解下,不过我通过其它方法部署coredns也解决了这个问题