美文网首页Kubernetes
CoreDNS 简单介绍

CoreDNS 简单介绍

作者: 码二哥 | 来源:发表于2019-11-12 17:24 被阅读0次

    参考文献:
    https://mp.weixin.qq.com/s/vU6jMvNo3loXLltXF6cWVw

    1、CoreDNS 简介

    CoreDNS作为CNCF中托管的一个域名发现的项目,原生集成Kubernetes,它的目标是成为云原生的DNS服务器和服务发现的参考解决方案。所以,CoreDNS走的也是Traefik的路子,降维打击SkyDNS。

    从Kubernetes 1.12开始,CoreDNS就成了Kubernetes的默认DNS服务器,但 kubeadm默认安装CoreDNS的时间要更早。在Kuberentes 1.9版本中,使用 kubeadm方式安装的集群可以通过以下命令直接安装CoreDNS。

    # kubeadm init --feature-gates=CoreDNS=true
    

    下面,我们将详细解释CoreDNS的架构设计和基本用法。

    从功能角度看,CoreDNS更像是一个通用的DNS方案,通过插件模式极大地扩展自身功能,从而适用于不同的场景
    正如CoreDNS官方博客描述的那样:

    CoreDNS is powered by plugins.

    CoreDNS有以下3个特点。

    • 插件化(Plugins)。基于Caddy服务器框架,CoreDNS实现了一个插件链的架构,将大量应用端的逻辑抽象成插件的形式(例如,Kubernetes的DNS服务发现、Prometheus监控等)暴露给使用者。CoreDNS以预配置的方式将不同的插件串成一条链,按序执行插件链上的逻辑。在编译层面,用户选择需要的插件编译到最终的可执行文件中,使得运行效率更高。CoreDNS采用Go语音编写,所以从代码层面来看,每个插件其实都只实现了CoreDNS定义的接口的组件而已。第三方开发者只要按照CoreDNS Plugin API编写自定义插件,就可以很方便地集成到CoreDNS中。
    • 配置简单化。引入表达力更强的DSL,即Corefile形式的配置文件(也是基于Caddy框架开发的)。
    • 一体化的解决方案。区别于Kube-dns“三合一”的架构,CoreDNS编译出来就是一个单独的可执行文件,内置了缓存、后端存储管理和健康检查等功能,无须第三方组件辅助实现其他功能,从而使部署更方便,内存管理更安全。

    2、Corefile 知多少

    Corefile是CoreDNS的配置文件(源于Caddy框架的配置文件Caddyfile),它定义了:

    • DNS server以什么协议监听在哪个端口(可以同时定义多个server监听不同端口);
    • DNS负责哪个zone的权威(authoritative)DNS解析;
    • DNS server将加载哪些插件。

    通常,一个典型的Corefile格式如下:

    ZONE:[PORT] {
    [PLUGIN] ...
    }
    • ZONE:定义DNS server负责的zone,PORT是可选项,默认为53;
    • PLUGIN:定义DNS server要加载的插件,每个插件可以有多个参数。
    

    例如:

    {
    chaos CoreDNS-001
    }
    

    上述配置文件表达的是:DNS server负责根域 . 的解析,其中插件是chaos且没有参数。

    image
    image
    image

    3、插件工作模式

    当CoreDNS启动后,它将根据配置文件启动不同的DNS server,每个DNS server都拥有自己的插件链。当新来一个DNS请求时,它将依次经历以下3步逻辑:

    image

    CoreDNS 请求处理工作流

    下面将以一个实际的 Corefile为例,详解CoreDNS处理DNS请求的工作流。
    Corefile如下所示:

    
    coredns.io:5300 {
    file /etc/coredns/zones/coredns.io.db
    }
    example.io:53 {
    errors
    log
    file /etc/coredns/zones/example.io.db
    }
    example.net:53 {
    file /etc/coredns/zones/example.net.db
    }
    .:53 {
    errors
    log
    health
    rewrite name foo.example.com foo.default.svc.cluster.local
    }
    

    通过配置文件不难看出,我们定义了两个DNS server(尽管有4个配置块),分别监听5300和53端口。将以上Corefile翻译成处理逻辑图:

    image
    image

    4、总结

    无论是Kube-dns还是CoreDNS,基本原理都是利用watch Kubernetes的Service和Pod,生成DNS记录,然后通过重新配置Kubelet的DNS选项让新启动的Pod使用Kube-dns或CoreDNS提供的Kubernetes集群内域名解析服务

    5. CoreDNS 提供的插件

    如,k8s插件地址:https://github.com/coredns/coredns/tree/master/plugin/kubernetes

    下面的文献里,有使用指南
    http://ju.outofmemory.cn/entry/363914

    相关文章

      网友评论

        本文标题:CoreDNS 简单介绍

        本文链接:https://www.haomeiwen.com/subject/tipqictx.html