【手打】coredns单台使用
目录:
- coredns介绍
- coredns安装
- corendns配置
coredns介绍
CoreDNS 其实就是一个 DNS 服务,而 DNS 作为一种常见的服务发现手段,所以很多开源项目以及工程师都会使用 CoreDNS 为集群提供服务发现的功能,Kubernetes 就在集群中使用 CoreDNS 解决服务发现的问题。
作为一个加入 CNCF(Cloud Native Computing Foundation) 的服务 CoreDNS 的实现可以说的非常的简单。
架构
整个 CoreDNS 服务都建立在一个使用 Go 编写的 HTTP/2 Web 服务器 Caddy · GitHub 上,CoreDNS 整个项目可以作为一个 Caddy 的教科书用法。
CoreDNS 的大多数功能都是由插件来实现的,插件和服务本身都使用了 Caddy 提供的一些功能,所以项目本身也不是特别的复杂。
插件
作为基于 Caddy 的 Web 服务器,CoreDNS 实现了一个插件链的架构,将很多 DNS 相关的逻辑都抽象成了一层一层的插件,包括 Kubernetes 等功能,每一个插件都是一个遵循如下协议的结构体:
type (
Plugin func(Handler) Handler Handler interface {
ServeDNS(context.Context, dns.ResponseWriter, *dns.Msg) (int, error)
Name() string
}
)
所以只需要为插件实现 ServeDNS
以及 Name
这两个接口并且写一些用于配置的代码就可以将插件集成到 CoreDNS 中。
Corefile
另一个 CoreDNS 的特点就是它能够通过简单易懂的 DSL 定义 DNS 服务,在 Corefile 中就可以组合多个插件对外提供服务
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
proxy . 8.8.8.8
log
errors
cache
}
对于以上的配置文件,CoreDNS 会根据每一个代码块前面的区和端点对外暴露两个端点提供服务:
该配置文件对外暴露了两个 DNS 服务,其中一个监听在 5300 端口,另一个在 53 端口,请求这两个服务时会根据不同的域名选择不同区中的插件进行处理。
原理
CoreDNS 可以通过四种方式对外直接提供 DNS 服务,分别是 UDP、gRPC、HTTPS 和 TLS:
转自:https://draveness.me/dns-coredns/
coredns安装
wget https://github.com/coredns/coredns/releases/download/v1.1.4/coredns_1.1.4_linux_amd64.tgz
tar -zxvf coredns_1.1.4_linux_amd64.tgz
mv coredns /usr/local/bin
corendns配置
mkdir /etc/coredns
cd /etc/coredns
vim /etc/coredns/corefile
coredns:53 {
errors # show errors
log # enable query logs
loadbalance round_robin
cache 1
} example.org:53 {
file db.example.org
}
d03.com:53 {
file db.d03.com
}
yiy.net:53 {
file db.yiy.net
} yostata.xyz:53 {
file db.yostata.xyz
} .:53 {
hosts {
# hosts 插件可以如使用 /etc/hosts 文件一样配置服务名称
# 如果不写大括号及其中的内容,直接hosts指令,默认使用 /etc/hosts 中的服务名称
# inline 形式
172.16.200.245 www.y03.com
fallthrough
}
# 对于没有配置的域名,转发到114
forward . 8.8.8.8
cache 120
reload 6s
log
errors
}
# 展示一个配置db文件
vim db.example.org
$ORIGIN example.org.
@ 3600 IN SOA sns.dns.icann.org. noc.dns.icann.org. (
2017042745 ; serial
7200 ; refresh (2 hours)
3600 ; retry (1 hour)
1209600 ; expire (2 weeks)
3600 ; minimum (1 hour)
) 3600 IN NS a.iana-servers.net.
3600 IN NS b.iana-servers.net. www IN A 127.0.0.1
IN AAAA ::1 tt IN A 172.0.0.1
IN AAAA ::1
IN TXT HelloExampleTest
【手打】coredns单台使用的更多相关文章
- Memcached解决单台服务器故障问题
<beitmemcached> <add key="name1" value="server1:port" /> <add key ...
- 不要将缓存服务器与Tomcat放在单台机器上,否则出现竞争内存问题
缓存分为本地缓存和远程分布式缓存,本地缓存访问速度更快但缓存数据量有限,同时存在与应用程序争用内存的情况. 1.不要将缓存服务器与Tomcat放在单台机器上,否则出现竞争内存问题 2.不要将缓存服务器 ...
- weblogic11g 安装集群 —— win2003 系统、单台主机
weblogic11g 安装集群 —— win2003 系统.单台主机 注意:此为weblogic11g 在win2003系统下(一台主机)的安装集群,linux.hpux.aix及多个主机下原理一 ...
- php的redis 操作类,适用于单台或多台、多组redis服务器操作
redis 操作类,包括单台或多台.多组redis服务器操作,适用于业务复杂.高性能要求的 php web 应用. redis.php: <?php /* redis 操作类,适用于单台或多台. ...
- 单台电脑上启动多个Modelsim图形环境窗口的简单办法(windows)
1 单台电脑上启动多个Modelsim图形环境窗口的简单办法(windows) http://blog.21ic.com/user1/3128/archives/2010/73447.html 单 ...
- 进阶!基于CentOS7系统使用cobbler实现单台服务器批量自动化安装不同版本系统(week3_day5_part2)-技术流ken
前言 在上一篇博文<cobbler批量安装系统使用详解-技术流ken>中已经详细讲解了cobbler的使用以及安装,本篇博文将会使用单台cobbler实现自动化批量安装不同版本的操作系统. ...
- cobbler单台服务器实现批量自动化安装不同版本系统-技术流ken
前言 在上一篇博文<cobbler批量安装系统使用详解-技术流ken>中已经详细讲解了cobbler的使用以及安装,本篇博文将会使用单台cobbler实现自动化批量安装不同版本的操作系统. ...
- 单台机器安装zookeeper
先给一堆学习文档,方便以后查看 官网文档地址大全: OverView(概述) http://zookeeper.apache.org/doc/r3.4.6/zookeeperOver.html Get ...
- 架构师成长之路6.3 DNS服务器搭建(部署单台DNS)
点击返回架构师成长之路 架构师成长之路6.3 DNS服务器搭建(部署单台DNS) 1.安装bind yum -y install bind-utils bind bind-devel bind-chr ...
随机推荐
- kubernets资源预留
一. Kubelet Node Allocatable Kubelet Node Allocatable用来为Kube组件和System进程预留资源,从而保证当节点出现满负荷时也能保证Kube和Sy ...
- Shell脚本控制docker容器启动顺序
1.遇到的问题 在分布式项目部署的过程中,经常要求服务器重启之后,应用(包括数据库)能够自动恢复使用.虽然使用docker update --restart=always containerid能够让 ...
- IDEA 远程调试服务器代码
在 /home/ttx/app/uco-azj/catalina/30017/bin/set_env.sh export CATALINA_OPTS="-Xms1g -Xmx2g -XX:+ ...
- Java内存区域略解
概览 分述 程序计数器 用于记录该线程的执行位置,便于跳转或者线程中断后的恢复 方法区 Java虚拟机规范中把 原本用于存储常量,静态变量和类的元信息,但java1.7将字符串常量移到了堆中,java ...
- Python爬虫知识
一.爬虫 1.概述 网络爬虫,搜索引擎就是爬虫的应用者. 2.爬虫分类 (1)通用爬虫,常见就是搜索引擎,无差别的收集数据,存储,提取关键字,构建索引库,给用户提供搜索接口. 爬取一般流程: 初始化一 ...
- 从零学脚手架(六)---production和development拆分
development.production拆分 根据文件拆分 webpack打包时分为开发模式(development)和发布模式(production),在前面使用命令参数做了简单区分. 但这种方 ...
- python网络编程--TCP客户端的开发
#导入socket模块 2 import socket 3 #参数说明 4 """ 5 socket类的介绍 6 创建客户端socket对象 7 socket.socke ...
- unbutu系统扩展磁盘大小
建议下载一个可视化工具,这样的话就更不容易出错 sudo apt install gparted 在终端中运行这条命令就可安装可视化工具 fdisk -l 在终端中输入这条命令来查看自己系统所挂载的磁 ...
- linux库文件编程
参考博文链接: https://www.cnblogs.com/guochaoxxl/p/7141447.html https://www.cnblogs.com/tuhooo/p/8757192.h ...
- 采用React + Fabric + ImageMagick 实现大图片DIY定制
一,需求背景: 某个印刷公司,有一系列的设计文件模板.接到客户订单时,就在这些设计文件模板上,做一些简单的定制,就能够满足客户的印刷需求. 如在设计文件模板上添加客户的Logo,二维码,联系方式等. ...