k8s dns 无法解析

部署完k8s coredns 之后想测试一下能不能解析成功 (k8s版本v1.18.1)

先部署一个busybox pod 测一下能否解析

cat >  busybox.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
  - name: busybox
    image: busybox:1.28
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
  restartPolicy: Always
 EOF
 
 kubectl apply -f busybox.yaml

验证:

kubectl exec -it busybox – nslookup baidu.com

结果解析不了

网上查了一下说是busybox 的版本问题

改个image 试试

cat > dig.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: dig
  namespace: default
spec:
  containers:
  - name: dig
    image:  docker.io/azukiapp/dig
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
  restartPolicy: Always
 EOF
 kubectl apply -f dig.yaml

执行解析
在这里插入图片描述
查了一下在 stackoverflow 找到了解决方法:

Ubuntu: 在worker节点中 查看 br_netfilter这个模块是不是启用了,如果没有启用运行modprobe br_netfilter

CentOS: 看看 /proc/sys/net/bridge/bridge-nf-call-iptables 的值是不是为1,如果不是:echo ‘1’> /proc/sys/net/bridge/bridge-nf-call-iptables

https://stackoverflow.com/questions/48148838/kube-dns-error-reply-from-unexpected-source

最好是加上内核参数

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

另外提供一个排查思路

  1. kubectl exec -it busybox /bin/sh 登陆进pod 查看dns server 是否指向了coredns的service ip
  2. ping 一下coredns的service ip 看看是否能通
  3. nc 探测 coredns 的端口是否可达
  4. kubectl get endpoints -n kube-system 查看coredns service的endpoint是否正确
  5. dig 指定 coredns pod 的ip 看能否解析成功

个人公众号
https://mp.weixin.qq.com/s/yzOUYAJ7bF6iFyGPnXLWww

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要排查KubernetesDNS解析和kube-proxy问题,可以按照以下步骤进行: 1. 检查DNS配置:首先,请确保Kubernetes集群中的DNS配置正确。可以使用以下命令检查kube-dnscorednsPod是否正在运行: ``` kubectl get pods -n kube-system -l k8s-app=kube-dns ``` 如果Pod没有处于运行状态,可以使用以下命令查看它们的详细信息: ``` kubectl describe pod -n kube-system <kube-dns-pod-name> ``` 确保DNS Pod没有任何错误或异常,并且它们的IP地址与集群中其他组件的IP地址是可访问的。 2. 检查DNS解析配置:确保你的Service和PodDNS配置正确。可以使用以下命令检查Service和PodDNS名称是否正确解析IP地址: ``` kubectl run -it --rm --restart=Never busybox --image=busybox:1.31 nslookup <service-name> ``` 这将在一个临时Pod中执行nslookup命令来检查DNS解析情况。 3. 检查kube-proxy配置:确认kube-proxy的配置正确,并且它正在正常运行。可以使用以下命令检查kube-proxy的状态: ``` kubectl get pods -n kube-system -l k8s-app=kube-proxy ``` 如果kube-proxy Pod没有处于运行状态,可以使用以下命令查看它们的详细信息: ``` kubectl describe pod -n kube-system <kube-proxy-pod-name> ``` 确保kube-proxy没有任何错误,并且它正在监听正确的网络接口。 4. 检查网络策略和防火墙:如果你启用了网络策略(NetworkPolicy),请确保它允许从源Pod访问目标PodDNS。另外,检查防火墙规则是否允许DNS流量通过。 这些步骤可用于排查KubernetesDNS解析和kube-proxy问题。如果问题仍然存在,请提供更多详细信息,以便我能够提供更准确的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值