使用CoreDNS作為你的內網DNS服務器


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

 

.: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

 

二進制文件+配置文件就能跑了,部署起來非常簡單

5. 參考

CoreDNS 使用與架構分析

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM