首页 > 其他分享 >[问题记录]k8s集群中coredns解析失败

[问题记录]k8s集群中coredns解析失败

时间:2023-04-25 15:00:42浏览次数:53  
标签:解析 ndots 域名 集群 coredns k8s local

目录

[问题记录]k8s集群中coredns解析失败

故障现象

在k8s集群,使用coredns提供集群内部dns服务
但是在使用过程中,偶现解析公网域名失败的情况,应用内日志记录显示UnknownHost

问题排查

对有问题的集群进行网络抓包解析,在服务侧记录到DNS解析失败的现象时,观察当时的DNS解析记录,发现:

  • DNS最终是解析完成并将正确的结果返回给服务了
  • 服务在获取到最终的正确解析结果前就抛出了UnknownHost
  • 服务在向DNS服务器请求域名解析时,并未第一时间将完整域名申请解析,而是添加了k8s集群内部域名(如.svc.cluster.local)进行解析

问题解析

这个现象的根本原因是k8s集群内部的DNS解析优先级
在k8s集群内部,每个pod内都会有 /etc/resolv.conf 配置,具体内容如下

search cube-robot.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.10.10.5
options ndots:2

文件中有 searchndots 两个参数需要重点关注

  • search 主机名列表;目前仅限6个域名,共计256个字符
  • ndots 可理解为 点号 . 的个数

对于一个域名,如果不是完整域名,且域名中的点号小于ndots值,则会优先按照search的顺序依次解析
对于一个域名,如果不是完整域名,且域名中的点号小于ndots值,则会优先按照search的顺序依次解析
对于一个域名,如果不是完整域名,且域名中的点号小于ndots值,则会优先按照search的顺序依次解析

对于一个域名,如果不是完整域名,但域名中的点号大于/等于ndots值,则会直接解析完整域名

PS 完整域名: 以.结尾的域名(baidu.com 不是完整域名 baidu.com. 是完整域名)
完整域名

举例说明:

若在集群内需要解析 baidu.com 域名,按照本文上述 /etc/resolv.conf 配置,则真实的解析顺序为:
1、 baidu.com.cube-robot.svc.cluster.local
2、 baidu.com.svc.cluster.local
3、 baidu.com.cluster.local
4、 baidu.com

解决方案

既然清楚了问题的原因,那么一共有两个解决思路
1、 服务请求DNS解析时多等一会
2、 修改 ndots 参数,减少不必要的解析请求

修改ndots参数

ndots参数默认为1,而coredns将其修改成了5,我们并不会去修改coredns,而是针对DP进行单独配置

    spec:
      dnsConfig:
        options:
          - name: ndots
            value: '2'
      containers:
          image: nginx
          imagePullPolicy: Always
          name: nginx
      ... ...

参考文档

DNS for Services and Pods

标签:解析,ndots,域名,集群,coredns,k8s,local
From: https://www.cnblogs.com/c-moon/p/17352616.html

相关文章

  • mac os下安装k8s的kubernetes-dashboard
     需要这个的继续往下看 环境macos 12.6.2 安装dokcer https://docs.docker.com/desktop/install/mac-install/安装k8s https://blog.csdn.net/qq_20042935/article/details/124472626 <-看这位兄弟写的很详细了安装kubernetes-dashboard 1.创建命名空间 kubec......
  • CentOS 服务器部署 DNS 解析服务
    需求在centos云服务器上部署一个dns解析服务,以供windows电脑可以使用这个服务器ip作为网络的dns代理。我的服务器ip为192.168.126.241,我想在我的windows电脑访问abc.baidu.com时解析到ip为110.112.113.111的服务器上,访问www.baidu.com时解析到123.111.111.111的服务器上。尽量模......
  • 深入理解C#泛型:new与where关键字全解析
    C#泛型中new和where是重要的关键字,它们都可以用于约束泛型类型参数的限制;它们都用于提高代码的安全性和可用性,它们的作用在很大程度上提高了代码的可读性和可维护性。在这篇文章中,我们将一起了解泛型中的new和where,以及它们之间的区别。1.new关键字在C#泛型中,new关键字被用于指......
  • k8s技巧完全版
    效率篇自动补全不想写那么长的命令每次都要打命名空间,太累了?调试篇这些好用的工具,你怎么能没有?日志你在哪!监控资源限制执行命令格式化输出Kubectl详细输出和调试集群来回copy文件网络篇修改Pod内部的/etc/hosts为什么我Ping不通svc?可以让我直接访问你吗......
  • J1939 CAN多包发送的帧解析
    关于J1939多包数据传输问题(电动汽车BMS和直流充电机之间CAN报文的解读_腾讯新闻(qq.com))   常见帧    ......
  • K8s 集群 etcd节点故障解决方案
    1环境说明k8s版本:v1.20etcd节点(192.168.0.12)故障: 报错详情: 4月2422:47:13k8s-node2etcd[9543]:{"level":"warn","ts":"2023-04-24T22:47:13.571+0800","caller":"etcdserver/server.go:2065","msg":......
  • k8s常见异常
    1、证书过期[root@kube-master01kubernetes]#kubectlgetnodeUnabletoconnecttotheserver:x509:certificatehasexpiredorisnotyetvalid:currenttime2023-03-19T09:30:10+08:00isafter2023-01-24T09:34:35Z[root@kube-master01log]#kubeadmcertsch......
  • 第138篇:了解HTTP协议(TCP/IP协议,DNS域名解析,浏览器缓存)
    好家伙,发现自己的网络知识十分匮乏,赶紧补一下 这里先举个我生活中的例子欸,作业不会写了,上网搜一下用edge浏览器上bing必应搜一下(百度广告太多了,真不想用百度举例子) 假设这是我们第一次访问bing的首页当我向浏览器中输入https://cn.bing.com/并按下回车浏览器做了什么?(我......
  • k8s 能做到限制pod在节点的指定cpu核心上运行吗?用--cpuset 方式实现,请给出一个具体案
    在Kubernetes中,可以使用--cpuset方式来限制Pod在节点的指定CPU核心上运行。这可以通过在Pod的yaml文件中设置容器启动命令来实现。具体地,我们可以在容器的启动命令中使用--cpuset选项来指定需要运行的CPU核心。下面是一个典型的使用--cpuset选项的Pod的yaml文件示例:apiVersion:......
  • 开源外卖系统源码解析:如何快速搭建属于自己的订餐平台?
    随着外卖市场的日益壮大,许多商家和个人都在考虑如何搭建一个属于自己的订餐平台。而在这个过程中,开源外卖系统源码无疑是一项不可或缺的资源。本文将以“开源外卖系统源码解析:如何快速搭建属于自己的订餐平台?”为主题,向您介绍外卖系统的相关内容,帮助您更好地了解如何利用现有的开源......