成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

追蹤 Kubernetes 中的 DNS 查詢(xún)

開(kāi)發(fā) 前端
在 解析 kubelet 源碼[6] 一文中,我們?cè)治隽?kubelet 創(chuàng)建 pod 的流程。kubelet 創(chuàng)建 pod sandbox 配置時(shí)[7] ,其中重要的一項(xiàng)配置就是準(zhǔn)備 pod 的 DNS 配置[8](Pod 的 DNS 配置由 pod 的 dnsPolicy? 和 dnsConfig? 字段進(jìn)行操作,這里不展開(kāi),下面的部分按照 dnsPolicy=ClusterFirst 情況

在過(guò)去的文章中,我們?cè)?nbsp;追蹤過(guò) Kubernetes 中的網(wǎng)絡(luò)數(shù)據(jù)包[1],這篇文章將追蹤 Kubernetes 中的 DNS 查詢(xún)。

讓我們以在 Pod 中解析 Service 完全限定域名(FQDN) foo.bar.svc.cluster.local 為例。

在開(kāi)始之前,先回顧下 DNS 的解析流程。

DNS 的解析流程

圖片圖片

簡(jiǎn)化版的 DNS 處理流程:

  1. DNS 客戶(hù)端(如瀏覽器、應(yīng)用程序或者設(shè)備)發(fā)送域名 example.com 的查詢(xún)請(qǐng)求。
  2. DNS 解析器收到請(qǐng)求,查詢(xún)本地緩存,如果本地有記錄且未過(guò)期會(huì)返回本地的記錄。
  3. 如果本地緩存未命中,DNS 解析器將從 DNS 根服務(wù)器開(kāi)始向下查詢(xún),首先是頂級(jí)域名(Top Level Domain, TLD) DNS 服務(wù)器(這里是 .com),一直向下直到可以解析 example.com 的服務(wù)器。
  4. 能夠解析 example.com 的服務(wù)器成為權(quán)威 DNS 名稱(chēng)服務(wù)器(Authoritative DNS name server),解析器訪(fǎng)問(wèn)該服務(wù)器并收到 IP 地址等相關(guān)信息,然后返回給給客戶(hù)端。解析完成。

從流程來(lái)看非常重要的一項(xiàng)配置就是上游 DNS 服務(wù)器,該配置位于 Pod 中。這里 Kubernetes 的集群 DNS 服務(wù)器正是扮演上游 DNS 服務(wù)器的角色,比如 kube-dns[2]、CoreDNS[3],二者均實(shí)現(xiàn)了 Kubernetes 的基于 DNS 的服務(wù)發(fā)現(xiàn)規(guī)范[4]。對(duì) CoreDNS 感興趣的,可以參考上一篇文章 淺析 CoreDNS 的工作機(jī)制[5]。

圖片圖片

Pod DNS 配置

在 解析 kubelet 源碼[6] 一文中,我們?cè)治隽?kubelet 創(chuàng)建 pod 的流程。kubelet 創(chuàng)建 pod sandbox 配置時(shí)[7] ,其中重要的一項(xiàng)配置就是準(zhǔn)備 pod 的 DNS 配置[8](Pod 的 DNS 配置由 pod 的 dnsPolicy 和 dnsConfig 字段進(jìn)行操作,這里不展開(kāi),下面的部分按照 dnsPolicy=ClusterFirst 情況進(jìn)行說(shuō)明)。

配置的內(nèi)容包括如下三個(gè)部分:

  • DNS 服務(wù)器 nameserver:來(lái)自 kubelet 配置(通常位于 /var/lib/kubelet/config.yaml)的 clusterDNS 字段
  • 搜索域 search:包含四種域:命名空間域、服務(wù)域、集群域,以及節(jié)點(diǎn) /etc/resolv.conf 中定義的搜索域。集群域來(lái)自 kubelet 配置的 clusterDomain 字段,默認(rèn)為 cluster.local;命名空間域 NS.svc.cluster.local;服務(wù)域 svc.cluster.local
  • 選項(xiàng) options:默認(rèn)為 ndots:5

然后 kubelet 調(diào)用 CRI 接口創(chuàng)建容器,由 CRI 的實(shí)現(xiàn)將 DNS 配置寫(xiě)入到容器文件(默認(rèn)地址 /etc/resolv.conf)中,如 Containerd[9] 的 pkg/cri/server/sandbox_run_linux.go#L272[10]。

我們查看命名空間 default 下某個(gè) pod 的 DNS 配置:

cat /etc/resolv.conf
search default.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.96.0.10
options ndots:5

這里的 nameserver 正是 Service kube-dns 的 cluster IP 地址,也就是集群的 DNS 服務(wù)器,即 dnsPolicy=ClusterFirst 的結(jié)果。

search 與 ndots

search 用于指定默認(rèn)的搜索域。當(dāng)你在使用不完全限定域名(例如,只提供主機(jī)名而沒(méi)有域名)進(jìn)行域名解析時(shí),系統(tǒng)會(huì)嘗試在搜索域中找到匹配的完全限定域名。搜索域按照出現(xiàn)的順序進(jìn)行搜索,直到找到匹配的域名或搜索完所有的域名。

ndots 用于指定在進(jìn)行域名解析時(shí),系統(tǒng)自動(dòng)添加域名的點(diǎn)號(hào)個(gè)數(shù)閾值。當(dāng)提供的域名中點(diǎn)號(hào)的個(gè)數(shù)達(dá)到或超過(guò)這個(gè)閾值時(shí),系統(tǒng)會(huì)將其視為完全限定域名,而不再使用搜索域進(jìn)行搜索。默認(rèn)為 1,這里將其設(shè)置為 5。

注:ndots 的值大小會(huì)影響 DNS 解析的性能,為了獲得較好的性能,建議使用 FQDN 進(jìn)行服務(wù)訪(fǎng)問(wèn),以及將 ndots 改為更小的值。

Pod DNS 解析

當(dāng)在 Pod 中執(zhí)行 DNS 解析時(shí),查詢(xún)請(qǐng)求被發(fā)到本地(pod 中)的 DNS 解析器。這個(gè)解析器先在緩存中查詢(xún),如果未命中,則會(huì)根據(jù) /etc/resolv.conf 中的配置,將請(qǐng)求發(fā)到上游的 DNS 服務(wù)器,即集群 DNS 服務(wù)器 10.96.0.10 完成域名解析。

根據(jù)前面的介紹,假如我們要解析的域名是 foo.bar,會(huì)依次進(jìn)行如下的查詢(xún):

  • foo.bar.default.svc.cluster.local
  • foo.bar.svc.cluster.local(匹配到結(jié)果)

當(dāng)我們使用 foo.bar、foo.bar.svc 都可以完成解析,但 foo.bar.svc.cluster 不行,因?yàn)樽芳恿怂阉饔蚝鬅o(wú)法匹配到結(jié)果。假如請(qǐng)求方與目標(biāo)服務(wù)在同一個(gè)命名空間下,只用 foo 也是可以的。

參考資料

[1] 追蹤過(guò) Kubernetes 中的網(wǎng)絡(luò)數(shù)據(jù)包: https://atbug.com/tracing-network-packets-in-kubernetes/

[2] kube-dns: https://github.com/kubernetes/dns

[3] CoreDNS: https://coredns.io

[4] Kubernetes 的基于 DNS 的服務(wù)發(fā)現(xiàn)規(guī)范: https://github.com/kubernetes/dns/blob/master/docs/specification.md

[5] 淺析 CoreDNS 的工作機(jī)制: https://atbug.com/analysis-of-the-working-mechanism-of-coredns/

[6] 解析 kubelet 源碼: https://atbug.com/how-kubelete-container-runtime-work-with-cni/#創(chuàng)建-pod

[7] 創(chuàng)建 pod sandbox 配置時(shí): https://github.com/kubernetes/kubernetes/blob/release-1.24/pkg/kubelet/kuberuntime/kuberuntime_manager.go#L861

[8] pod 的 DNS 配置: https://github.com/kubernetes/kubernetes/blob/release-1.24/pkg/kubelet/kuberuntime/kuberuntime_sandbox.go#L93

[9] Containerd: https://github.com/containerd/containerd

[10] pkg/cri/server/sandbox_run_linux.go#L272: https://github.com/containerd/containerd/blob/a05d175400b1145e5e6a735a6710579d181e7fb0/pkg/cri/server/sandbox_run_linux.go#L272

責(zé)任編輯:武曉燕 來(lái)源: 云原生指北
相關(guān)推薦

2023-03-27 00:13:26

數(shù)據(jù)包Kubernete網(wǎng)絡(luò)

2018-07-11 15:32:57

KubernetesDNS方式

2021-05-05 20:17:54

dnspeepDNSDNS工具

2022-03-03 12:24:17

暗碼追蹤數(shù)字水印打印機(jī)

2009-05-22 09:23:11

2015-04-09 10:58:09

2021-05-26 11:06:06

Kubernetes網(wǎng)絡(luò)故障集群節(jié)點(diǎn)

2021-05-19 08:40:36

DNS 協(xié)議查詢(xún)

2020-07-09 08:26:42

Kubernetes容器開(kāi)發(fā)

2020-07-31 07:00:00

Kubernetes容器Linux

2021-02-22 09:44:03

KubernetesDNSLinux

2023-07-06 12:54:15

開(kāi)源KelemetryKubernetes

2021-12-29 17:29:07

KubernetesEvents集群

2023-04-14 14:31:52

Kubernetes服務(wù)

2023-11-30 16:29:16

PostgreSQL數(shù)據(jù)庫(kù)Kubernetes

2020-04-27 13:22:30

Kubernetes架構(gòu)Linux

2022-03-15 08:36:34

NginxKubernetesIngress

2020-12-10 10:40:38

DNS命令行工具Linux

2024-04-22 08:00:00

2020-03-20 15:13:07

硬件光線(xiàn)追蹤
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91精品在线看 | 亚洲一级在线 | 精品欧美乱码久久久久久 | 日韩成人在线一区 | 成人精品一区二区三区中文字幕 | 91久久国产综合久久 | 色免费视频| 日韩精品一区二区三区在线播放 | 久久久久久久久久久成人 | 蜜桃av一区二区三区 | 国产精品乱码一区二三区小蝌蚪 | 一本大道久久a久久精二百 欧洲一区二区三区 | 一二三四在线视频观看社区 | 久久久国产一区二区三区 | 亚洲一区 | 韩国理论电影在线 | 亚洲午夜久久久 | 精品一区二区三区免费视频 | 成人在线日韩 | 韩日在线视频 | 欧美久久久久久 | 99久久久无码国产精品 | 一区二区三区欧美 | av三级在线观看 | 波多野结衣电影一区 | 超碰8 | 视频一区二区在线观看 | 黄在线免费观看 | 亚洲一区二区三区在线播放 | 久久之精品 | 曰韩一二三区 | 91久久夜色精品国产网站 | 中文字幕在线视频精品 | 日本三级播放 | 一区二区三区不卡视频 | 精品在线一区 | 日本亚洲精品 | 91黄色片免费看 | 国产精品波多野结衣 | www.日韩av.com | 亚洲在线看 |