k8s 1.23版本 pod 域名解析错误处理
背景:博主是在k8s上使用ray集群时,发现使用pip下载第三方库时一直报网络异常错误,后面使用pingwgetcurl等命令测试 www.baidu.com 等域名进行网络测试,发现无法解析域名查询了相关资料后,发现都无法解决博主所遇到的问题从一次k8s容器内域名解析失败学习k8s的DNS策略故障排查:Kubernetes 中 Pod 无法正常解析域名。
·
简介
- 背景:博主是在k8s上使用ray集群时,发现使用
pip
下载第三方库时一直报网络异常错误,后面使用ping
/wget
/curl
等命令测试 www.baidu.com 等域名进行网络测试,发现无法解析域名 - 查询了相关资料后,发现都无法解决博主所遇到的问题
问题分析
- 1、首先,通过参考其他博客,最简单的方法是改变pod中默认的 DNS nameserver
$ sudo cat /etc/resolv.conf
nameserver 10.96.0.10
search ray-macaron.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
# 8.8.8.8 是谷歌Public DNS
# >> 代表讲echo命令的输出追加到后续文件中
$ echo "nameserver 8.8.8.8" >> /etc/resolv.conf
# 然后再 ping www.baidu.com,发现域名解析正常
$ ping www.baidu.com
- 2、但是,这并未发现问题的产生原因,我们参考 故障排查:Kubernetes 中 Pod 无法正常解析域名 中的方式,逐步排查故障产生的原因
- 1)进入 DNS 工具 Pod 的命令行
$ sudo kubectl exec -it dnsutils /bin/sh -n kube-system
- 2)通过 ping nslookup 命令测试
- 分析:ping不通svc地址,但是地址可以解析,ping其他pod地址是正常通的
$ ping www.baidu.com ping: bad address 'www.baidu.com' $ ping kubernetes.default PING kubernetes.default (10.96.0.1): 56 data bytes ^C --- kubernetes.default ping statistics --- 163 packets transmitted, 0 packets received, 100% packet loss $ nslookup kubernetes.default Server: 10.96.0.10 Address: 10.96.0.10#53 Name: kubernetes.default.svc.cluster.local Address: 10.96.0.1 $ ping 10.96.0.1 PING 10.96.0.1 (10.96.0.1): 56 data bytes ^C --- 10.96.0.1 ping statistics --- 12 packets transmitted, 0 packets received, 100% packet loss
- 3)故障定位:
- 经过一系列不断地试错与博客学习,最终发现原因在于 coredns 配置默认情况下没有打开 向上级DNS转发解析命令 的开关
- 通过
kubectl get ConfigMap coredns -n kube-system -o yaml
得到coredns的配置单
apiVersion: v1 data: Corefile: | .:53 { errors health { lameduck 5s } ready kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa ttl 30 } prometheus :9153 #forward . /etc/resolv.conf { # max_concurrent 1000 #} cache 30 loop reload loadbalance } kind: ConfigMap metadata: creationTimestamp: "2023-09-20T10:39:29Z" name: coredns namespace: kube-system resourceVersion: "16559" uid: 31e12aad-9de9-42e6-98d8-a93af01629eb
- 上述配置文件中,
forward
一项被注释掉了,需要删掉注释然后更新配置项 - 更新配置项:
kubectl apply -f coredns-custom.yaml -n kube-system
,等待1-2min使新配置生效
Reference:参考链接
更多推荐
已为社区贡献2条内容
所有评论(0)