dns service 介紹_Kubernetes中文社群
kube-dns 是 kubernetes 基於 DNS 的服務發現模組,主要由三個容器組成,分別是 dnsmasq, kube-dns, sidecar,整體的結構如圖。
sidecar
sidecar 是一個監控健康模組,同時向外暴露metrics 記錄,但是為啥叫三蹦子不知道。
接受的探測引數是
--probe=<label>,<server>,<dnsname>[,<interval_seconds>][,<type>]
例子如下
--probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,A
等於是每隔 5s 向127.0.0.1:53 進行 DNS 查詢 kubernetes.default.svc.cluster.local 的 A 記錄
對應的結構體是
dnsmasq
dnsmasq-nanny 是 dnsmasq 的保姆程序,dnsmasq 是一個簡易的 DNS server。
dnsmasq-nanny “–” 後面是 dnsmasq 的引數,比如下面這個引數表示的是把 server=/cluster.local/127.0.0.1#10053
當作 dnsmasq 的配置,10053 是 kube-dns 的地址,也就是把 cluster.local 的域名攔截轉到 kube-dns 進行解析,剩下的通過正常的域名解析流程。
--server=/cluster.local/127.0.0.1#10053
dnsmasq 簡單來說扮演的是叢集當中的一個傳統 dns server 並且把叢集內部的 dns 查詢攔截到 kube-dns 當中通過中心化的方法進行 dns 查詢,叢集的 dns 查詢主要依靠 kube-dns。
kube-dns
kube-dns 主要基於 skydns 來實現。
在 k8s.io/dns/pkg/dns/dns.go
的 KubeDNS.Start
下面有 endpoints 和 services 的 controllers,會把 service 註冊到 kube-dns 的 cache 當中 (k8s.io/dns/pkg/dns/treecache),這裡有 k8s 域名命名
主要的實現方式是 skydns 接受一個後端實現。
KubeDNS.Records
KubeDNS.ReverseRecord
基於 TreeCache 實現 DNS 記錄儲存的後端,從而使得 skydns 提供 DNS 服務。
總結
整體來說 kube-dns 還是一個比較簡單的模組,基於 kube-apiserver 的一個控制器,提供中心化的 DNS 查詢。