CoreDNS搭建内网DNS服务

发布时间 2023-06-09 10:15:35作者: 技术颜良

 

2022年02月16日 23:57 ·  阅读 1502

「这是我参与2022首次更文挑战的第30天,活动详情查看:2022首次更文挑战

1. 背景

因为自己有在开发一个聊天的服务,注册中心设计参考了RocketMQ的NameServer。注册中心都是单独部署,注册中心和注册中心之间没有数据交互。注册中心只有和接入服务和消息服务有交互。也就是每个注册中心都链接所有的接入服务和消息服务。通过心跳协议维持连接:

image.png

但是这样存在一个问题,例如我新增一个注册中心,在不停机的情况下只有在注册中心新增后新增的接入服务和消息处理服务才可能将信息同步到注册中心,前面的接入服务和消息处理服务就注册中心的IP是写死在配置文件没有做动态加载(动态加载也会很麻烦需要修改每台机器部署的服务的注册中心IP地址)。然后就想到DNS,DNS拥有域名和IP对应关系,只需要确定好注册中心的域名,然后获取到DNS中域名对应的IP地址就可以实现动态的将接入服务和消息处理服务动态的同步到新增的注册中心:

image.png

由于我这个是一个内网的域名服务,所以DNS服务需要自己搭建,在研究Nacos的时候发现了一个CoreDNS的域名服务。然后通过研究发现CoreDNS可以作为一个内网自建的域名服务,同时在K8s有应用。

2. CoreDNS安装

安装有两种方式:

  • 直接下载编译好的压缩包

    下载地址:github.com/coredns/cor…

    这种方式就是不关心自定义插件的开发,只是想搭建一个环境比较适合

  • 源码编译

    通过源码编译安装,下面来讲这种方式

2.1 本地源码编译

CoreDNS用Go编写,所以在编译之前确保已经安装了GO的开发环境

GO的版本需要大于1.17

从Github上面Check out下来项目,然后使用 make 编译项目:

 
shell
复制代码
$ git clone https://github.com/coredns/coredns
$ cd coredns
$ make

2.2 Docker编译

 
shell
复制代码
$ docker run --rm -i -t -v $PWD:/v -w /v golang:1.17 make

golang的Docker镜像版本可以选择

3. 配置例子

3.1 官方版Hello Word配置

根据官网的直接启动

 
shell
复制代码
$ ./coredns

image.png

查询CoreDNS 服务:

 
shell
复制代码
dig @127.0.0.1 -p 53 www.example.com

image.png 解析成功。

3.2 自定义域名解析

配置文件放在和 coredns 命令相同的 Corefile 文件中

语法:

 
arduino
复制代码
# define a snippet
(snip) {
    prometheus
    log
    errors
}

. {
    whoami
    import snip
}

自定义配置:

 
lua
复制代码
. {
    forward . 8.8.8.8
}
mxsm.local {
	file mxsm.local { 
        reload 30s 
    }
}

配置一个mxsm.local文件:

 
lua
复制代码
@                       IN SOA   mxsm.local. devops.mxsm.local. (
                                     20200202 ; SERIAL
                                     7200     ; REFRESH
                                     600      ; RETRY
                                     3600000  ; EXPIRE
                                     60)      ; MINIMUM
@                       IN NS    dns1.mxsm.local.   
mxsm.local.             IN A     192.168.43.128         


redis.mxsm.local.         IN A     192.168.43.128
mysql.mxsm.local.         IN A     192.168.43.128
elasticsearch.mxsm.local. IN A     192.168.43.128
ftp                          IN A     192.168.43.128 

重新运行coredns服务,验证:

image.png

外网解析验证

image.png

到这里就搭建完成了

我是蚂蚁背大象,文章对你有帮助点赞关注我,文章有不正确的地方请您斧正留言评论~谢谢!

参考文档: