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服务与服务发现的更多相关文章

  1. 分布式服务注册和发现consul 简要介绍

    Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发现的方案,Consul的方案更"一站式",内置了服务注册与发现框 架 ...

  2. Docker+Consul+Registrator 实现服务注册与发现

    Docker+Consul+Registrator实现服务注册与发现 逻辑图 实现nginx节点自动化加入容器IP代理 1.三台Consul agent server作为高可用通过Consul Tem ...

  3. Consul之:服务注册与发现

    一.服务的管理(注册与发现)有三种方式: 1:通过配置文件的方式静态注册2:通过HTTP API接口来动态注册(spring cloud使用方式,spring cloud中使用的是consul api ...

  4. 一、springcloud服务注册、发现、调用(consul/eureka)

    1.Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...

  5. 【转帖】基于Zookeeper的服务注册与发现

    http://www.techweb.com.cn/network/hardware/2015-12-25/2246973.shtml 背景 大多数系统都是从一个单一系统开始起步的,随着公司业务的快速 ...

  6. 微服务~Consul服务注册与发现

    服务发现是基于微服务架构的关键原则之一.尝试配置每个客户端或某种形式的约定可能非常困难,可以非常脆弱.Consul通过HTTP API和DNS提供服务发现服务.Spring Cloud Consul利 ...

  7. SpringCloud核心教程 | 第三篇:服务注册与发现 Eureka篇

    Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...

  8. Spring Cloud Alibaba(一) 如何使用nacos服务注册和发现

    Nacos介绍 Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. Nacos 帮助您更敏捷和容易地构 ...

  9. 微服务, 架构, 服务治理, 链路跟踪, 服务发现, 流量控制, Service Mesh

    微服务, 架构, 服务治理, 链路跟踪, 服务发现, 流量控制, Service Mesh 微服务架构   本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件.本文侧 ...

  10. .Net Core微服务系列--服务发现

    什么是服务发现 首先我们先思考一个问题,当我们在浏览器中输入一个域名比如baidu.com,然后发生了什么才能让我们访问到百度的网页?简单来说,浏览器会首先从主机的hosts文件中查看是否有baidu ...

随机推荐

  1. 在IDEA启动多个Spring Boot工程实例

    在IDEA上点击Application右边的下三角 ,弹出选项后,点击Edit Configuration 选中需要多实例启动的应用,将默认的Single instance only(单实例)的钩去掉 ...

  2. shell中 << EOF 和 EOF 使用

    转载请注明出处: EOF(End of File)在Shell中通常用于指示输入的结束,并在脚本或命令中进行多行输入.它允许用户指定一个特定的分界符来表示输入的结束,通常用于创建临时文件.重定向输入或 ...

  3. Python——第二章:range()的用法:

    在Python中,range()是一个内置函数,用于生成一个整数序列,通常用于循环遍历.以下是range()函数的一些常见用法: range(n): 从0数到n. 不包含nrange(m, n): 从 ...

  4. netty自定义channel id

    netty自定义channel id.netty custom channel id 搞搞netty时发现默认的id很长,无法直接自定义. 于是我网上搜索了search一下,发现没有相关文章,那就自己 ...

  5. CSS3学习笔记引言

    开始我们要来介绍css: CSS(全称为Cascading Style Sheets)是一种用于描述HTML.XML等文档样式的样式语言,它能够定义元素的显示方式,如字体.颜色.布局等. CSS可以把 ...

  6. JavaImprove--Lesson01--枚举类,泛型

    一.枚举 认识枚举类 枚举是一种特殊的类 枚举的格式: 修饰符  enmu   枚举类名{ 名称1,名称2: 其它成员 } //枚举类 public enum A { //枚举类的第一列必须是罗列枚举 ...

  7. 2021-01-25:redis中,哨兵如何选举?

    福哥答案2021-01-25: 答案1: redis-sentinel故障转移的流程: 1.当多个sentinel发现并确认了master有问题. 2.接着会选举出一个sentinel作为领导. 3. ...

  8. <Python全景系列-1> Hello World,1分钟配置好你的python环境

    <从此开始:1分钟配置好你的python环境> 欢迎来到我们的系列博客<Python360全景>!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题, ...

  9. SARIF在应用过程中对深层次需求的实现

    摘要:为了降低各种分析工具的结果汇总到通用工作流程中的成本和复杂性, 业界开始采用静态分析结果交换格式(Static Analysis Results Interchange Format (SARI ...

  10. 8种桌面IDE CodeArts智能代码补全类型

    摘要:代码补全可以有效的提升开发效率.减少拼写错误和输入代码量.CodeArts 依赖于 codearts.smartassist-java-ls 插件实现代码补全功能. 本文分享自华为云社区< ...