重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
本篇文章給大家分享的是有關如何理解CoreDNS作為kubernetes后端的DNS服務器,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
創新互聯公司是專業的襄城網站建設公司,襄城接單;提供網站制作、成都網站制作,網頁設計,網站設計,建網站,PHP網站建設等專業做網站服務;采用PHP框架,可快速的進行襄城網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,專業的做網站團隊,希望更多企業前來合作!
coredns之所以如此名聲大噪,就是因為從kubernetes1.9開始引入,作為kubernetes內部服務發現的默認dns。毫無疑問kubernetes是coredns的后端之一,所以我們講coredns,就從kubernetes作為其后端開始。 |
coredns的諸多特性網上很多文章都有提及,在這里不再贅述。簡單對比下其相對于bind和skydns的優勢:
bind可以將解析存儲到MySQL或者文件中,coredns也可以將解析存儲到etcd或者文件中,也支持將kubernetes作為其后端,直接調用kubernetes的api獲取解析數據,然后緩存到本地內存。coredns支持插件擴展,目前在第三方插件中還同時支持將powerdns及amazondns作為其后端,后續還會支持越來越來的后端。bind在kubernetes的應用場景下,基本無用武之地。
coredns本身就是skydns的繼任者,支持skydns的所有特性,而且性能更好,更易于擴展。其插件式特性無論是bind還是skydns都無法比擬。
coredns官方網站地址: https://coredns.io
coredns代碼地址: https://github.com/coredns/coredns
coredns官方插件地址: https://coredns.io/plugins
coredns第三方插件地址: https://coredns.io/explugins/
配置kubernetes后端存儲
配置說明
其實官方有kubernetes插件的相關示例及配置說明,地址如下: https://coredns.io/plugins/kubernetes/
我這里就以官方的配置示例作說明:
kubernetes [ZONES...] { resyncperiod DURATION endpoint URL [URL...] tls CERT KEY CACERT namespaces NAMESPACE... labels EXPRESSION pods POD-MODE endpoint_pod_names upstream [ADDRESS...] ttl TTL fallthrough [ZONES...] }
下面對一些常用參數作下說明:
resyncperiod: 用于從kubernetes的api同步數據的時間間隔
endpoint: 指定kubernetes的api地址,coredns會自動對其執行健康檢查并將請求代理到健康的節點上。示例如下:
endpoint https://10.1.61.129:6443 https://10.1.61.130:6443
tls: 用于指定連接遠程kubernetes api的相關證書。示例:
tls admin.pem admin-key.pem ca.pem
pods: 指定POD-MODE,有以下三種:
disabled:默認
insecure:返回一個A記錄對應的ip,但并不會檢查這個ip對應的Pod當前是否存在。這個選項主要用于兼容kube-dns
verified:推薦的方式,返回A記錄的同時會確保對應ip的pod存在。比insecure會消耗更多的內存。
upstream: 定義外部域名解析轉發的地址,可以是一個ip地址,也可以是一個resolv.conf文件。示例:
upstream 8.8.8.8:53 8.8.4.4:53
ttl: 默認5s,最大3600s
示例
一個完整的配置示例:
# /opt/coredns/cfg/Corefile .:53 { kubernetes wh01 { resyncperiod 10s endpoint https://10.1.61.175:6443 tls admin.pem admin-key.pem ca.pem pods verified endpoint_pod_names upstream /etc/resolv.conf } health log /var/log/coredns.log prometheus :9153 proxy . /etc/resolv.conf cache 30 reload 10s }
也可以使用如下寫法:
wh01 { kubernetes { resyncperiod 10s endpoint https://10.1.61.129:6443 tls admin.pem admin-key.pem ca.pem pods verified endpoint_pod_names upstream /etc/resolv.conf } health log errors prometheus :9153 proxy . /etc/resolv.conf cache 30 reload 10s }
其他配置也簡單作下說明:
health:插件,用于檢測當前配置是否存活,默認監聽http 8080端口,可配置
log: 插件,將日志打印到標準輸出
errors:將錯誤打印到標準輸出
prometheus: 插件,用于prometheus監控
proxy: wh01之外的域名解析都通過proxy指定的地址實現代理
cache: 插件,用于在內存中緩存dns解析,單位為s
reload: 插件,單位為s,如果配置文件發生變更,自動reload的間隔
啟動coredns
nohup /opt/coredns/bin/coredns -conf /opt/coredns/cfg/Corefile &
使用systemd啟動coredns
# cat /lib/systemd/system/coredns.service [Unit] Description=CoreDNS Documentation=https://coredns.io [Service] ExecStart=/opt/coredns/bin/coredns \ -conf /opt/coredns/cfg/Corefile Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.targe
# systemctl start coredns # systemctl enable coredns
以上就是如何理解CoreDNS作為kubernetes后端的DNS服務器,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創新互聯行業資訊頻道。