當前位置:股票大全官網 - 基金投資 - 09-kubernetes中的域名解析流程

09-kubernetes中的域名解析流程

從Kubernetes 1.11版本開始,Kubernetes集群的DNS服務由CoreDNS提供。CoreDNS是CNCF基金會的壹個項目,是壹個用Go語言實現的高性能、插件式、易擴展的DNS服務器。CoreDNS解決了KubeDNS的壹些問題,比如dnsmasq的安全漏洞,externalName不能設置stubDomains等等。

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