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给客户端
- 当前插件决定不处理请求,则由插件链之后的插件处理,如果到最后都没有插件处理请求,则coreDNS返回
- Query is Processed With Fallthrough
- 当前插件正在处理请求,如果能够生成响应则直接返回响应,如果不能则希望后面的插件处理
fallthough
- 当前插件正在处理请求,如果能够生成响应则直接返回响应,如果不能则希望后面的插件处理
- Query is Processed With Hint
- 该插件总是调用下一个插件,但允许该插件查看写入的返回客户端的响应
5. 配置
- 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 TLShttps://for DNS over HTTPSgrpc://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服务与服务发现的更多相关文章
- 分布式服务注册和发现consul 简要介绍
Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发现的方案,Consul的方案更"一站式",内置了服务注册与发现框 架 ...
- Docker+Consul+Registrator 实现服务注册与发现
Docker+Consul+Registrator实现服务注册与发现 逻辑图 实现nginx节点自动化加入容器IP代理 1.三台Consul agent server作为高可用通过Consul Tem ...
- Consul之:服务注册与发现
一.服务的管理(注册与发现)有三种方式: 1:通过配置文件的方式静态注册2:通过HTTP API接口来动态注册(spring cloud使用方式,spring cloud中使用的是consul api ...
- 一、springcloud服务注册、发现、调用(consul/eureka)
1.Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...
- 【转帖】基于Zookeeper的服务注册与发现
http://www.techweb.com.cn/network/hardware/2015-12-25/2246973.shtml 背景 大多数系统都是从一个单一系统开始起步的,随着公司业务的快速 ...
- 微服务~Consul服务注册与发现
服务发现是基于微服务架构的关键原则之一.尝试配置每个客户端或某种形式的约定可能非常困难,可以非常脆弱.Consul通过HTTP API和DNS提供服务发现服务.Spring Cloud Consul利 ...
- SpringCloud核心教程 | 第三篇:服务注册与发现 Eureka篇
Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...
- Spring Cloud Alibaba(一) 如何使用nacos服务注册和发现
Nacos介绍 Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. Nacos 帮助您更敏捷和容易地构 ...
- 微服务, 架构, 服务治理, 链路跟踪, 服务发现, 流量控制, Service Mesh
微服务, 架构, 服务治理, 链路跟踪, 服务发现, 流量控制, Service Mesh 微服务架构 本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件.本文侧 ...
- .Net Core微服务系列--服务发现
什么是服务发现 首先我们先思考一个问题,当我们在浏览器中输入一个域名比如baidu.com,然后发生了什么才能让我们访问到百度的网页?简单来说,浏览器会首先从主机的hosts文件中查看是否有baidu ...
随机推荐
- wasm+pygbag让你在网页上也能运行Python代码:【贪吃蛇游戏】
引言 最近小伙伴告诉我一种新的方法,可以使用wasm来使浏览器网页能够运行Python代码.这一下子激起了我的兴趣,因为这意味着用户无需安装Python环境就能直接运行我的demo,这真是太方便了.所 ...
- SPSC Queue
在多线程编程中,一个著名的问题是生产者-消费者问题 (Producer Consumer Problem, PC Problem). 对于这类问题,通过信号量加锁 (https://www.cnblo ...
- MySQL的事务(看看也许有帮助呢)
MySQL的事务 一.事务的概念 在MySQL中,只有InnoDB存储引擎才支持事务. 事务的处理用来维护数据库数据的完整性,保证同一个事务里的一批SQL语句,要么全部执行,要么全部不执行. 事务用来 ...
- 还在封装 xxxForm,xxxTable 残害你的同事?试试这个工具
之前写过一篇文章 我理想中的低代码开发工具的形态,已经吐槽了各种封装 xxxForm,xxxTable 的行为,这里就不啰嗦了.今天再来看看我的工具达到了什么程度. 多图预警... 以管理后台一个列表 ...
- 你真的会用 npx 吗❓❓❓
Hello,大家好! 日常开发中大家应该经常使用 npm install xxx 来安装包依赖,那是否注意到npm升级到 npm@5.2.0 之后,在 npm 二进制命令旁边安装了一个 npx 二进制 ...
- 【manim动画教程】--目录(完结)
manim是一个生成数学教学视频的动画引擎. 它用编程的方式创建精美的数学动画,让数学更加易懂. 本教程简单介绍了 manim 的基本使用方式,基于 v0.17.2 版本 manim 安装 manim ...
- CodeForces 808G Anthem of Berland 前缀函数 KMP DP
原题链接 题意 第一行给我们一串长为s,只包含小写字母与问号的字符串A,第二行给我们一个长为t只有小写字母的字符串B, 同时满足 $ s * t \le 1e7 $ 我们可以把问号变成任意的字母,我们 ...
- 3天上手Ascend C编程丨带你认识Ascend C基本概念及常用接口
本文分享自<[2023 · CANN训练营第一季]--Ascend C算子开发入门--第一次课(核函数的定义及实现)>,作者:dayao. Ascend C是CANN针对算子开发场景推出的 ...
- 常见的6种MySQL约束
摘要:一篇文章带你彻底了解MySQL各种约束 MySQL约束 <1> 概念 是一种限制,它是对表的行和列的数据做出约束,确保表中数据的完整性和唯一性. <2> 使用场景 创建表 ...
- Plus版SBOM:流水线物料清单PBOM
相信大家对软件物料清单(SBOM)并不陌生,它是指用于构建软件解决方案的所有软件组件(开源或商业)的列表.但在软件物料清单中,并不包括用于部署软件的微服务和其他组件.为了更全面了解所用的组件,我们需要 ...