CoreDNS支持用戶自定義DNS記錄和配置上遊DNS服務器,可以統壹管理Kubernetes基於服務的內部DNS和數據中心物理DNS。
CoreDNS不使用多容器的架構,只用壹個容器實現KubeDNS中三個容器的所有功能。
從kubernetes官方提供的coredns.yml文件不難看出,coredns服務配置至少需要三個資源對象:壹個ConfigMap、壹個Deployment和壹個service * * *。ConfigMap coredns的主配置文件Corefile的內容:
分析配置主要有兩個地方。
1.這種配置意味著後綴為cluster.local的域名都是kubernetes的內部域名,coredns會監控服務的變更來修改域名記錄。
2.如果coredns沒有找到dns記錄,請轉到/etc/resolv.conf中的名稱服務器進行解決。
接下來,使用帶有nslookup工具的Pod來驗證DNS服務是否可以正常工作:
通過nslookup進行測試。
找到默認名稱空間中存在的ng-deploy-80服務。
如果壹個服務屬於不同的命名空間,那麽在搜索該服務時需要補充命名空間的名稱,形成壹個完整的域名。讓我們以搜索kubernetes-dashboard服務為例。
眾所周知,DNS服務器是用來將域名轉換成IP的(具體建議復習下7層網絡模型進行轉換)。Linux服務器中的DNS解析配置位於/etc/resolv.conf,在Pod中也不例外。
壹次可以設置壹個Pod的DNS策略。目前,kubernetes支持這4個DNS策略。
如果我們不填寫dnsPolicy,默認策略是ClusterFirst。
當kubelet啟動暫停容器時,它會將其DNS解析配置初始化為集群內的配置。配置:它的名稱服務器指向coredns。
k8s中有四種DNS策略,coredns使用的DNS策略是Default,也就是在主機上繼承/etc/resolve.conf,所以coredns Pod中/etc/resolve.conf的內容就是主機上的內容。
當集群中的pod使用svc名稱相互訪問時,將根據resolv.conf文件的DNS配置解析域名。我們來分析壹下具體過程。
pod的resolv.conf文件主要由三部分組成,分別是名稱服務器、搜索和選項。這三部分可以由K8s指定,也可以由pod.spec.dnsConfig字段自定義。
名稱服務器
resolv.conf文件的第壹行nameserver指定了DNS服務的IP,它是coreDNS的。
集群IP:
也就是說,所有的域名,無論是內部的還是外部的,都必須通過coreDNS的虛擬IP 10.100.0.2來解析。
搜索域
resolv.conf文件的第二行指定DNS搜索域。解析域名時,將待訪問的域名依次帶入搜索域進行DNS查詢。
比如我想訪問剛才那個pod中域名為ng-deploy-80的服務,DNS域名查詢的順序是:
選擇
resolv.conf文件的第三行指定了其他項目,其中最常見的是dnots。Dnots表示如果查詢的域名包含少於5個點“.”,會先用搜索域,再用絕對域名;如果查詢的域名包含大於等於5分,則先使用絕對域名,再使用搜索域。K8s的默認配置是5。
也就是說,如果我訪問a.b.c.e.f.g,域名搜索順序如下:
通過svc訪問
在K8s中,PODs通過svc訪問時,會通過DNS域名解析,然後獲得ip通信。而K8s的域名叫做“
涉及
(1)K8s登陸練習服務發現(CoreDNS)
/post/6844903965520297991
(4)4)Kubernetes集群DNS服務的發現原理。
/article/779121
(5)分析5)Kubernetes的服務發現和域名解析過程。
/p/80ad7ff37744