20211217 更新 ,腾讯云 ipvs模式下 localdns:
https://cloud.tencent.com/developer/article/1813985

20210919解决思路:
文章一:
有可能是集群内CoreDNS负载高,可以尝试下面两种方式:

  1. 扩容下集群内的CoreDNS实例数
  2. 通过LocalDNS方式来优化CoreDNS负载:
    https://kubernetes.io/docs/tasks/administer-cluster/nodelocaldns/

详细文章2:https://blog.csdn.net/qq_38461443/article/details/107730030
解决方案如下:
方案(一):使用 TCP 协议发送 DNS 请求
通过resolv.conf的use-vc选项来开启 TCP 协议
测试
1、修改/etc/resolv.conf文件,在最后加入一行文本:

options use-vc

2、此压测可根据下面测试的go文件进行测试,编译好后放进一个pod中,进行压测:
#200个并发,持续30秒,记录超过5s的请求个数 ./dns -host {service}.{namespace} -c 200 -d 30 -l 5000

方案(二):避免相同五元组 DNS 请求的并发
通过resolv.conf的single-request-reopen和single-request选项来避免:
single-request-reopen (glibc>=2.9) 发送 A 类型请求和 AAAA 类型请求使用不同的源端口。这样两个请求在 conntrack 表中不占用同一个表项,从而避免冲突。
single-request (glibc>=2.10) 避免并发,改为串行发送 A 类型和 AAAA 类型请求,没有了并发,从而也避免了冲突。

测试 single-request-reopen
修改/etc/resolv.conf文件,在最后加入一行文本:
options single-request-reopen
此压测可根据下面测试的go文件进行测试,编译好后放进一个pod中,进行压测:
#200个并发,持续30秒,记录超过5s的请求个数 ./dns -host {service}.{namespace} -c 200 -d 30 -l 5000

测试 single-request
修改/etc/resolv.conf文件,在最后加入一行文本:
options single-request
此压测可根据下面测试的go文件进行测试,编译好后放进一个pod中,进行压测:
#200个并发,持续30秒,记录超过5s的请求个数 ./dns -host {service}.{namespace} -c 200 -d 30 -l 5000

最后结果,如果你测试过,相信coredns的测试如果还是增加使用 TCP 协议发送 DNS 请求,还是避免相同五元组 DNS 请求的并发,都没有显著的解决coredns延迟的结果

那么其实 k8s 官方也意识到了这个问题比较常见,所以也给出了 coredns 以 cache 模式作为 daemonset 部署的解决方案

在 Kubernetes 集群中使用 NodeLocal DNSCache
https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns/nodelocaldns

coredns基础知识

一 聊聊 resolv.conf 中 search 和 ndots 配置

原文:https://www.bianchengquan.com/article/409739.html
背景
Kubernetes 集群中,域名解析离不开 DNS 服务,在 Kubernetes v1.10 以前集群使用 kube-dns dns服务,后来在 Kubernetes v1.10+ 使用 Coredns 做为集群dns服务。

使用 Kubernetes 集群时,会发现 Pod /etc/resolv.conf 配置。具体如下:

nameserver 10.10.0.2
search production.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
小伙伴们会好奇,search 或者 ndots 这是干嘛呀!想知道是干嘛的,接着看下文。

名词解释
search:搜索主机名查找列表。搜索列表目前仅限于6个域名,共计256个字符。

ndots:通俗一点说,如果你的域名请求参数中,点的个数比配置的ndots小,则会按照配置的search内容,依次添加相应的后缀直到获取到域名解析后的地址。如果通过添加了search之后还是找不到域名,则会按照一开始请求的域名进行解析。

抓包分析DNS请求
Kubernetes Pod 内抓包,请参考 K8S Pod 内抓包快速定位网络问题:

二 CoreDNS:Kubernetes内部域名解析原理、弊端及优化方式

原文:https://blog.csdn.net/h952520296/article/details/106816680
https://blog.csdn.net/h952520296/article/details/106816680/
在其他的容器中,进行 youku.com 域名查找

复制

1
nslookup youku.com 172.22.121.65

注意:nslookup命令的最后指定DNS服务容器的IP,是因为,如果不指定,且DNS服务的容器存在多个的话,那么DNS请求,可能会均分到所有DNS服务的容器上,我们如果只抓某单个DNS服务容器抓到的包,可能就不全了,指定IP后,DNS的请求,就必然只会打到单个的DNS容器。抓包的数据才完整。
————————————————
版权声明:本文为CSDN博主「Mumunu-」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/h952520296/article/details/106816680

coredns 基础知识

理论:https://www.jianshu.com/p/ded59d18ed18

Default: Pod 从运行所在的节点继承名称解析配置
ClusterFirst: 与配置的集群域后缀不匹配的任何 DNS 查询(例如 "www.kubernetes.io") 都将转发到从节点继承的上游名称服务器。集群管理员可能配置了额外的存根域和上游 DNS 服务器。
ClusterFirstWithHostNet:对于以 hostNetwork 方式运行的 Pod,应显式设置其 DNS 策略 "`ClusterFirstWithHostNet`"。
None: 此设置允许 Pod 忽略 Kubernetes 环境中的 DNS 设置。Pod 会使用其 `dnsConfig` 字段 所提供的 DNS 设置。说明:** "Default" 不是默认的 DNS 策略。如果未明确指定 `dnsPolicy`,则使用 "ClusterFirst"。

例子:https://blog.csdn.net/qq_34556414/article/details/108999454
在 Cluster 中,除了可以通过 Cluster IP 访问 Service,Kubernetes 还提供了更为方便的 DNS 访问。

[root@k8s-master ~]# kubectl get deployment -n kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
coredns 1/1 1 1 25h
coredns 是一个 DNS 服务器。每当有新的 Service 被创建,coredns 会添加该 Service 的 DNS 记录。Cluster 中的 Pod 可以通过 <SERVICE_NAME>.<NAMESPACE_NAME> 访问 Service。

[root@k8s-master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 443/TCP 25d
nodeport-svc NodePort 10.0.0.171 3000:30090/TCP 28h
用 nslookup 查看 nodeport-svc的 DNS 的信息。

/ # nslookup nodeport-svc.default
Server: 10.0.0.2
Address 1: 10.0.0.2 kube-dns.kube-system.svc.cluster.local

Name: nodeport-svc.default
Address 1: 10.0.0.171 nodeport-svc.default.svc.cluster.local
比如可以用 httpd-svc.default 访问 Service httpd-svc。

/ # wget nodeport-svc.default:3000
Connecting to nodeport-svc.default:3000 (10.0.0.171:3000)
saving to ‘index.html’
index.html 100% |*********************************************************| 41 0:00:00 ETA
‘index.html’ saved
如果要访问其他 namespace 中的 Service,就必须带上 namesapce 了。Kubernetes 集群内部可以通过 Cluster IP 和 DNS 访问 Service。
————————————————
版权声明:本文为CSDN博主「富士康质检员张全蛋」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34556414/article/details/108999454

2021-08-31 CoreDNS:Kubernetes内部域名解析原理、弊端及优化方式相关推荐

  1. k8s 服务注册与发现(二)Kubernetes内部域名解析原理

    Kubernetes内部域名解析原理 同一集群同一命名空间下 在 Kubernetes 中,比如服务 a 访问服务 b,对于同一个 Namespace下,可以直接在 pod 中,通过 curl b 来 ...

  2. CoreDNS:Kubernetes内部域名解析原理、弊端及优化方式

    Kubernetes 中的 DNS 本篇主要尽可能详尽的说明 Kubernetes 的DNS解析原理,以及 Kubernetes 集群中 DNS 解析目前存在的弊端和优化方式. 在 Kubernete ...

  3. K8s - 内部域名解析 - 外

    现k8s中使用的都是coreDNS进行内部地址的解析及路由,在k8s v1.10之前的版本是使用kubeDNS.基于k8s 实战篇 - 镜像打包部署 - springboot&mysql - ...

  4. 递归函数内部的原理????不要跟我讲自己调用自己这样的话,我一分也不给你的zz

    楼主wormemory(绿茶)2002-06-13 12:52:41 在 C/C++ / C语言 提问 递归函数内部的原理????不要跟我讲自己调用自己这样的话,我一分也不给你的,     我要知道的 ...

  5. 本博客导读(2021/08/09更新)

    文章目录 1. 简介 1.1 博客精神 1.2 写作目的 1.3 技术方向 1.4 博主 1.5 版权说明 2 推荐内容 2.1 主要代表作 2.2 其他推荐内容 3. 程序类 3.1 C#程序设计 ...

  6. Kubernetes初探:原理及实践应用

    Kubernetes初探:原理及实践应用 [日期:2014-11-03] 来源:CSDN 作者:张俊 [字体:大 中 小] 总体概览 如下图所示是我初步阅读文档和源代码之后整理的总体概览,基本上可以从 ...

  7. 前端必读:浏览器内部工作原理

    前端必读:浏览器内部工作原理 作者: Tali Garsiel  发布时间: 2012-02-09 14:32  阅读: 2133 次  原文链接   全屏阅读  [收藏]   http://kb.c ...

  8. 八股文-- 2022.08.31

    途虎养车2022.08.31 在Java中,LinkedList类有而ArrayList类没有的方法是:removeLast()方法 LinkedList :底层基于双向链表实现,不支持高效的随机元素 ...

  9. 【云驻共创】华为云云原生之Kubernetes网络架构原理深度剖析(上)

    文章目录 前言 一.Kubernetes诞生背景 1.云原生的概念 2.云原生架构 3.Kubernetes(k8s) 二.Kubernetes基本网络模型剖析 1.概念厘清 1.1 二层桥接 VS ...

最新文章

  1. zip压缩报错解决:zip warning: name not matched: xxx/xxx/xxx
  2. ubuntu12.04 启动n卡独显方法
  3. [iOS翻译]《The Swift Programming Language》系列:Welcome to Swift-01
  4. 分布式:阿里云HSF转dubbo+zookeeper
  5. 一款 APK 是怎么诞生的?
  6. python34怎么安装_简明Python3教程 4.安装
  7. Linux部署Web应用程序超链接下载中文名称文件404问题解决办法
  8. 【动态规划】多重背包
  9. (BFS)Dungeon Master(poj2251)
  10. 训练日志 2019.1.12
  11. 数据结构之排序算法Java实现(2)——选择类排序之堆排序算法
  12. 第 24 章 状态模式
  13. linux打开文件系统调用,Linux2.4打开一个文件的系统调用
  14. Eclipse配置KEmulator
  15. 非常好用的自助建站程序整站源码 内置几十种站
  16. CSS布局——圣杯布局、双飞翼布局
  17. python 内置函数 eval
  18. 基于Python实现的学生信息管理系统
  19. 软件测试之测试用例的设计
  20. 淘宝宝贝详情栏固定位置的效果实现

热门文章

  1. vue office在线编辑_多人协同、AI 协作……未来的 Office 有这些「黑科技」
  2. mysql取消用户授权
  3. oracle undo与redo的区别
  4. 腾讯应届生怒怼“加班文化”:产品晚一天上线,公司会倒闭吗?腾讯回应:会认真反思,尽快整改!...
  5. 海尔CEO张瑞敏演讲语录
  6. 连接手表_千元跑步手表推荐
  7. 用接口开发接PO收入库程序
  8. 苹果电脑(mac)上远程连接windows的软件
  9. 关键信息基础设施确定指南_ISMS-考题答疑:哪些是关键信息基础设施?
  10. CentOS7快速搭建DNS中转服务器