简介
- 背景:博主是在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
$ echo "nameserver 8.8.8.8" >> /etc/resolv.conf
$ ping www.baidu.com
- 2、但是,这并未发现问题的产生原因,我们参考 故障排查:Kubernetes 中 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
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:参考链接