【Kubernetes】Pod无法访问Service域名问题排查

背景

部署过多套k8s集群,发现在其中一套k8s环境中,在Pod内无法访问Service Name,访问了很多次,偶尔又能通,使用ServiceIP能正常访问,域名解析的问题基本确定与CoreDNS有关系,于是开始了一系列的排查之路。

使用busybox工具测试网络

  • 创建busyboxPod
kubectl apply -f-<<EOF
apiVersion: v1
kind: Pod
metadata:
  name: busybox
spec:
  containers:
  - name: busybox
    image: busybox-curl:latest
    imagePullPolicy: IfNotPresent
    command: ["sleep","3600"]
EOF
  • 进入busyboxPod
kubectl exec busybox -it -- sh
  • 查看nameserver
/home # cat /etc/resolv.conf
  • 显示如下
nameserver 10.43.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
  • 修改nameserverCoreDNSPodIP,进行逐个测试
  • 先查看CoreDNS所有的Pod的IP
kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o wide

看到的列表如下

NAME                       READY   STATUS        RESTARTS   AGE     IP              NODE      NOMINATED NODE   READINESS GATES
coredns-95dcf6b48-9vxtq    1/1     Running       0          4h52m   10.42.168.201   xxx1   <none>           <none>
coredns-95dcf6b48-lcqmt    1/1     Running       0          18h     10.42.166.89    xxx2   <none>           <none>
coredns-95dcf6b48-nwp8z    1/1     Running       0          28m     10.42.204.47    xxx3   <none>           <none>
  • 按如下逐个修改resolv.conf进入测试
nameserver 10.42.204.47
#nameserver 10.42.166.89
#nameserver 10.42.168.201
#nameserver 10.43.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
  • 每次修改一次nameserver,就使用命令nslookup Service-Name,也可以使用pingcurl命令访问Service域名

CoreDNS测试结果

经过测试后,发现其中一个Pod无法正常做域名解析,其它Pod均能正常解析Service域名

解决办法

  • 删除无法正常工作的Pod
kubectl delete pod coredns-95dcf6b48-9vxtq
  • 立马会重新启动一个新Pod,查看IP
  • 放到busyboxresolv.conf进行测试,工作正常

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太空眼睛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值