k8s集群内的pod无法ping域名,即coredns无法正常进行域名解析时,我们该怎么做?
系统:CentOS Linux 7 (Core)K8s版本:v1.18.0故障现象:Pod内无法ping通外网域名,访问外网IP、K8s内部域名或者IP均正常。问题解决方法:①有可能是core-dns的service出了问题,而service是通过proxy来分发的,我们查看kube-proxy的日志。[root@km1] kubectl -n kube-system logs -fkube-pr
系统:CentOS Linux 7 (Core)
K8s版本:v1.18.0
故障现象:Pod内无法ping通外网域名,访问外网IP、K8s内部域名或者IP均正常。
问题解决方法:
①有可能是core-dns的service出了问题,而service是通过proxy来分发的,我们查看kube-proxy的日志。
[root@km1] kubectl -n kube-system logs -f kube-proxy-2ql88
E0703 13:49:39.609152 1393 proxier.go:1950] Failed to list IPVS destinations, error: parseIP Error ip=[192 168 50 65 0 0 0 0 0 0 0 0 0 0 0 0]
E0703 13:49:39.609230 1393 proxier.go:1192] Failed to sync endpoint for service: 10.244.0.1:443/TCP, err: parseIP Error ip=[192 168 50 65 0 0 0 0 0 0 0 0 0 0 0 0]
E0703 13:49:39.609564 1393 proxier.go:1950] Failed to list IPVS destinations, error: parseIP Error ip=[172 30 1 75 0 0 0 0 0 0 0 0 0 0 0 0]
E0703 13:49:39.609621 1393 proxier.go:1192] Failed to sync endpoint for service: 10.244.75.157:80/TCP, err: parseIP Error ip=[172 30 1 75 0 0 0 0 0 0 0 0 0 0 0 0]
如果我们在百度搜索“ error: parseIP Error ip=[172 30 1 75 0 0 0 0 0 0 0 0 0 0 0 0]”这样的错误,我们会得到这样的回答:
这个问题升级到kubernetes 1.18 版本才出现的,在Kubernetes Github已有相关问题上报,Kubernetes 维护人员讨论分析出问题的原因可能是IPVS模块由于是比较新,需要系统内核版本支持,我在Centos7的最新版本上遇到这个问题,yum update kernel解决不了。用Centos8.2替代Centos7.x即可解决
注:以上引号内内容引用自此链接,点击可查看全文
注:此链接有k8s团队关于此问题的看法,而且文章末尾提到,此问题会在K8S的v1.18.3解决
解决方法(最简单):
直接对kube-proxy进行版本降低处理:
kubectl -n kube-system set image daemonset/kube-proxy *=registry.aliyuncs.com/k8sxio/kube-proxy:v1.17.6
注:还可以对linux的内核进行升版本处理,但是升内核版本操作带来的改动比较大。还是建议采用对proxy降版本处理较稳妥。
博主的问题在对proxy进行降版本处理后得到了解决,但如果您的问题还没有被解决,请您继续往下看。
②如果proxy没有出现问题。
解决办法:
删除corens,重新创建coredns
步骤:
①删除已有coredns服务pod:
kubectl delete --namespace=kube-system deployment coredns
②重新安装
wget https://raw.githubusercontent.com/coredns/deployment/master/kubernetes/coredns.yaml.sed
wget https://raw.githubusercontent.com/coredns/deployment/master/kubernetes/deploy.sh
chmod +x deploy.sh
./deploy.sh -i 10.254.0.2 -d cluster.local. > dns.yaml
kubectl apply -f dns.yaml;
等待coredns running后重新尝试pod内是否可以ping域名。
注:
如果本文方法不奏效,点此尝试此方法
更多推荐
所有评论(0)