亚洲国产精品无码久久久,偷拍,清纯,欧美,久久精品,亚洲av成人综合网,亚洲av亚洲福利在线观看,午夜一区二区三区亚洲影院电影网

09-kubernetes中的域名解析流程

時間:2023-03-22 15:56
瀏覽:717
(簡述域名解析的過程)從Kubernetes 1.11版本開始,Kubernetes集群的DNS服務由CoreDNS提供。CoreDNS是CNCF基金會的一個項目,是用Go語言實現(xiàn)的高性能、插件式、易擴展的DNS服務端。CoreDNS解決了KubeDNS的一些問

09-kubernetes中的域名解析流程

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

CoreDNS支持自定義DNS記錄及配置upstream DNS Server,可以統(tǒng)一管理Kubernetes基于服務的內(nèi)部DNS和數(shù)據(jù)中心的物理DNS。

CoreDNS沒有使用多個容器的架構,只用一個容器便實現(xiàn)了KubeDNS內(nèi)3個容器的全部功能。

從kubernetes官方提供的 coredns.yml 文件中,不難看出coredns服務配置至少需要一個ConfigMap、一個Deployment和一個Service共3個資源對象。ConfigMap coredns 主要配置文件Corefile的內(nèi)容:

其中主要有二個地方來解析配置

1、這段配置的意思是cluster.local后綴的域名都是kubernetes內(nèi)部域名,coredns會監(jiān)控service的變化來修改域名的記錄

2、如果coredns沒有找到dns記錄,則去找 /etc/resolv.conf 中的 nameserver 解析

接下來使用一個帶有nslookup工具的Pod來驗證DNS服務能否正常工作:

通過nslookup進行測試。

查找defaul命名空間存在的ng-deploy-80服務

如果某個Service屬于不同的命名空間,那么在進行Service查找時,需要補充Namespace的名稱,組合成完整的域名。下面以查找kubernetes-dashboard服務為例,

眾所周知, DNS 服務器用于將域名轉(zhuǎn)換為 IP (具體為啥要轉(zhuǎn)換建議復習下 7 層網(wǎng)絡模型). Linux 服務器中 DNS 解析配置位于 /etc/resolv.conf , 在 Pod 中也不例外,

DNS 策略可以逐個 Pod 來設定。當前kubernetes支持這4中DNS 策略

如果我們不填dnsPolicy, 默認策略就是 ClusterFirst 。

kubelet 在起 pause 容器的時候,會將其 DNS 解析配置初始化成集群內(nèi)的配置。配置: 它的 nameserver 就是指向 coredns 的

k8s里面有4種DNS策略, 而coredns使用的DNS策略就是Default, 這個策略的意思就是繼承宿主機上的/etc/resolve.conf, 所以coredns Pod 里面的/etc/resolve.conf 的內(nèi)容就是宿主機上的內(nèi)容。

在集群中 pod 之間互相用 svc name 訪問的時候,會根據(jù) resolv.conf 文件的 DNS 配置來解析域名,下面來分析具體的過程。

pod 的 resolv.conf 文件主要有三個部分,分別為 nameserver、search 和 option。而這三個部分可以由 K8s 指定,也可以通過 pod.spec.dnsConfig 字段自定義。

nameserver

resolv.conf 文件的第一行 nameserver 指定的是 DNS 服務的 IP,這里就是 coreDNS 的

clusterIP:

也就是說所有域名的解析,都要經(jīng)過coreDNS的虛擬IP 10.100.0.2 進行解析, 不論是內(nèi)部域還是外部域名。

search 域

resolv.conf 文件的第二行指定的是 DNS search 域。解析域名的時候,將要訪問的域名依次帶入 search 域,進行 DNS 查詢。

比如我要在剛才那個 pod 中訪問一個域名為 ng-deploy-80的服務,其進行的 DNS 域名查詢的順序是:

options

resolv.conf 文件的第三行指定的是其他項,最常見的是 dnots。dnots 指的是如果查詢的域名包含的點 “.” 小于 5,則先走 search 域,再用絕對域名;如果查詢的域名包含點數(shù)大于或等于 5,則先用絕對域名,再走 search 域。K8s 中默認的配置是 5。

也就是說,如果我訪問的是 a.b.c.e.f.g ,那么域名查找的順序如下:

通過 svc 訪問

在 K8s 中,Pod 之間通過 svc 訪問的時候,會經(jīng)過 DNS 域名解析,再拿到 ip 通信。而 K8s 的域名全稱為 <service-name>.<namespace>.svc.cluster.local,而我們通常只需將 svc name 當成域名就能訪問到 pod,這一點通過上面的域名解析過程并不難理解。

參考

(1)K8S落地實踐 之 服務發(fā)現(xiàn)(CoreDNS)

(2)自定義 DNS 服務

(3)Kubernetes 服務發(fā)現(xiàn)之 coreDNS

(4)Kubernetes 集群 DNS 服務發(fā)現(xiàn)原理

(5)Kubernetes之服務發(fā)現(xiàn)和域名解析過程分析

注 冊

忘記密碼