如何验证coreDNS是否正常工作?

本文介绍在Kubernetes集群中验证CoreDNS运行状态的方法。通过创建BusyBox Pod并执行DNS解析,确认CoreDNS能正确解析内部服务及外部域名,确保集群DNS服务正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在安装完Kubernetes cluster环境后,如何验证coreDNS是否在正常工作?这是一项很重要的工作,将会影响将来在容器中部署的服务能否被正常调用。

我们可以通过创建一个busybox 的pod,再在busybox里去解析服务名的方式来验证coreDNS是否正常工作。

具体可参考kubernetes官方文档《Debugging DNS Resolution》

busybox的yaml 文件

svw@master:~$ cat busybox.yaml
apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
  - name: busybox
    image: busybox:1.28
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
  restartPolicy: Always


创建Busybox pod

svw@master:~$ kubectl create -f busybox.yaml
pod/busybox created
svw@master:~$ kubectl get pods busybox
NAME      READY   STATUS              RESTARTS   AGE
busybox   0/1     ContainerCreating   0          12s
svw@master:~$ kubectl get pods busybox
NAME      READY   STATUS    RESTARTS   AGE
busybox   1/1     Running   0          31s

busybox的resolv.conf内容

svw@master:~$ kubectl exec busybox cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local csvw.com
options ndots:5
svw@master:~$ kubectl get pods --namespace=kube-system
NAME                             READY   STATUS    RESTARTS   AGE
coredns-576cbf47c7-6b6dj         1/1     Running   143        16d
coredns-576cbf47c7-vgr5g         1/1     Running   144        16d
etcd-master                      1/1     Running   10         16d
kube-apiserver-master            1/1     Running   11         16d
kube-controller-manager-master   1/1     Running   12         16d
kube-flannel-ds-amd64-24tsk      1/1     Running   12         16d
kube-flannel-ds-amd64-lxsr7      1/1     Running   8          14d
kube-proxy-ck8x6                 1/1     Running   10         16d
kube-proxy-slp66                 1/1     Running   5          14d
kube-scheduler-master            1/1     Running   10         16d

在busybox 的pod里解析kubernetes.default 的IP地址

svw@master:~$ kubectl exec -ti busybox -- nslookup kubernetes.default
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      kubernetes.default
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local

在busybox 的pod里解析外部IP地址 ,按照前文coreDNS的配置,是通过pod所在node上的/etc/resolv.conf 来代理解析的

参见我的博客《用kubeadm安装Kubernetes 1.12.3 cluster 详解》 3(6)

svw@master:~$ kubectl exec -ti busybox -- nslookup www.sina.com.cn
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      www.sina.com.cn
Address 1: 202.102.94.124

在busybox 的pod里解析php guestbook application 中创建的服务

svw@master:~$ kubectl get service
NAME           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
kubernetes     ClusterIP   10.96.0.1        <none>        443/TCP    16d
redis-master   ClusterIP   10.100.206.174   <none>        6379/TCP   17h
redis-slave    ClusterIP   10.98.90.234     <none>        6379/TCP   17h
svw@master:~$ kubectl exec -ti busybox -- nslookup redis-master
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      redis-master
Address 1: 10.100.206.174 redis-master.default.svc.cluster.local
svw@master:~$ kubectl exec -ti busybox -- nslookup redis-slave
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      redis-slave
Address 1: 10.98.90.234 redis-slave.default.svc.cluster.local

通过以上例子可见,coredns工作正常。在我们创建的Kubernetes 1.12.3 cluster中,coredns既可以管理新生成的service的域名,又可以解析出外部域名。

### Minikube 中 CoreDNS 的相关问题或配置指南 在 Kubernetes 集群中,CoreDNS 是默认的 DNS 服务器组件,用于解析服务名称到 IP 地址。当使用 Minikube 启动本地 Kubernetes 集群时,可能会遇到与 CoreDNS 相关的问题。以下是关于如何排查和解决这些问题以及配置 CoreDNS 的详细说明。 #### 排查 CoreDNS 故障 如果 CoreDNS 出现问题,通常可以通过以下方法进行诊断: 1. **检查 Pod 状态** 使用 `kubectl` 命令查看 CoreDNS Pod 是否正常运行。 ```bash kubectl get pods --namespace kube-system | grep coredns ``` 如果状态不是 `Running` 或者显示为 `CrashLoopBackOff`,则可能存在问题[^1]。 2. **日志分析** 查看 CoreDNS Pod 日志以获取更多信息。 ```bash kubectl logs -n kube-system $(kubectl get pods -n kube-system | grep coredns | awk '{print $1}') ``` 3. **网络插件冲突** 某些情况下,Minikube 默认使用的网络插件(如 Flannel 或 Cilium)可能导致 CoreDNS 不可用。可以尝试切换网络插件来解决问题: ```bash minikube delete && minikube start --network-plugin=cni ``` #### 自定义 CoreDNS 配置 如果需要修改 CoreDNS 行为,可以通过编辑其 ConfigMap 来实现自定义设置。 1. **查看当前配置** 获取现有的 CoreDNS 配置文件。 ```bash kubectl edit configmap coredns -n kube-system ``` 2. **添加自定义规则** 在配置文件中加入特定的 DNS 转发或其他规则。例如,将所有未匹配的服务请求转发至外部 DNS 服务器: ```yaml .:53 { errors health ready kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa } prometheus :9153 forward . /etc/resolv.conf cache 30 loop reload loadbalance } ``` 3. **应用更改并验证** 修改完成后保存文件,Kubernetes 将自动重新加载 CoreDNS 配置。通过以下命令测试新配置是否生效: ```bash nslookup kubernetes.default.svc.cluster.local $(minikube ip) ``` #### 性能调优建议 对于更复杂的环境,还可以考虑调整 CoreDNS 参数以提高性能。例如,在高负载场景下增加副本数: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: coredns namespace: kube-system spec: replicas: 3 ``` --- ### 示例代码:启动带有自定义选项的 Minikube 下面是一个脚本示例,展示如何创建一个新的 Minikube 实例并启用额外功能。 ```bash #!/bin/bash # 删除现有集群 minikube delete # 启动新的 Minikube 实例 minikube start \ --memory=4096 \ --cpus=2 \ --kubernetes-version=v1.27.0 \ --extra-config=kubeadm.ignore-preflight-errors=NumCPU # 安装必要的工具 pip install tensorflow==2.8.0 torch torchvision ``` 上述脚本还集成了机器学习框架安装过程[^2],以便于后续开发工作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

alpha xu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值