系统: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域名。
注:
如果本文方法不奏效,点此尝试此方法

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐