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)和域名解析過程分析
- ORG代表什么?
- 如何更改網(wǎng)站域名啊
- 怎樣查詢域名有沒有被解析??
- 怎樣自己建網(wǎng)站?
- 頂域名與www二級域名如何做310跳轉(zhuǎn)?
- 我的域名想更換DNS,可以直接修改DNS嗎?
- 萬網(wǎng)會員是什么?
- 誰幫我提供一些申請第二域名的網(wǎng)站
- 申請第二個域名還要備案嗎
- 我剛解析好一個域名,那個DNS用不用修改呀?
- 空間域名不及時續(xù)費對網(wǎng)站有什么影響?
- 如何查看網(wǎng)站的制作時間和到期時間呢?
- 怎么快速更新阿里云域名解析
- 在新網(wǎng)備案的域名,可以直接解析到阿里云公網(wǎng)IP嗎?
- 如何把綁定的域名的CNAME解析到siteapp.baidu.com
- 我win7的 電腦 經(jīng)常出現(xiàn) 域名解析文件(Hosts)存在異常
- 用于解析域名的協(xié)議是?
- 域名解析是什么意思
- 如何把域名解析到本地主機服務器
- 我現(xiàn)在有域名,域名備案成功了,域名怎么解析到服務器上,服務器是朋友的他告訴我了主機地址,不知道后面怎么弄,需要用到什么軟件