简介

问题分析

  • 1、首先,通过参考其他博客,最简单的方法是改变pod中默认的 DNS nameserver
$ sudo cat /etc/resolv.conf
nameserver 10.96.0.10
search ray-macaron.svc.cluster.local svc.cluster.local cluster.local 
options ndots:5

# 8.8.8.8 是谷歌Public DNS
# >> 代表讲echo命令的输出追加到后续文件中
$ echo "nameserver 8.8.8.8" >> /etc/resolv.conf

# 然后再 ping www.baidu.com,发现域名解析正常
$ ping www.baidu.com
  • 2、但是,这并未发现问题的产生原因,我们参考 故障排查:Kubernetes 中 Pod 无法正常解析域名 中的方式,逐步排查故障产生的原因
    • 1)进入 DNS 工具 Pod 的命令行
    $ sudo kubectl exec -it dnsutils /bin/sh -n kube-system
    
    • 2)通过 ping nslookup 命令测试
      • 分析:ping不通svc地址,但是地址可以解析,ping其他pod地址是正常通的
    $ ping www.baidu.com
    ping: bad address 'www.baidu.com'
    
    $ ping kubernetes.default
    PING kubernetes.default (10.96.0.1): 56 data bytes
    ^C
    --- kubernetes.default ping statistics ---
    163 packets transmitted, 0 packets received, 100% packet loss
    
    $ nslookup kubernetes.default
    Server:         10.96.0.10
    Address:        10.96.0.10#53
    
    Name:   kubernetes.default.svc.cluster.local
    Address: 10.96.0.1
    
    $ ping 10.96.0.1
    PING 10.96.0.1 (10.96.0.1): 56 data bytes
    ^C
    --- 10.96.0.1 ping statistics ---
    12 packets transmitted, 0 packets received, 100% packet loss
    
  • 3)故障定位:
    • 经过一系列不断地试错与博客学习,最终发现原因在于 coredns 配置默认情况下没有打开 向上级DNS转发解析命令 的开关
    • 通过 kubectl get ConfigMap coredns -n kube-system -o yaml 得到coredns的配置单
    apiVersion: v1
    data:
     Corefile: |
       .:53 {
           errors
           health {
              lameduck 5s
           }
           ready
           kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
              ttl 30
           }
           prometheus :9153
           #forward . /etc/resolv.conf {
           #   max_concurrent 1000
           #}
           cache 30
           loop
           reload
           loadbalance
       }
    kind: ConfigMap
    metadata:
     creationTimestamp: "2023-09-20T10:39:29Z"
     name: coredns
     namespace: kube-system
     resourceVersion: "16559"
     uid: 31e12aad-9de9-42e6-98d8-a93af01629eb
    
    • 上述配置文件中,forward一项被注释掉了,需要删掉注释然后更新配置项
    • 更新配置项:kubectl apply -f coredns-custom.yaml -n kube-system,等待1-2min使新配置生效
Reference:参考链接
Logo

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

更多推荐