0%

使用CoreDNS作为你的内网DNS服务器 - 老虎逛大街 - 博客园

Excerpt

  1. CoreDNS 是什么 CoreDNS官网CoreDNS开源 CoreDNS是Golang编写的一个插件式DNS服务器,是Kubernetes 1.13 后所内置的默认DNS服务器采用的开源协议为Apache License Version 2CoreDNS也是CNCF孵化项目,目前已经从CN

1. CoreDNS 是什么

img
CoreDNS官网
CoreDNS开源

CoreDNS是Golang编写的一个插件式DNS服务器,是Kubernetes 1.13 后所内置的默认DNS服务器
采用的开源协议为Apache License Version 2
CoreDNS也是CNCF孵化项目,目前已经从CNCF毕业。
CoreDNS 的目标是成为 Cloud Native(云原生)环境下的 DNS 服务器和服务发现解决方案。
你被爬虫啦,原文去https://www.iamle.com看
官方口号
CoreDNS: DNS and Service Discovery
DNS和服务发现

2. CoreDNS功能特性

2.1 插件化(Plugins)

CoreDNS插件链。 每个插件都执行DNS功能,例如Kubernetes服务发现,Prometheus指标或重写查询。
还有非常多的其他插件,插件是CoreDNS核心理念就是插件化

简单(Simplicity)

努力把配置文件变得简单
采用了Caddy中的DSL配置方案,即 Corefile 形式的配置文件
一个最简单的配置文件可以为:

2.2 服务发现 (Service Discovery)

核心域名系统通过Kubernetes插件与Kubernetes集成,或者通过etcd插件直接与etcd集成。
还有redis插件等

快速和弹性 ( Fast and Flexible)

我们的目标是使CoreDNS快速高效。 它的插件也很灵活。 您可以只使用所需的插件编译CoreDNS。

3. 配置一个内网自定义的服务化域名

假设需要在内网实现
sms.service A记录 10.6.6.2
search.service A记录 10.6.6.3
你被爬虫啦,原文去https://www.iamle.com看
我们为CoreDNS手动增加解析记录
那么Corefile配置文件为
/etc/coredns/Corefile

复制代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<span>.:</span><span>53</span><span> {
# 绑定interface ip
bind </span><span>127.0</span>.<span>0.1</span><span>
# 先走本机的hosts
# https:</span><span>//</span><span>coredns.io/plugins/hosts/</span>
<span> hosts {
# 自定义sms.service search.service 的解析
# 因为解析的域名少我们这里直接用hosts插件即可完成需求
# 如果有大量自定义域名解析那么建议用file插件使用 符合RFC 1035规范的DNS解析配置文件
</span><span>10.6</span>.<span>6.2</span><span> sms.service
</span><span>10.6</span>.<span>6.3</span><span> search.service
# ttl
ttl </span><span>60</span><span>
# 重载hosts配置
reload 1m
# 继续执行
fallthrough
}
# </span><span>file</span> enables serving zone data from an RFC <span>1035</span>-style master <span>file</span><span>.
# https:</span><span>//</span><span>coredns.io/plugins/file/</span>
# <span>file</span><span> service.signed service
# 最后所有的都转发到系统配置的上游dns服务器去解析
forward . </span>/etc/<span>resolv.conf
# 缓存时间ttl
cache </span><span>120</span><span>
# 自动加载配置文件的间隔时间
reload 6s
# 输出日志
log
# 输出错误
errors
}</span>

复制代码

运行CoreDNS

dig测试CoreDNS的自定义dns解析

复制代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<span>dig @</span><span>127.0</span>.<span>0.1</span><span>  sms.service

; </span>&lt;&lt;&gt;&gt; DiG <span>9.10</span>.<span>6</span> &lt;&lt;&gt;&gt; @<span>127.0</span>.<span>0.1</span><span> sms.service
; (</span><span>1</span><span> server found)
;; global options: </span>+<span>cmd
;; Got answer:
;; </span>-&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, <span>id</span>: <span>18343</span><span>
;; flags: qr aa rd; QUERY: </span><span>1</span>, ANSWER: <span>1</span>, AUTHORITY: <span>0</span>, ADDITIONAL: <span>1</span><span>
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: </span><span>0</span>, flags:; udp: <span>4096</span><span>
;; QUESTION SECTION:
;sms.service. IN A

;; ANSWER SECTION:
sms.service. </span><span>120</span> IN A <span>10.6</span>.<span>6.2</span><span>

;; Query </span><span>time</span>: <span>0</span><span> msec
;; SERVER: </span><span>127.0</span>.<span>0.1</span>#<span>53</span>(<span>127.0</span>.<span>0.1</span><span>)
;; WHEN: Wed May </span><span>01</span> <span>22</span>:<span>23</span>:<span>51</span> CST <span>2019</span><span>
;; MSG SIZE rcvd: </span><span>67</span>

复制代码

 可以看到 sms.service 的A记录已经为10.6.6.2

更多配置探索参考CoreDNS官方手册

4. 部署

这里可以找到基于k8s,基于systemd的部署文件参考
CoreDNS部署参考

安装

1
2
<span>wget</span> https:<span>//</span><span>github.com/coredns/coredns/releases/download/v1.5.0/coredns_1.5.0_linux_amd64.tgz</span>
<span>tar</span> zxf coredns_1.<span>5</span>.0_linux_amd64.tgz -C /usr/bin/

增加运行账户

1
2
useradd coredns -s /sbin/<span>nologin
useradd coredns </span>-s /sbin/nologin

systemd的coredns配置文件
/usr/lib/systemd/system/coredns.service

复制代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<span>[Unit]
Description</span>=<span>CoreDNS DNS server
Documentation</span>=https:<span>//</span><span>coredns.io</span>
After=<span>network.target

[Service]
PermissionsStartOnly</span>=<span>true</span><span>
LimitNOFILE</span>=<span>1048576</span><span>
LimitNPROC</span>=<span>512</span><span>
CapabilityBoundingSet</span>=<span>CAP_NET_BIND_SERVICE
AmbientCapabilities</span>=<span>CAP_NET_BIND_SERVICE
NoNewPrivileges</span>=<span>true</span><span>
User</span>=<span>coredns
WorkingDirectory</span>=~<span>
ExecStart</span>=/usr/bin/coredns -conf=/etc/coredns/<span>Corefile
ExecReload</span>=/bin/<span>kill</span> -<span>SIGUSR1 $MAINPID
Restart</span>=on-<span>failure

[Install]
WantedBy</span>=multi-user.target

复制代码

1
2
3
<span>systemctl enable coredns
systemctl start coredns
systemctl status coredns</span>

实际上CoreDNS编译出来的是一个单二进制文件

二进制文件+配置文件就能跑了,部署起来非常简单

5. 参考

CoreDNS 使用与架构分析

https://www.iamle.com/archives/2679.html