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