一、 总则
本文将etcd3作为coredns的后端实现动态的域名解析功能,并使用curl命令操作etcd3中的数据,实现远程添加域名域名解析的功能。
二、 安装etcd
-
使用yum安装,最简化配置,非集群安装
yum install –y etcd
-
修改配置,将/etc/etcd/etcd.conf 配置中‘ETCD_LISTEN_CLIENT_URLS’和‘ETCD_ADVERTISE_CLIENT_URLS’修改为“http://0.0.0.0:2379”
vim /etc/etcd/etcd.conf
-
启动etcd
systemctl start etcd
三、 安装coredns
-
下载coredns二进制版本:https://github.com/coredns/coredns/releases
-
解压安装:
tar zxvf coredns_1.3.0_linux_amd64.tgz mv coredns /usr/bin mkdir /etc/coredns
-
添加主配置文件/etc/coredns/Corefile
vim /etc/coredns/Corefile
.:53 { # 监听tcp和udp的53端口 etcd { # 配置启用etcd插件,后面可以指定域名,例如 etcd test.com { stubzones # 启用存根区域功能。 stubzone仅在位于指定的第一个区域下方的etcd树中完成 path /skydns # etcd里面的路径 默认为/skydns,以后所有的dns记录就是存储在该存根路径底下 endpoint http://localhost:2379 # etcd访问地址 # upstream设置要使用的上游解析程序解决指向外部域名的在etcd(认为CNAME)中找到的外部域名。 upstream 8.8.8.8:53 8.8.4.4:53 /etc/resolv.conf fallthrough # 如果区域匹配但不能生成记录,则将请求传递给下一个插件 # tls CERT KEY CACERT # 可选参数,etcd认证证书设置 } prometheus # 监控插件 cache 160 loadbalance # 负载均衡,开启DNS记录轮询策略 proxy . 8.8.8.8:53 8.8.4.4:53 /etc/resolv.conf # 上面etcd未查询到的请求转发给设置的DNS服务器解析 log # 打印日志 }
-
启动coredns
nohup /usr/bin/coredns -conf /etc/coredns/Corefile > /tmp/coredns.log 2>&1 &
四、 etcdctl设置域名解析
-
coredns只能使用etcd v3版本api添加的数据,etcdctl命令默认使用v2版本api,设置v3 api方法:
export ETCDCTL_API=3
或者添加以下内容到环境变量 vim ~/.bash_profile:
export ETCDCTL_API=3
-
通过etcdctl设置域名解析:
(1)A记录
etcdctl put /skydns/com/test6/www ‘{“host”:”1.1.1.1”}’
解析:
dig @localhost +short www.test6.com
(2)AAAA记录
etcdctl put /skydns/com/test6/aaaa '{"host":"32:68::d"}'
解析:
dig -t AAAA @解析ip +short aaaa.test6.com
(3)TXT记录
etcdctl put /skydns/com/test6/txt '{"text":"This is txt"}'
解析:
dig -t txt @localhost +short txt.test6.com
(4)MX记录
etcdctl put /skydns/com/test6/mail '{"host":"192.168.19.5", "mail":true}'
解析:
dig -t mx @localhost +short mail.test6.com
-
查看etcd中数据
etcdctl get /skydns/com/test6/www
#查询对应数据
etcdctl get /skydns --prefix
#查看以”/skydns”为开头的数据
五、 通过curl设置域名解析
注意:通过curl和postman向etcd3中导入数据,并通过域名解析,必须使用base64编码
-
准备key值和value值的base64编码
key值(/skydns/com/last/www):
value值(A记录:{"host":"123.123.132.123"},AAAA记录:{"host":"32::32:d:43"},TXT记录:{"txt":"This is txt"}, MX记录:{"host":"123.123.132.123","mail":true})
-
将生成的base64编码导入etcd,在“ip:port”与“kv”之间的信息要根据etcd3的版本进行分别设置,具体如图(
curl -d '{"key":"key值base64编码","value":"value值base64编码"}' -X POST http://127.0.0.1:2379/v3alpha/kv/put)
:
-
解析(相对文件位置倒着排列到skydns文件夹之前,具体解析方式参考第四节):
dig @ip +short www.last.com
-
curl查询
公式:curl -d '{"key":"key值base64编码"}' -X POST http://ip:port/v3alpha/kv/range