使用CoreDNS作为你的内网DNS服务器 - 老虎逛大街 - 博客园
Excerpt
CoreDNS 是什么 CoreDNS官网CoreDNS开源 CoreDNS是Golang编写的一个插件式DNS服务器,是Kubernetes 1.13 后所内置的默认DNS服务器采用的开源协议为Apache License Version 2CoreDNS也是CNCF孵化项目,目前已经从CN
1. CoreDNS 是什么 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><<>> DiG <span>9.10</span>.<span>6</span> <<>> @<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>->>HEADER<<- 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