基于etcd插件的CoreDNS动态域名添加
前提条件:已经有一个可用的etcd环境。
一、CoreDNS简介
CoreDNS是一个DNS服务器,和Caddy Server具有相同的模型:它链接插件。CoreDNS是云本土计算基金会启动阶段项目。
CoreDNS是SkyDNS的继任者。 SkyDNS是一个薄层,暴露了DNS中的etcd中的服务。 CoreDNS建立在这个想法上,是一个通用的DNS服务器,可以与多个后端(etcd,kubernetes等)进行通信。
CoreDNS旨在成为一个快速灵活的DNS服务器。 这里的关键灵活指的是:使用CoreDNS,您可以使用DNS数据进行所需的操作。 还可以自已写插件来实现DNS的功能。
CoreDNS可以通过UDP / TCP(旧式的DNS),TLS(RFC 7858)和gRPC(不是标准)监听DNS请求。
CoreDNS目前支持的行为,括号里面的英文表示插件:
- 从文件提供区域数据; 支持DNSSEC(仅限NSEC)和DNS(file)。
- 从主机检索区域数据,即充当辅助服务器(仅限AXFR)(secondary)。
- 快速签署区域数据(dnssec)
- 响应负载均衡(loadbalance)
- 允许区域传输,即充当主服务器(file)
- 从磁盘自动加载区域文件(auto)
- 缓存(cache)
- 对endpoint的健康检查(health)
- 使用ETCD作为后端,即SkyDNS(ETCD)的101.5%替换(etcd)
- 使用k8s(kubernetes)作为后端(kubernetes)
- 作为一个代理转发查询到一些其他(递归)域名服务器(proxy)
- 提供指标(使用Prometheus)(metrics)
- 提供查询(log)和错误(errors)日志记录
- 支持CH类:version.bind和friends(chaos)
- 分析支持(pprof)
- 重写查询(qtype,qclass和qname)(rewrite)
- 回传所使用的IP地址,传输和端口号(whoami)
二、CoreDNS的安装
1、下载CoreDNS二进制安装文件
从CoreDNS官网上下载最新发布版本(https://github.com/coredns/coredns/releases/)

这里下载 coredns_011_linux_x86_64.tgz
下载后解压到/etc/coredns目录下,同时在本目录下添加一个Corefile文件,Corefile是CoreDNS工作的核心,Corefile里面引用了一系列的插件来支持CoreDNS的工作。具体Corefile的原理可参照(https://coredns.io/2017/07/23/corefile-explained/)
以下是一个引用了etcd插件的Corefile
.: {
etcd {
stubzones
path /skydns
endpoint http://172.16.71.200:2379
upstream /etc/resolv.conf
}
log stdout
errors stdout
proxy . /etc/resolv.conf
}
说明coredns工作于53端口,使用了etcd,log,errors,proxy插件
我们将编写好的Corefile也放在/etc/coredns目录底下。
新建管理脚本:/etc/init.d/coredns-manage
#!/bin/bash
now=$(date +%Y%m%d)
cmd='/etc/coredns/coredns -conf /etc/coredns/Corefile' start(){
exec $cmd &
} stop(){
ps -ef | grep "/etc/coredns/coredns" | grep -v "grep" |awk '{print $2}'| while read pid
do
C_PID=$(ps --no-heading $pid | wc -l)
echo "当前PID=$pid"
if [[ $C_PID == "" ]]; then
echo "PID=$pid 准备结束"
kill - $pid
echo "PID=$pid 已经结束"
else
echo "PID=$pid 不存在"
fi
done } case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
printf 'Usage: %s {start|stop|restart}\n'"$prog"
exit
;;
esac
启动coredns:
/etc/init.d/coredns-manage start
// :: [INFO] CoreDNS-
// :: [INFO] linux/amd64, go1., 1b60688d
CoreDNS-
linux/amd64, go1., 1b60688d
停止coredns:
/etc/init.d/coredns-manage stop
三、基于etcd插件的动态域名增加案例
etcd中的数据必须被编码为像SkyDNS这样的消息。 它也应该像SkyDNS一样工作。etcd插件广泛使用proxy插件来转发和查询网络中的其他服务器。
插件格式声明如下:
etcd [ZONES...] {
stubzones
fallthrough
path PATH
endpoint ENDPOINT...
upstream ADDRESS...
tls CERT KEY CACERT
}
- ZONES :经过授权的区域,可以为空
- stubzones:启用存根区域功能。 stubzone仅在位于指定的第一个区域下方的etcd树中完成。
- fallthrough:如果区域匹配但不能生成记录,则将请求传递给下一个插件
- path:etcd里面的路径 默认为“/ skydns”,以后所有的dns记录就是存储在该存根路径底下
- endpoint:etcd访问地址,默认http://localhost:2397
- upstream:要使用的上游解析程序解决指向外部域名的在etcd(认为CNAME)中找到的外部域名。 如果您希望CoreDNS作为客户端的代理,您需要添加代理插件。 ADDRESS可以是一个IP地址,IP:端口或一个字符串,指向一个被构造为/etc/resolv.conf的文件。
- tls 后面紧跟:
- 没有参数,如果服务器证书由系统安装的CA签名,并且不需要客户端证书
- 一个参数是CA PEM文件,如果服务器证书没有被系统CA签名,并且不需要客户端证书
- 两个参数 - 认证PEM文件的路径,私钥PEM文件的路径 - 如果服务器证书由系统安装的CA签名并需要客户端证书
- 三个参数 - 认证PEM文件的路径,客户端私钥PEM文件的路径,CA PEM文件的路径 - 如果服务器证书未被系统安装的CA签名,并且需要客户端证书
etcd {
stubzones
path /skydns
endpoint http://172.16.71.200:2379
upstream /etc/resolv.conf
}

etcd com.test{
stubzones
path /skydns
endpoint http://172.16.71.200:2379
upstream /etc/resolv.conf
}
反向域名解析:
支持反向区域。 您需要使CoreDNS了解您的权威性相反的事实。 例如,如果要添加172.0.0.0/24的反向,则需要将zone 0.0.172.in-addr.arpa添加到区域列表中。如果需要添加172.16.80.0/8的反向,则需要将zone 172.in-addr.arpai添加到区域列表中;
下面我们需要将172.16.80.175指向hzb.test.com,Corefile应该进行如下配置:
.: {
etcd test.com .in-addr.arpa {
stubzones
path /skydns
endpoint http://172.16.71.200:2379
upstream /etc/resolv.conf
}
log stdout
errors stdout
proxy . /etc/resolv.conf
}
还需要向etcd中增加一条如下的记录:
curl -XPUT http://172.16.71.200:2379/v2/keys/skydns/arpa/in-addr/172/16/80/175 -d value='{"host":"hzb.test.com"}'
用dig命令进行查询测试:
root@ceph01:~/mir2_data/dev//# dig @localhost -x 172.16.80.175 +short
hzb.test.com.
基于etcd插件的CoreDNS动态域名添加的更多相关文章
- 基于maven插件的缓存控制插件
asset-cache-control github源码及下载地址: https://github.com/StruggleBird/asset-cache-control 基于maven插件的缓存控 ...
- 基于Consul+Upsync+Nginx实现动态负载均衡
基于Consul+Upsync+Nginx实现动态负载均衡 1.Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/l ...
- 教程:动手用自己电脑搭建一个网站 (nat123 花生壳 动态域名 个人电脑做服务器)
先ps一下..今晚试了N种方法,终于找到一个靠谱 免费 好用的方法,来改装自己电脑成为服务器,在外网也能通过域名访问了!!! 需要准备的东西: Tomcat:这个是web容器,其实有了这个就已经让电脑 ...
- 携程Android App插件化和动态加载实践
携程Android App的插件化和动态加载框架已上线半年,经历了初期的探索和持续的打磨优化,新框架和工程配置经受住了生产实践的考验.本文将详细介绍Android平台插件式开发和动态加载技术的原理和实 ...
- 基于Python实现matplotlib中动态更新图片(交互式绘图)
最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和mat ...
- 携程Android App的插件化和动态加载框架
携程Android App的插件化和动态加载框架已上线半年,经历了初期的探索和持续的打磨优化,新框架和工程配置经受住了生产实践的考验.本文将详细介绍Android平台插件式开发和动态加载技术的原理和实 ...
- saltstack自动化运维系列11基于etcd的saltstack的自动化扩容
saltstack自动化运维系列11基于etcd的saltstack的自动化扩容 自动化运维-基于etcd加saltstack的自动化扩容# tar -xf etcd-v2.2.1-linux-amd ...
- dnspod 动态域名的使用。openwrt使用dnspod动态域名解析。
这里主要说的是linux shell下的使用. 先看接口说明: 接口地址: https://dnsapi.cn/Record.Ddns HTTP请求方式: POST 请求参数: 公共参数 domain ...
- windows下编译基于nginx插件的rtmp流媒体服务nginx-rtmp
1 概述 rtmp流媒体服务器,开源方案有多种,包括srs,red5,crtmpserver,fms,nginx插件等.本文描述了基于nginx插件的方式来实现rtmp流媒体服务器nginx-rtmp ...
随机推荐
- c# 爬虫(三) 文件上传
在上一篇中,我们说了模拟登录, 下面我们说说附件上传. 据说,最早的http协议是不支持附件上传的,后来有添加了一个RFC 2045 协议,才支持附件上传,关于附件上传,请参见 http://www. ...
- APN与VPDN的主要区别
VPDN APN 安全性 二次认证,加密 一次认证,没有加密 企业成本 高 低 对GGSN要求 可接受动态配置LNS参数信息,对GGSN性能影响小. 静态配置GRE隧道参数,性能影响较大,部分厂家对G ...
- C#使用WebService
一.新建webservice 新建项目→asp.net Web服务应用程序 或者在现有项目中 点击右键 新建web服务程序asmx 只要在webservice类里面 的方法 标注为[WebMethod ...
- WebDriverException: Message: 'phantomjs.exe' executable needs to be in PATH.
本文转载自:http://blog.csdn.net/sinat_36764186/article/details/55520444 网上的某测试代码: from selenium import we ...
- servlet转发与重定向
HttpServletRequest: 表示浏览器向服务器发送的请求报文,由Tomcat创建然后作为参数传递给我们doget,dopost方法. 功能:getParameter()获取请求参数 get ...
- java web 程序---注册页面核心代码哈希Map
收获:在运行程序的时候,错误出现.主要是map没有进行判断,是否为空,如果为空,则创建一个对象new HashMap(); 然后就注意细节, String name=request.getParame ...
- Java-Runoob-高级教程-实例-环境设置实例:1.Java 实例 – 如何编译一个Java 文件?
ylbtech-Java-Runoob-高级教程-实例-环境设置实例:1.Java 实例 – 如何编译一个Java 文件? 1.返回顶部 1. Java 实例 - 如何编译 Java 文件 Java ...
- 管理Linux服务器的用户和组(续篇)
用户切换 新建用户 useradd命令的选项 设置用户口令 passwd命令的选项 chage命令 修改用户帐户 禁用和恢复用户帐户 禁用和恢复用户帐户- Passwd命令 禁用和恢复用户帐户-直接修 ...
- KVC & KVO 入门
KVC: 简介: 全称 Key-Value Coding .KVC是一种间接访问对象属性(用字符串表征)的机制,而不是直接调用对象的accessor(setter/getter)方法或是直接访问成员对 ...
- Shell脚本的调试方法
Shell脚本的调试方法 Shell提供了一些用于调试脚本的选项,如下所示: -n 读一遍脚本中的命令但不执行,用于检查脚本中的语法错误 -v 一边执行脚本,一边将执行过的脚本命令打印到标 ...
