部署完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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐