英文:
Pods cannot resolve kubernetes DNS
问题
From a pod, I am able to resolve DNS addresses only when I am using the CoreDNS endpoint IP. How to make pods use the CoreDNS IP address?
CoreDNS configuration:
- IP address: 10.96.0.10
- endpoint: 10.244.0.222
Kubelet configuration:
clusterDNS:
- 10.96.0.10
Flannel: Default configuration from https://github.com/flannel-io/flannel
Cluster: The cluster is up and running and has these pods:
- coredns
- etcd
- apiserver
- controller-manager
- flannel
- scheduler
Also, the cluster consists of only a single master node (that is schedulable).
Pod setup:
# run pod
kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools
Test cases:
1.
nslookup kubernetes.default
output: ;; connection timed out; no servers could be reached
nslookup kubernetes.default 10.96.0.10
output: ;; connection timed out; no servers could be reached
nslookup kubernetes.default 10.244.0.222
output: resolved address, Address: 10.96.0.1
ping 10.96.0.1
output: all packages lost
ping 10.96.0.10
output: all packages lost
ping 10.244.0.222
output: all packages received
How did this happen?
This issue appeared when I was updating a cluster. I have reinstalled kube-flannel and CoreDNS services with their default equivalents:
- CoreDNS configuration: https://github.com/coredns/helm#configuration
- Flannel configuration: https://github.com/flannel-io/flannel
Throughout this process, I also uninstalled kube-proxy.
I don't know if kube-proxy is a necessary component of a Kubernetes cluster, or if Flannel can be an alternative, but I tried to reinstall it with this command: https://stackoverflow.com/a/71519601/19570235. However, without any luck.
Error message:
could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable-1.txt":
英文:
TL;DR
From a pod I am able to resolve DNS addresses only when I am using CoreDNS endpoint IP. How to make pods use coreDNS IP address?
CoreDNS configuration
- IP address: 10.96.0.10
- endpoint: 10.244.0.222
Kubelet configuration
...
clusterDNS:
- 10.96.0.10
...
Flannel
Default configuration from: https://github.com/flannel-io/flannel
Cluster
Is up and running and have these pods:
- coredns
- etcd
- apiserver
- controller-manager
- flannel
- scheduler
Also, the cluster consists of only a single master node (that is schedulable).
Pod setup
# run pod
kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools
Test cases
# 1
nslookup kubernetes.default
# output: ;; connection timed out; no servers could be reached
# 2
nslookup kubernetes.default 10.96.0.10
# output: ;; connection timed out; no servers could be reached
# 3
nslookup kubernetes.default 10.244.0.222
# output: resolved address, Address: 10.96.0.1
# 4
ping 10.96.0.1
# output: all packages lost
# 5
ping 10.96.0.10
# output: all packages lost
# 6
ping 10.244.0.222
# output: all packages received
How have that happened?
That issue appeared when I was updating a cluster. I have reinstalled kube-flannel and coreDNS services with their default equivalents:
Throughout this process I have also uninstalled kube-proxy.
I don't know if kube-proxy is a necessary component of a k8s or does a flannel can be an alternative but I tried to reinstall it with this command: https://stackoverflow.com/a/71519601/19570235 However, without any luck.
# Error message:
could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable-1.txt":
答案1
得分: 0
我已经通过将kubelet中的clusterDNS部分从10.96.0.10
更改为10.244.0.222
来解决了这个问题。
之后,我重新启动了kubelet服务(k8s在Ubuntu上运行),以及Pods。现在,Pods可以解析主机名和其他服务,比如google.com。
我不太确定这是否是一个解决方法,或者是否需要在kubelet配置中提供coreDNS端点,因此我会在接受此答案之前将此帖子保持开放一段时间。
英文:
I was able to resolve this issue by changing clusterDNS section in kubelet from 10.96.0.10
to 10.244.0.222
.
After that I have restarted kubelet service (k8s is working on Ubuntu) and pods. Now pods can resolve hostnames and other services, like google.com.
I am not really sure if that is a workaround or if it is necessary to provide coreDNS endpoint to the kubelet config and because of that I will keep this post open for a while before accepting this answer.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论