kuberneteskube-dnsservice介紹

店家小二發表於2018-12-14

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.goKubeDNS.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 查詢。

本文轉自kubernetes中文社群-kubernetes kube-dns service 介紹