CoreDNS
CoreDNS是Golang编写的一个插件式DNS服务器,是Kubernetes 1.13 后所内置的默认DNS服务器
采用的开源协议为Apache License Version 2
CoreDNS也是CNCF孵化项目,目前已经从CNCF毕业。
CoreDNS 的目标是成为 Cloud Native(云原生)环境下的 DNS 服务器和服务发现解决方案。
官方口号
CoreDNS: DNS and Service Discovery
DNS和服务发现
CoreDNS是一个DNS服务器,和Caddy Server具有相同的模型:它链接插件。CoreDNS是云本土计算基金会启动阶段项目。
CoreDNS是SkyDNS的继任者。 SkyDNS是一个薄层,暴露了DNS中的etcd中的服务。
CoreDNS建立在这个想法上,是一个通用的DNS服务器,可以与多个后端(etcd,kubernetes等)进行通信。
CoreDNS旨在成为一个快速灵活的DNS服务器。 这里的关键灵活指的是:
使用CoreDNS,您可以使用DNS数据进行所需的操作。 还可以自已写插件来实现DNS的功能。
CoreDNS可以通过UDP / TCP(旧式的DNS),TLS(RFC 7858)和gRPC(不是标准)监听DNS请求。
官网 : CoreDNS: DNS and Service Discovery
开源地址 : github.com
实战 DNS服务器
1 ## 下载镜像
https://github.com/coredns/coredns/releases
2 ## 上传 解压 检测版本
tar xf coredns_1.11.3_linux_amd64.tgz
[root@docker03 ~]# ./coredns -version
CoreDNS-1.11.3
linux/amd64, go1.21.11, a6338e9
3 ## 创建目录 写入规则文件
mkdir /etc/coredns/
vim /etc/coredns/corefile
.:53 {
# 绑定interface ip
bind 0.0.0.0
# 先走本机的hosts
# https://coredns.io/plugins/hosts/
hosts {
# 自定义sms.service search.service 的解析
# 因为解析的域名少我们这里直接用hosts插件即可完成需求
# 如果有大量自定义域名解析那么建议用file插件使用 符合RFC 1035规范的DNS解析配置文件
10.0.0.101 abc
172.16.1.101 aaa
# 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
}
4. # 编写systemd 配置文件 (可有可无)
vim /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=root
ExecStart=/usr/sbin/coredns -conf=/etc/coredns/corefile
ExecReload=/bin/kill -SIGUSR1 $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
5.# 更改本地的dns解析地址(本机地址都可以 localhost无效)
vim /etc/resolv.conf
# Generated by NetworkManager
nameserver 127.0.0.1
nameserver 223.5.5.5
6.#启动 检测
systemctl daemon-reload
systemctl start coredns
systemctl enable coredns
[root@docker03 coredns]# netstat -lntup | grep :53
tcp6 0 0 :::53 :::* LISTEN 29563/coredns
udp6 0 0 :::53 :::* 29563/coredns
udp6 0 0 :::53 :::* 29761/coredns
ping aaa
[root@docker03 coredns]# ping aaa
PING aaa (172.16.1.101) 56(84) bytes of data.
64 bytes from aaa (172.16.1.101): icmp_seq=2 ttl=64 time=0.248 ms
##### 服务端配置 写在同一局域网内的IP
## 编辑dns文件
vim /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.0.104
nameserver 223.5.5.5
## 检测
[root@docker01 ~]# ping aaa
PING aaa (172.16.1.101) 56(84) bytes of data.
64 bytes from aaa (172.16.1.101): icmp_seq=1 ttl=64 time=0.021 ms
64 bytes from aaa (172.16.1.101): icmp_seq=2 ttl=64 time=0.034 ms