coreDNS 常见问题及优化方案

news2024/12/24 0:04:39

目录

问题现象一

导致原因

优化方案

问题现象二

导致原因

优化方案

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

参考文章:

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/623372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【IMX6ULL驱动开发学习】03.设置IMX6ULL开发板与虚拟机在同一网段

为什么要设置IMX6ULL与虚拟机通信? 因为要把在虚拟机下编译的文件传到IMX6ULL开发板上运行 设置好同一网段,可以互ping后,可以参考这篇博客,实现开发板与虚拟机的文件互传 IMX6ULL开发板与虚拟机互传文件 目录 一、设置window…

Vue.js 中的 mixin 和 extends 有什么区别?

Vue.js 中的 mixin 和 extends 有什么区别? 在 Vue.js 中,mixin 和 extends 是两种常见的代码复用方式。它们都可以让我们在多个组件之间共享代码,提高代码复用性和开发效率。但是,它们之间还是有一些区别的,本文将介…

S32DS的安装教程参考

进入恩智浦官网 点击右上角注册登陆进行注册账号->注册成功后登录成功显示为"我的恩智浦" 1.我使用的是 S32 DS for Power Architecture v2.1 当然可以根据自己需求下载相应软件版本 2.点击搜索框,输入S32ds,回车enter 3.找到相应信息,点击蓝字(有…

阿里巴巴内部Spring Cloud Alibaba 全彩 PDF 版手册限时开源

众所周知,Spring Cloud Alibaba 是致力于提供微服务开发的一站式解决方案。但是很多的同学还是不是很了解,或者说知识略懂一些浅显的知识,从没有深入地学习过。 今天我们就来系统地学习一下 Spring Cloud Alibaba 第三版的内容,第…

Python数据分析案例29——自编码器监测异常值

与传统的监督学习不一样,这一篇主要是讲述自编码器模型的,是无监督学习,并且用于的任务不是分类或者回归,而是异常值的监测。 案例背景 需要从一堆网络流量特征监控的数据中寻找哪些可能是异常情况。 听着像分类问题对吧&#x…

虹科新闻 | 虹科与Skkynet正式建立合作伙伴关系

近日,虹科与Skkynet正式建立合作伙伴关系,双方就工业应用自动化领域进行深入的交流与合作,未来将共同致力于为亚洲市场提供完整的工业物联网通讯解决方案,解决亚洲客户的物联网挑战。 虹科与Skkynet都表示十分期待这次的合作。“虹…

【IMX6ULL驱动开发学习】04.IMX6ULL开发板与虚拟机互传文件

互传文件前提:IMX6ULL开发板和虚拟机能够互相ping通,即在同一网段下且能够互ping 可参考这篇博客:设置IMX6ULL开发板与虚拟机在同一网段 目录 一、使用SCP命令 二、通过SFTP服务传输文件(使用Xftp等工具) 三、通过N…

程序员错觉之『这个Bug很快搞定!』

博主:爱码叔 个人博客站点: icodebook 公众号:漫话软件设计 微博:程序员涛哥 专注于软件设计与架构、技术管理。擅长用通俗易懂的语言讲解技术。对技术管理工作有自己的一定见解。文章会第一时间首发在个站上,欢迎大家…

Hive中的DML操作

文章目录 Hive中的DML操作一、Load1)语法2)实操案例(0)创建一张表(1)加载本地文件到hive(2)加载HDFS文件到hive中 二、Insert1. 将查询结果插入表中1)语法2)案…

美团 551 亿佣金收入,需要“埋葬”多少客单20元的中小商家?

文 | 新熔财经 作者 | 卡夫卡 热度喧嚣尘上的618大促氛围里,中小商家们当了一回主角。 在急需提振消费、复苏经济的2023年,各大电商平台史上第一次,出意料之外但又情理之中地在618,把资源最为丰沛的C位给了中小商家。 但这样和…

【数据结构与算法篇】 二叉树的性质(补充)

​👻内容专栏:《数据结构与算法篇》 🐨本文概括: 继上一篇深入浅出_二叉树之后遗漏掉了,再次写一篇二叉树的性质博文,对二叉树进行补充总结。 🐼本文作者:花 碟 🐸发布时…

qt 乱码

init() { // 根据配置加载默认语言系统 // 解决中文乱码问题 QTextCodec *codec QTextCodec::codecForName("system"); QTextCodec::setCodecForLocale(codec); } 设置 /execution-charset:utf-8

LVS负载均衡群集部署——NAT模式

LVS负载均衡群集部署——NAT模式 一、群集概述1、群集存在的必要2、解决方法3、根据集群针对的目标差异分类 二、负载均衡群集架构三、负载均衡群集工作模式分析1、NAT模式2、TUN模式3、DR模式4、三种工作模式的区别 四、LVS虚拟服务器1、Linux Virtual Server2、LVS现在已成为…

2核2G轻量应用服务器3M带宽阿里云和腾讯云性能对比

2核2G3M轻量应用服务器选阿里云还是腾讯云?腾讯云2核2G3M轻量应用服务器95元一年,阿里云2核2G3M配置优惠价108元一年,如何选择?阿腾云详细对比阿里云和腾讯云轻量应用服务器2核2G3M配置CPU性能及选择方法: 目录 轻量…

Spring6源码编译、安装

环境准备 名称版本jdk17gradle8.1.1spring源码版本6.0.9 安装JDK 下载并解压 配置环境变量 JAVA_HOME D:\\Develop\\Zulu\\zulu-17 CLASSPATH .;%JAVA_HOME%\lib; PATH %JAVA_HOME%\bin验证 java -version安装Gradle 下载并解压 配置环境变量 GRADLE_HOME D:…

网络安全面试题大全(整理版)500+面试题附答案详解,最全面详细

前言 随着国家政策的扶持,网络安全行业也越来越为大众所熟知,想要进入到网络安全行业的人也越来越多。 为了拿到心仪的Offer之外,除了学好网络安全知识以外,还要应对好企业的面试。 作为一个安全老鸟,工作这么多年&…

使用 YApi 管理 API 文档,测试, mock

随着互联网的发展,API变的至关重要。根据统计,目前市面上有上千万的开发者,互联网项目超过10亿,保守统计涉及的 API 数量大约有 100 亿。这么大基数的API,只要解决某些共有的痛点,将会是非常有意义的事情。…

CISP好考吗?考试大纲有哪些,CISP通过率有多少?

CISP全称:注册信息安全专业人员,发证机构是:中国信息安全测评中心;面向的培训对象是:各信息系统管理、建设、运行维护、督查及从事信息化工作的相关人员; 国测中心对报考CISP也是有学历要求的:硕…

Fmoc-Ser(Ac4Manα1-2Ac3Manα)-OH,一种糖基化氨基酸,化合物CAS号1427205-92-2

Fmoc-Ser(Ac4Manα1-2Ac3Manα)-OH是一种化学品,CAS编号1427205-92-2,分子式C44H51NO22,分子量为945.88。它的纯度标准达到95%以上,供应包装规格有1克、5克和10克,也可进行定制,时间周期可与生产厂家沟通。…

Simulink尝试双脉冲实验验证MOSFET二极管反向恢复实验的特性(附仿真模型)

目录 前言 双脉冲实验 Simulink仿真对比 总结 前言 最近在做交错串联的图腾柱单相PFC的项目,基于模型的开发,想要在仿真上实现过零点尖峰电流产生并通过软启动进行抑制,把整个过程都通过仿真实现出来,在这个过程中尝试了Simul…