我们在AWS中的CoreOS上运行kubernetes 1.5.7。我们的kube-dns映像版本是
Gcr.io/google_containers/kubedns-amd64 64:1.9 gcr.io/google_containers/kube-dnsmasq-amd64:1.4.1
我们传递给dnsmasq的args是
--cache-size=1000
--no-resolv
--server=/in-addr.arpa/ip6.arpa/cluster.local/ec2.internal/127.0.0.1#10053
--server=169.254.169.253
--server=8.8.8.8
--log-facility=-
--log-async
--address=/com.cluster.local/com.svc.cluster.local/com.kube-system.svc.cluster.local/<ourdomain>.com.cluster.local/<ourdomain>.com.svc.cluster.local/<ourdomain>.com.kube-system.svc.cluster.local/com.ec2.internal/ec2.internal.kube-system.svc.cluster.local/ec2.internal.svc.cluster.local/ec2.internal.cluster.local/在20个节点集群中,每个节点运行1个kube-dns结荚。在过去几个月中,我们一直在经历DNS故障,从5-10分钟的事件到使我们的服务大部分无法使用的事件,因为大多数名称查找的名称解析都失败了。在这些事件中,我们运行3-6库贝-dns吊舱。从那时起,我们已经大大超过了我们的库贝- DNS吊舱到每个节点1,并没有看到任何长的5- 10分钟的DNS故障事件。然而,现在我们仍然看到较小的DNS故障事件,范围从1-30秒不等。在调查这些问题时,我们在日志中注意到了dnsmasq度量容器中的以下错误
错误:在flag.Parse之前进行日志记录: W0517 03:19:50.139060 1 server.go:53]从dnsmasq获取度量的错误:读udp 127.0.0.1:36181->127.0.0.1:53: i/o超时
当我们有一个较小的DNS事件持续1-30秒时,我们从kube吊舱中找到这些日志。有一段时间,我们怀疑我们正在经历一个iptables/连接跟踪问题wrt的荚击中库贝-dns服务。但基于这些dnsmasq相关错误,我们认为dnsmasq在一段时间内拒绝连接,导致了我们所经历的DNS故障。对于那些不熟悉dnsmasq度量容器的人,它正在对位于同一个容器中的dnsmasq容器执行DNS查找,以获得dnsmasq统计数据。如果通过DNS查找无法检索dnsmasq统计数据,那么认为执行DNS查找的服务可能会遇到同样的问题似乎是合乎逻辑的。
值得注意的是,在这些问题上,我们没有看到dnsmasq的以下日志,这让我相信我们没有达到这个临界值。
dnsmasq:达到的并发DNS查询的最大数量(最大值: 150)
我确信我们当前的DNS错误与dnsmasq断断续续地拒绝连接有关。我很好奇其他用户是否看到了同样的问题:kube结束符记录了dnsmasq-度量中的错误,在同一时间框架内,集群中的应用程序记录了DNS错误。
此外,如果有人对下一步该做什么有任何想法,以查明到底发生了什么,wrt拒绝连接。我正在考虑在调试模式下运行dnsmasq是否有用,但也担心这会带来与在调试模式下运行相关的其他问题。我们正在考虑的其他选择是缓慢推出CoreDNS (https://github.com/coredns/coredns)。
发布于 2017-05-19 06:45:37
您提供了许多集群域。每个集群域将被插入到本地/etc/resolv.conf中并被使用。对于resolv.conf中的每个域,都会有单独的dns请求。在您的示例中,每个10+查询都会有dns查询。
--address=/com.cluster.local/com.svc.cluster.local/com.kube-system.svc.cluster.local/<ourdomain>.com.cluster.local/<ourdomain>.com.svc.cluster.local/<ourdomain>.com.kube-system.svc.cluster.local/com.ec2.internal/ec2.internal.kube-system.svc.cluster.local/ec2.internal.svc.cluster.local/ec2.internal.cluster.local/
我的建议是将集群域的数量减少到只有cluster.local。
您提供多个集群域的原因是什么?
https://stackoverflow.com/questions/44030167
复制相似问题