coreDNS 常见问题及优化方案

news/2024/11/26 4:41:48/

目录

问题现象一

导致原因

优化方案

问题现象二

导致原因

优化方案

Core DNS配置优化和说明 

参考文章:


问题现象一

      重启coredns pod导致集群业务解析域名五分钟可不用

导致原因

       当集群使用IPVS作为kube-proxy负载均衡模式时,您可能会在CoreDNS缩容或重启时遇到DNS概率性解析超时的问题。该问题由社区Linux内核缺陷导致,具体信息,请参见。ipvs: queue delayed work to expire no destination connections if expi… · torvalds/linux@35dfb01 · GitHubLinux kernel source tree. Contribute to torvalds/linux development by creating an account on GitHub.https://github.com/torvalds/linux/commit/35dfb013149f74c2be1ff9c78f14e6a3cd1539d1?spm=a2c63.p38356.0.0.56a3eb84uFgUly

     粗浅的理解一下大概意思就是当coredns节点有变更例如ip变化了,由于有会话保持的机制pod还会复用之前的连接。

优化方案

1. 部署NodeLocal DNSCache(推荐)

     另外一篇文章我会详细介绍一下NodeLocaDNS,先简单的说一下带来的收益

     1)pod首先会访问nodelocaldns,nodelocaldns会将每次请求缓存到本地。可以大大的提高性能。相当于集群的每个节点都是一个dns服务器

     2) 降低coredns 80% - 90%的请求量,减轻coredns的压力和瓶颈问题

     3) 如果coredns有变更时,由于我们使用nodelocaldns,pod会首先访问nodelocaldns 如果请求没有命中,nodelocaldns 再去请求coredns 进行tcp协议的请求重新建立连接三次握手,几乎不影响业务

2.  修改kube-proxy 会话保持超时时间 --ipvs-udp-timeout=10s 

         修改方式两种,都需要重启kube-proxy

        1) 一般通常会在kube-system命名空间下有一个kube-proxy的configmap,configmap中把这行配置加上即可。

        2)修改kube-proxy daemonsets 增加参数

      简单说一下不推荐第二种方式的原因     

      默认超时时间为300s,我当时遇到的现象就是服务五分钟无法解析。

      1)可以修改为10s或者5s这样可以减少一些业务流量的损失,但是没有解决本质的问题。

      2)如果设置为0则代表不开启会话保持,这种情况下我们的业务pod每进行一次域名方式的请求都会去和coredns 建立udp的连接。频繁建连首先一定会造成很多不必要的网络开销。

      3)其次就是如果我们coredns 将65535个端口都占用完这个时候就会建立连接失败意味着业务会解析失败。

      4)重启集群所有kube-proxy pod 尤其是在线业务这种操作对服务来说是毁灭性的

问题现象二

     服务部署到集群后,业务反馈有些接口会报无法解析部分外网域名的问题。

导致原因

     因为我们的Deployment默认使用的dnsPolicy策略为ClusterFirstWithHostNet,这种模式会优先走集群内部的coredns解析,如果coredns无法解析就会通过coredns的配置文件 forward 到宿主机的/etc/resolv.conf文件使用nameserver dns。我们宿主机的dns是自建的,我们的dns只做内网域名的解析,公网域名都会forward到公有云的DNS服务器。 画个简图如下

     注意我上面说的是部分公网无法解析并不是所有公网域名都不行。之后我们为了快速恢复业务,将dnsPolicy 策略改为了Default模式这个模式会将宿主机的 resolv.conf文件挂载到pod中相当于使用宿主机的nameserver。改成这种方式也没有恢复。

      测试发现用dig命令直接解析时会报错 connection timed out; no servers could be reached,用nslookup 解析则正常由于隐私问题我就不截解析结果的图了。从nslookup的解析结果来看这个域名包含了70多条A记录。如下图

      这里说明了一个问题,nslookup解析域名是用的TCP协议,dig 默认不指定协议的情况是UDP,之后我又用dig +tcp 再次解析这个域名结果符合预期使用tcp解析时没有问题的。

   那么问题又来了,为什么使用UDP协议解析时会失败呢。抓包分析由于这个域名有很多A记录导致返回结果超过了512 字节 达到了1866字节。

抓包的路径如下

   服务器---> LB --> IDC DNS Server 这个包是在dns 服务器上看到的。同时我们也在服务器抓包发现服务器并没有接收到response只有query的包。那这个问题又是为什么呢?dns 服务器分明给我返回数据了但是我的客户端没有接收到。结合我们整体的链路判断应该是LB出现了问题

   询问云厂商后得知他们LB用的NAT模式也就是说请求的结果一定还会通过LB将结果返回,而且云厂商LB还有一个限制当使用UDP请求的返回结果大于1500byte 就会丢弃。而且之前我们还测试过nameserver绑定某一台rs是没有问题。足以说明一定是LB的问题。

优化方案

1.  将LB  TCP 后端rs增加为9个确保每个rs都能正常响应tcp请求

2.  部署NodeLocal DNSCache,pod 访问NodeLocalDNS默认协议是UDP,但是NodeLocal DNS 请求core DNS使用的是TCP协议。

3. 业务代码改用TCP方式(需要研发配合修改代码,如果涉及到底层依赖的库不是太友好)

Core DNS配置优化和说明 

apiVersion: v1
data:Corefile: |.:53 {errorsready  # 节点就绪探测,默认监听端口8181,检测通过后挂到endpoint#logdebughealth {  #CoreDNS自身健康状态报告,默认监听端口8080,一般用来做健康检查lameduck 15s}kubernetes cluster.local in-addr.arpa ip6.arpa {pods insecurefallthrough in-addr.arpa ip6.arpa}hosts {198.18.96.191 xxx.xxx.xxx.xxxfallthrough}#template IN AAAA .      #禁用ipv6#template ANY AAAA {     #ipv6解析时返回NXDOMAIN#    rcode NXDOMAIN#    fallthrough#}prometheus :9153forward . /etc/resolv.conf {prefer_udp             #优先使用udp协议}cache 30loop                     #环路检测,如果检测到环路,则停止CoreDNS。reload                   #动态加载配置文件loadbalance              #循环DNS负载均衡器,可以在答案中随机A、AAAA、MX记录的顺序}
kind: ConfigMap
metadata:name: corednsnamespace: kube-system

参考文章:

CoreDNS配置说明 - 容器服务 ACK - 阿里云

ipvs: queue delayed work to expire no destination connections if expi… · torvalds/linux@35dfb01 · GitHub


http://www.ppmy.cn/news/275114.html

相关文章

浅谈养老所消防安全存在的问题与解决方案 安科瑞 许敏

1养老场所消防安全存在的问题 1.1筑物耐火等级低 养老场所新建的建筑较少,尤其是对于民办养老场所来说,大部分都是以原有的民房、工厂厂房、废弃学校等修建起来,通过简单的改造,而后演变成养老基地。这些建筑整体耐火等级不够&am…

python介绍

python是解释型,面向对象的语言 range(360),返回0-359之间的整数。 python会被编译成与操作系统相关的二进制文件,然后再解释执行。 解释器CPython。 建的目录和安装目录有不要用英文。 python里面不要随便加空格,空格是有特定含义的。空…

pdf转word 破解版

pdf 转 word 破解版

pdf转word免费不限页数

作为职场新人,pdf转换软件是必备的工具。很多pdf转word软件都需要收费,让我很是惆怅。但是最近发现了一个免费pdf转word在线转换工具,转换效果不错,我之前转换了一个pdf转word,转完以后word的格式排版依旧非常精准&…

10套word版个人简历模板,各种风格个人简历模板

10套word版个人简历模板,各种风格个人简历模板 下载地址:10套word版个人简历模板,各种风格个人简历模板 模板预览 下载地址:10套word版个人简历模板,各种风格个人简历模板

图片在线转换成word免费版

有时,我们看到一些内容,会拍照下来整理成为电子档,但是一个字一个字的输入Word中,费时费力不说,还容易出错,其实拍的照片是可以直接转换成Word文件的。今天小编介绍一款可以免费将拍的照片转成可以修改的Wo…

如何免费pdf全部转化为word版

在日常工作中,Word文档转PDF文档很容易,直接就可以把Word文档输出为PDF文件,但是有时候我们需要把PDF文档转换成Word文档怎么办呢?今天和大家分享一个方法,无需下载软件,直接上传PDF就能快速转换成功&#…

java离职证明模板word_离职证明模板Word免费版下载

离职证明是用人单位与劳动者解除劳动关系以后开具的书面材料,可以通过人力资源部申请获得离职证明书。离职证明可以避免存在同时和多家单位存在雇佣你的情况,避免劳动纠纷的发生。今天最火小编为大家整理了几份通用的离职证明范本,仅供参考!快…