Pod无法解析Kubernetes DNS:如何让Pod使用CoreDNS集群IP?
clusterDNS:
- 10.96.0.10
...
### Flannel 使用默认配置部署 ### 集群状态 集群运行正常,包含以下组件Pod: - coredns - etcd - apiserver - controller-manager - flannel - scheduler 仅单主节点且可调度。 ### 测试Pod创建命令 ```bash kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools
测试结果
- 直接解析默认域名
nslookup kubernetes.default
输出:;; connection timed out; no servers could be reached
- 指定CoreDNS集群IP解析
nslookup kubernetes.default 10.96.0.10
输出:;; connection timed out; no servers could be reached
- 指定CoreDNS端点IP解析
nslookup kubernetes.default 10.244.0.222
输出:成功解析,Address: 10.96.0.1
- ping Kubernetes服务集群IP
ping 10.96.0.1
输出:全部丢包
- ping CoreDNS集群IP
ping 10.96.0.10
输出:全部丢包
- ping CoreDNS端点IP
ping 10.244.0.222
输出:全部接收成功
问题背景
集群更新时,重新部署了默认配置的kube-flannel和CoreDNS,同时卸载了kube-proxy。不清楚kube-proxy是否为必需组件,或Flannel能否替代它。尝试重新安装kube-proxy失败,报错:
could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable-1.txt":
1. 问题根源
kube-proxy是Kubernetes核心必需组件,Flannel仅负责实现Pod跨节点网络连通,完全无法替代kube-proxy的功能。kube-proxy的核心职责是维护Service集群IP到后端Pod端点的转发规则,没有它,集群IP(包括CoreDNS的10.96.0.10、Kubernetes服务的10.96.0.1)无法映射到实际Pod,导致流量无法送达。
2. 重新安装kube-proxy
(1)手动指定版本安装
由于自动拉取稳定版本失败,先查看当前集群版本:
kubectl version --short
根据获取到的版本号,从Kubernetes官方资源中找到对应版本的kube-proxy部署yaml文件,下载后执行部署:
kubectl apply -f kube-proxy.yaml
或者使用kubeadm重新部署:
# 导出当前集群配置 kubeadm config view > kubeadm-config.yaml # 部署kube-proxy组件 kubeadm init phase addon kube-proxy --config=kubeadm-config.yaml
(2)验证运行状态
安装完成后,检查kube-proxy Pod是否正常运行:
kubectl get pods -n kube-system -l k8s-app=kube-proxy
确保所有Pod处于Running状态。
3. 验证修复效果
重新进入测试Pod,执行以下命令确认:
nslookup kubernetes.default ping 10.96.0.10
此时应能正常解析域名,且ping集群IP无丢包。
内容的提问来源于stack exchange,提问作者mlokos

