coredns介绍

coredns介绍coredns coredns

大家好,欢迎来到IT知识分享网。

1 coredns的用途

CoreDNS 是一个灵活可扩展的 DNS 服务器,可以作为 Kubernetes 集群 DNS,在Kubernetes1.12版本之后成为了默认的DNS服务。 与 Kubernetes 一样,CoreDNS 项目由 CNCF 托管。

coredns在K8S中的用途,主要是用作服务发现,也就是服务(应用)之间相互定位的过程。

在k8s中,用service资源代理pod,通过暴露service资源的固定地址(集群IP),来解决以上POD资源变化产生的IP变动问题,但是针对service还存在以下问题:

  • service IP地址难以记忆
  • service资源可能也会被销毁和创建
  • pod ip本身也有需要暴漏的需求

为了解决以上问题,引入了coredns,在K8S,其主要用于服务发现,也就是服务(应用)之间相互定位的过程

2 coredns的部署

coredns部署参考

部署后,可在dns中,通过如下命令查询coredns是否运行正常

dig @127.0.0.1 -p 53 www.example.com 

3 corddns配置

3.1 K8s DNS策略

Kubernetes 中 Pod 的 DNS 策略有四种类型。

1.Default:Pod 继承所在主机上的 DNS 配置;

2.ClusterFirst:K8s 的默认设置;先在 K8s 集群配置的 coreDNS 中查询,查不到的再去继承自主机的上游 nameserver 中查询;

3.ClusterFirstWithHostNet:对于网络配置为 hostNetwork 的 Pod 而言,其 DNS 配置规则与 ClusterFirst 一致;

4.None:忽略 K8s 环境的 DNS 配置,只认 Pod 的 dnsConfig 设置。

3.2 resolv.conf

在部署 pod 的时候,如果用的是 K8s 集群的 DNS,那么 kubelet 在起 pause 容器的时候,会将其 DNS 解析配置初始化成集群内的配置。

比如创建了一个叫 my-nginx 的 deployment,其 pod 中的 resolv.conf 文件如下:

# DNS 服务的 IP,即coreDNS 的 clusterIP nameserver 169.254.25.10 # DNS search 域。解析域名的时候,将要访问的域名依次带入 search 域,进行 DNS 查询 # 比如访问your-nginx,其进行的 DNS 域名查询的顺序是:your-nginx.default.svc.cluster.local. -> your-nginx.svc.cluster.local. -> your-nginx.cluster.local. search default.svc.cluster.local svc.cluster.local cluster.local # 其他项,最常见的是 dnots。dnots 指的是如果查询的域名包含的点 “.” 小于 5,则先走search域,再用绝对域名;如果查询的域名包含点数大于或等于 5,则先用绝对域名,再走search域 # K8s 中默认的配置是 5。 options ndots:5 

3.3 coreDNS Corefile 文件

CoreDNS 实现了应用的插件化,用户可以选择所需的插件编译到可执行文件中;CoreDNS 的配置文件是 Corefile 形式的,coreDNS 的 configMap如下所示:

apiVersion: v1 data: Corefile: | .:53 { errors health # 指明 cluster.local 后缀的域名,都是 kubernetes 内部域名,coredns 会监听 service 的变化来维护域名关系,所以cluster.local 相关域名都在这里解析 kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure upstream fallthrough in-addr.arpa ip6.arpa } # CoreDNS 的监控地址为:http://localhost:9153/metrics prometheus :9153 # proxy 指 coredns 中没有找到记录,则去 /etc/resolv.conf 中的 nameserver 请求解析,而 coredns 容器中的 /etc/resolv.conf 是继承自宿主机的。 # 实际效果是如果不是 k8s 内部域名,就会去默认的 dns 服务器请求解析,并返回给 coredns 的请求者。 forward . /etc/resolv.conf cache 30 # 允许缓存 loop # 如果找到循环,则检测简单的转发循环并停止 CoreDNS 进程 reload # 允许 Corefile 的配置自动更新。在更改 ConfigMap 后两分钟,修改生效 loadbalance # 这是一个循环 DNS 负载均衡器,可以在答案中随机化 A,AAAA 和 MX 记录的顺序 } kind: ConfigMap metadata: creationTimestamp: "2019-06-10T03:19:01Z" name: coredns namespace: kube-system 

4 node local dns

4.1 DNS间歇性5秒延迟

由于 Linux 内核中的缺陷,在 Kubernetes 集群中你很可能会碰到恼人的 DNS 间歇性 5 秒延迟问题。

原因是镜像底层库 DNS 解析行为默认使用 UDP 在同一个 socket 并发 A 和 AAAA 记录请求,由于 UDP 无状态,两个请求可能会并发创建 conntrack 表项,如果最终 DNAT 成同一个集群 DNS 的 Pod IP 就会导致 conntrack 冲突,由于 conntrack 的创建和插入是不加锁的,最终后面插入的 conntrack 表项就会被丢弃,从而请求超时,默认 5s 后重试,造成现象就是 DNS 5 秒延时。

具体原因可参见:

4.2 NodeLocal DNSCache

NodeLocal DNSCache通过在集群上运行一个dnsCache daemonset来提高clusterDNS性能和可靠性。相比于纯coredns方案,nodelocaldns + coredns方案能够大幅降低DNS查询timeout的频次,提升服务稳定性。

nodelocaldns配置如下,nodelocaldns只配置了一个server,监听默认的UDP 53端口,4个zone。域名后缀为cluster.local的所有域名以及in-addr.arpa和ip6.arpa形式域名走coredns进行域名解析,其他外部域名使用宿主机的/etc/resolv.conf文件配置的nameserver进行解析。

缓存分为 256 个分片,每个分片默认最多可容纳 39 个项目 – 总大小为 256 * 39 = 9984 个项目。

# 其中cluster.local、in-addr.arpa、ip6.arpa表示kubernetes插件会处理域名后缀为cluster.local的所有域名以及处理所有的in-addr.arpa中的反向dns查找和ip6.arpa形式域名,其中kuberne# 集群域名后缀是在kubelet参数中配置的,默认值为cluster.local apiVersion: v1 data: Corefile: | cluster.local:53 { errors cache { success 9984 30 # 对于成功的缓存最多缓存9984条域名解析记录,缓存时间为30s denial 9984 5 # 对于失败的缓存最多缓存9984条域名解析记录,缓存时间为5s } reload loop bind 169.254.25.10 forward . 10.233.0.3 { force_tcp } prometheus :9253 health 169.254.25.10:9254 } in-addr.arpa:53 { errors cache 30 reload loop bind 169.254.25.10 forward . 10.233.0.3 { force_tcp } prometheus :9253 } ip6.arpa:53 { errors cache 30 reload loop bind 169.254.25.10 forward . 10.233.0.3 { force_tcp } prometheus :9253 } .:53 { errors cache 30 reload loop bind 169.254.25.10 forward . /etc/resolv.conf prometheus :9253 } kind: ConfigMap ...... 

nodelocaldns + coredns方案,DNS查询流程如下所示:

coredns-localdns

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/117212.html

(0)
上一篇 2025-11-22 20:33
下一篇 2025-11-22 21:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信