CoreDNS -- DNS服务与服务发现

Posted 北门吹雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CoreDNS -- DNS服务与服务发现相关的知识,希望对你有一定的参考价值。

CoreDNS -- DNS服务与服务发现

DNS服务器

1. 架构 -- 微内核

  • 几乎所有coreDNS功能都是由插件进行提供,每个服务对应一组插件链

2. 安装方式

  • 二进制文件
  • Docker
  • 源码编译:添加自定义插件]

3. query

  • step1/3 :如果某个query端口存在多个Servers则优先使用最长后缀匹配Servers,然后将请求路由到匹配成功的Server
  • step2/3:依次执行server中定义的plugin-chains, 执行顺序依照 plugin.cfg
  • step3/3:每个插件都会审查query并决定是否处理这个query

4. Plugin 行为

  • Query is Processed
    • 插件链上某个插件正在处理查询,并生成一个响应返回给客户端,之后的插件不会被执行
  • Query is Not Processed
    • 当前插件决定不处理请求,则由插件链之后的插件处理,如果到最后都没有插件处理请求,则coreDNS返回 SERVFAIL给客户端
  • Query is Processed With Fallthrough
    • 当前插件正在处理请求,如果能够生成响应则直接返回响应,如果不能则希望后面的插件处理 fallthough
  • Query is Processed With Hint
    • 该插件总是调用下一个插件,但允许该插件查看写入的返回客户端的响应

5. 配置

文档:https://coredns.io/manual/toc/#configuration

  • Corefile
    • 通过 -cnf 参数指定或默认当前工作目录下找该文件
    • 文件中包含一个或多个servers块,一个server中包含一个或多个插件
    • Servers中的插件顺序决定不了插件链的执行顺序,其执行顺序由 plugin.cfg决定
    • 注释以 # 开头,到行尾都是注释部分
  • Environment Variables
    • $ENV_VAR -- 通过 花括号 + $ 方式在配置文件中引用环境变量
  • Importing Other Files
    • import 可以在 Corefile文件中任意部分使用,主要配合重用片段(reused snippets)使用 -- don\'t repeat yourself 原则的实现
(snip) 
  errors
  log
  prometheus

# 通过 (name) 方式定义重用片段
.:53 
    whoami
    import snip

  • Server blocks
. 
    # plugin list

# . 表示匹配所有zone
  • Zone name or a list of zone names
  • 通过 在 zone name 后面添加 <zone>:<port> 指定sever监听的端口,默认为53,可以通过bind指定绑定的网口
.:1054 
    bind lo
    whoami

.:1054 
    bind eth0
    whoami

# 因为绑定的网口不一样,所以相同端口相同不会有冲突
  • specifily a protocol

    • dns:// for plain DNS (the default if no scheme is specified)
    • tls:// for DNS over TLS
    • https:// for DNS over HTTPS
    • grpc:// for DNS over gRPC
  • Example

coredns.io:5300 
    file db.coredns.io

example.io:53 
    log
    errors
    file db.example.io

example.net:53 
    file db.example.net

.:53 
    kubernetes
    forward . 8.8.8.8
    log
    errors
    cache

以上是关于CoreDNS -- DNS服务与服务发现的主要内容,如果未能解决你的问题,请参考以下文章

转: centos7.5 下 coredns+etcd搭建DNS服务器

微服务架构中基于DNS的服务发现

CoreDNS 简单介绍

k8s与dns--coredns的一些实战经验

centos7.5下coredns+etcd搭建DNS服务器

k8s 服务注册与发现DNS解析异常问题排查