CoreDNS实战(二)-CoreDNS+ETCD实现DNS服务发现

1 引言

在前面的文章中讲了如何搭建一个内网的DNS服务,但是这里有个问题,mxsm-register.local表示局域网的注册中心域名,如果需要将每台部署了注册中心的IP地址写到CoreDNS的配置文件中。这样就需要每次都去修改 Corefile 配置文件。那有没有一种方式在服务启动后自动将注册中心所在机器的IP与mxsm-register.local进行绑定,注册中心下线对应的IP也从DNS服务器删除。下面就来讲一下如何利用CoreDNS+etcd来实现这个功能。

2 CoreDNS etcd 插件

CoreDNS 是一个高度灵活插件化的一个组件,其本身提供了很多插件官方的插件,同时也允许开发者进行插件的拓展。要实现上述的功能这里依赖了一个叫做 etcd插件 ,这个插件有如下功能:实现了SkyDNS服务发现,它不适合作为一个通用的DNS区域数据插件。只实现了DNS记录类型的一个子集。

配置语法:

复制代码
etcd [ZONES...] {
    fallthrough [ZONES...]
    path PATH
    endpoint ENDPOINT...
    credentials USERNAME PASSWORD
    tls CERT KEY CACERT
}
  • fallthrough: 如果区域匹配但没有记录可以生成,将请求传递给下一个插件
  • path: etcd中的路径,默认值/skydns
  • endpoint: etcd endpoint
  • credentials: etcd的用户名和密码
  • tls: CA

3 部署搭建

3.1 环境准备

这两个是前置条件。

3.2 配置文件

这里使用之前的CoreDNS实战(一)-构建高性能、插件化的DNS服务器-CSDN博客里面的配置进行修改,Corefile 文件:

复制代码
. {
    forward . 8.8.8.8
}
mxsm.local {
	file mxsm.local { 
        reload 30s 
    }
}
etcd-mxsm.local:53 {
 etcd {
        path /mxsm
        endpoint http://172.22.50.98:2379   --- 这里根据自己的etcd部署进行填写
    }
}

启动CoreDNS进行验证。

3.3 etcd key值说明

etcd插件利用目录结构查询相关条目,已上面的 etcd-mxsm.local 为例,配置的etcd的path为 /mxsm , 上面的条目就是如下:/mxsm/local/etcd-mxsm//mxsm/local/etcd-mxsm/x/mxsm/local/etcd-mxsm/b 等等。这种情况下就是查询 etcd-mxsm.local

3.4 验证

利用 etcdctl 命令put:

复制代码
$./etcdctl put /mxsm/local/etcd-mxsm/ '{"host":"172.22.50.28","ttl":60}'
$./etcdctl put /mxsm/local/etcd-mxsm/1 '{"host":"172.22.50.128","ttl":60}'
$./etcdctl put /mxsm/local/etcd-mxsm/2 '{"host":"172.22.50.228","ttl":60}'

然后用 dig 进行验证:

复制代码
$ dig @127.0.0.1 a etcd-mxsm.local +short
172.22.50.28
172.22.50.128
172.22.50.228
相关推荐
蜡笔小炘5 小时前
LVS -- 利用防火墙标签(FireWall Mark)解决轮询错误
服务器·数据库·lvs
韩立学长5 小时前
基于Springboot泉州旅游攻略平台d5h5zz02(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·旅游
Re.不晚6 小时前
MySQL进阶之战——索引、事务与锁、高可用架构的三重奏
数据库·mysql·架构
老邓计算机毕设6 小时前
SSM智慧社区信息化服务平台4v5hv(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·智慧社区、·信息化平台
麦聪聊数据6 小时前
为何通用堡垒机无法在数据库运维中实现精准风控?
数据库·sql·安全·低代码·架构
2301_790300966 小时前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
m0_736919106 小时前
用Pandas处理时间序列数据(Time Series)
jvm·数据库·python
亓才孓6 小时前
[JDBC]PreparedStatement替代Statement
java·数据库
m0_466525297 小时前
绿盟科技风云卫AI安全能力平台成果重磅发布
大数据·数据库·人工智能·安全
爱学习的阿磊8 小时前
使用Fabric自动化你的部署流程
jvm·数据库·python