k8s集群出现部分服务器无法解析域名情况,但是coreDNS所在的pod上是可以解析该域名

域名完全不能解析

查看coredns的配置

[root@k8s01 coredns]# kubectl get -n kube-system cm coredns  -oyaml
apiVersion: v1
data:
  Corefile: |
    .:53 {
        log
        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
        cache 30
        loop
        reload
        loadbalance
    }

其中forward . /etc/resolv.conf配置表示使用当coredns内部不能解析的时候,向宿主机上的resolv.conf文件中配置的nameserver转发dns解析请求,当宿主机上namserver有多个时,默认采用的时random的方式随机转发,失败后就返回错误
查看服务容器中的resolv.conf文件,确认对应的nameserver是指向core-dns对应的service的,对应的coredns的日志显示正常,没有看到异常信息。由此可以推断coredns在该节点上启动的时候该节点上的resolv文件中还没有能解析指定存储域名的nameserver,应该是后续人为手动加上的,所以解决方式是删除coredns的pod,让其在该node上重建,测试dns的解析是正常的,但是多尝试几次发现会出现不能解析的情况

域名偶尔不能解析

在上述问题中说了当宿主机上namserver有多个时,coredns内部默认采用的时random的方式随机转发,失败后就返回错误。由于集群是处于云上的环境,添加上相对应的nameserver后,云环境自己也有对应的nameserver在resolv.conf文件中配置,导致coredns在转发的时候,random方式选择到云环境自己的dns nameserver的时候,就解析不了内部使用的域名,所以解决方式是修改resolv.conf文件,将我们的nameserver添加到宿主机resolv.conf第一个nameserver,然后修改coredns配置,将其forward的policy设置为sequential,然后重建coredns的pod,常见的coredns的forward插件的配置请参考coredns forward plugin,修改后配置文件如下:

[root@k8s01 coredns]# kubectl get -n kube-system cm coredns  -oyaml
apiVersion: v1
data:
  Corefile: |
    .:53 {
        log
        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
           policy sequential
        }
        cache 30
        loop
        reload
        loadbalance
    }

至此dns解析的问题解决,通常k8s使用dns的时候,还会出现k8s集群内部的service (DNS A或者AAAA记录)解析失败的问题,通常可以查看coredns的的kubernetes的插件是否配置正确,可以参考core dns kubernetes plugin的文档进行相关配置的修改来解决相关问题

文章作者: 鲜花的主人
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 爱吃可爱多
Kubernetes Kubernetes
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝