使用CoreDNS作为你的内网DNS服务器
1. 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
.:53 { # 绑定interface ip bind 127.0.0.1 # 先走本机的hosts # https://coredns.io/plugins/hosts/ hosts { # 自定义sms.service search.service 的解析 # 因为解析的域名少我们这里直接用hosts插件即可完成需求 # 如果有大量自定义域名解析那么建议用file插件使用 符合RFC 1035规范的DNS解析配置文件 10.6.6.2 sms.service 10.6.6.3 search.service # ttl ttl 60 # 重载hosts配置 reload 1m # 继续执行 fallthrough } # file enables serving zone data from an RFC 1035-style master file. # https://coredns.io/plugins/file/ # file service.signed service # 最后所有的都转发到系统配置的上游dns服务器去解析 forward . /etc/resolv.conf # 缓存时间ttl cache 120 # 自动加载配置文件的间隔时间 reload 6s # 输出日志 log # 输出错误 errors }
运行CoreDNS
coredns -conf ./Corefile
dig测试CoreDNS的自定义dns解析
dig @127.0.0.1 sms.service ; <<>> DiG 9.10.6 <<>> @127.0.0.1 sms.service ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18343 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;sms.service. IN A ;; ANSWER SECTION: sms.service. 120 IN A 10.6.6.2 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Wed May 01 22:23:51 CST 2019 ;; MSG SIZE rcvd: 67
可以看到 sms.service 的A记录已经为10.6.6.2
更多配置探索参考CoreDNS官方手册
4. 部署
这里可以找到基于k8s,基于systemd的部署文件参考
CoreDNS部署参考
安装
wget https://github.com/coredns/coredns/releases/download/v1.5.0/coredns_1.5.0_linux_amd64.tgz tar zxf coredns_1.5.0_linux_amd64.tgz -C /usr/bin/
增加运行账户
useradd coredns -s /sbin/nologin
useradd coredns -s /sbin/nologin
systemd的coredns配置文件
/usr/lib/systemd/system/coredns.service
[Unit] Description=CoreDNS DNS server Documentation=https://coredns.io After=network.target [Service] PermissionsStartOnly=true LimitNOFILE=1048576 LimitNPROC=512 CapabilityBoundingSet=CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_BIND_SERVICE NoNewPrivileges=true User=coredns WorkingDirectory=~ ExecStart=/usr/bin/coredns -conf=/etc/coredns/Corefile ExecReload=/bin/kill -SIGUSR1 $MAINPID Restart=on-failure [Install] WantedBy=multi-user.target
systemctl enable coredns
systemctl start coredns
systemctl status coredns
实际上CoreDNS编译出来的是一个单二进制文件
二进制文件+配置文件就能跑了,部署起来非常简单
5. 参考
https://www.iamle.com/archives/2679.html