[root@www.wulaoer.org ~]# for p in $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name); \ > do kubectl logs --namespace=kube-system $p; done ................................................... INFO] 10.244.104.45:55282 - 63278 "A IN www.baidu.com.localdomain. udp 43 false 512" - - 0 0.000110555s [ERROR] plugin/errors: 2 www.baidu.com.localdomain. A: plugin/loop: no next plugin found ......................................................
后来在网上搜索了一下,说是内核版本太低的问题,但是别人的错误是因为IPVS的问题。而我的并不是,所以刚开始升级内核后还是不能解决。
E0326 15:20:23.159364 1 proxier.go:1950] Failed to list IPVS destinations, error: parseIP Error ip=[10 96 0 10 0 0 0 0 0 0 0 0 0 0 0 0] E0326 15:20:23.159388 1 proxier.go:1192] Failed to sync endpoint for service: 10.8.0.10:53/UPD, err: parseIP Error ip=[10 96 0 16 0 0 0 0 0 0 0 0 0 0 0 0] E0326 15:20:23.159479 1 proxier.go:1950] Failed to list IPVS destinations, error: parseIP Error ip=[10 96 0 10 0 0 0 0 0 0 0 0 0 0 0 0] E0326 15:20:23.159501 1 proxier.go:1192] Failed to sync endpoint for service: 10.8.0.10:53/TCP, err: parseIP Error ip=[10 96 0 16 0 0 0 0 0 0 0 0 0 0 0 0] E0326 15:20:23.159595 1 proxier.go:1950] Failed to list IPVS destinations, error: parseIP Error ip=[10 96 0 10 0 0 0 0 0 0 0 0 0 0 0 0]
系统内核升级可以参考: https://www.wulaoer.org/?p=2818
然后就继续找答案,也有得说只要把coredns中不让内部解析,使用外部解析也可以解决。
[root@www.wulaoer.org ~]# kubectl edit configmap coredns -n kube-system .......................................................... prometheus :9153 forward . /etc/resolv.conf { max_concurrent 100 } #把forward注释掉,直接使用service 8.8.8.8 cache 30
但是我的环境依然不可以,后来就找了一下coredns的configmap文档的注释,发现并不一定是内核的问题,后来有说主要原因是因为宿主机上有多个nameserver,而coredns不能解析的时候会向宿主机/etc/resolv.conf配置文件中多个nameserver采取random的随机转发,失败就会返回错误。
**CoreDNS 配置参数说明:** - errors: 输出错误信息到控制台。 - health:CoreDNS 进行监控检测,检测地址为 http://localhost:8080/health 如果状态为不健康则让 Pod 进行重启。 - ready: 全部插件已经加载完成时,将通过 endpoints 在 8081 端口返回 HTTP 状态 200。 - kubernetes:CoreDNS 将根据 Kubernetes 服务和 pod 的 IP 回复 DNS 查询。 - prometheus:是否开启 CoreDNS Metrics 信息接口,如果配置则开启,接口地址为 http://localhost:9153/metrics - forward:任何不在Kubernetes 集群内的域名查询将被转发到预定义的解析器 (/etc/resolv.conf)。 - cache:启用缓存,30 秒 TTL。 - loop:检测简单的转发循环,如果找到循环则停止 CoreDNS 进程。 - reload:监听 CoreDNS 配置,如果配置发生变化则重新加载配置。 - loadbalance:DNS 负载均衡器,默认 round_robin。
最后问题定位在forward上面了,根据配置的说法是policy是 CoreDNS 的一等公民,fallthrough
关键字流向下一个 plugin必须依照plugin的顺序来,更多可以参考:https://coredns.io/plugins/
解决方法
所以只需要在coredns的configmap中添加policy sequential就可以了。
[root@www.wulaoer.org ~]# kubectl edit configmap coredns -n kube-system .......................................................... prometheus :9153 forward . /etc/resolv.conf { max_concurrent 100 policy sequential #增加 } cache 30 .................................
然后重启一下CoreDNS即可,我就不测试了,如果你的CoreDNS副本比较少可以增加CoreDNS。
[root@www.wulaoer.org ~]# kubectl -n kube-system scale --replicas=3 deployment/coredns
好了,问题解决了,看看有没有适合你的方法吧,没有了,看些其他的吧
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏