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

追蹤 Kubernetes 中的 DNS 查詢

開發 前端
在 解析 kubelet 源碼[6] 一文中,我們曾分析了 kubelet 創建 pod 的流程。kubelet 創建 pod sandbox 配置時[7] ,其中重要的一項配置就是準備 pod 的 DNS 配置[8](Pod 的 DNS 配置由 pod 的 dnsPolicy? 和 dnsConfig? 字段進行操作,這里不展開,下面的部分按照 dnsPolicy=ClusterFirst 情況

在過去的文章中,我們曾 追蹤過 Kubernetes 中的網絡數據包[1],這篇文章將追蹤 Kubernetes 中的 DNS 查詢。

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

在開始之前,先回顧下 DNS 的解析流程。

DNS 的解析流程

圖片圖片

簡化版的 DNS 處理流程:

  1. DNS 客戶端(如瀏覽器、應用程序或者設備)發送域名 example.com 的查詢請求。
  2. DNS 解析器收到請求,查詢本地緩存,如果本地有記錄且未過期會返回本地的記錄。
  3. 如果本地緩存未命中,DNS 解析器將從 DNS 根服務器開始向下查詢,首先是頂級域名(Top Level Domain, TLD) DNS 服務器(這里是 .com),一直向下直到可以解析 example.com 的服務器。
  4. 能夠解析 example.com 的服務器成為權威 DNS 名稱服務器(Authoritative DNS name server),解析器訪問該服務器并收到 IP 地址等相關信息,然后返回給給客戶端。解析完成。

從流程來看非常重要的一項配置就是上游 DNS 服務器,該配置位于 Pod 中。這里 Kubernetes 的集群 DNS 服務器正是扮演上游 DNS 服務器的角色,比如 kube-dns[2]、CoreDNS[3],二者均實現了 Kubernetes 的基于 DNS 的服務發現規范[4]。對 CoreDNS 感興趣的,可以參考上一篇文章 淺析 CoreDNS 的工作機制[5]。

圖片圖片

Pod DNS 配置

在 解析 kubelet 源碼[6] 一文中,我們曾分析了 kubelet 創建 pod 的流程。kubelet 創建 pod sandbox 配置時[7] ,其中重要的一項配置就是準備 pod 的 DNS 配置[8](Pod 的 DNS 配置由 pod 的 dnsPolicy 和 dnsConfig 字段進行操作,這里不展開,下面的部分按照 dnsPolicy=ClusterFirst 情況進行說明)。

配置的內容包括如下三個部分:

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

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

我們查看命名空間 default 下某個 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 服務器,即 dnsPolicy=ClusterFirst 的結果。

search 與 ndots

search 用于指定默認的搜索域。當你在使用不完全限定域名(例如,只提供主機名而沒有域名)進行域名解析時,系統會嘗試在搜索域中找到匹配的完全限定域名。搜索域按照出現的順序進行搜索,直到找到匹配的域名或搜索完所有的域名。

ndots 用于指定在進行域名解析時,系統自動添加域名的點號個數閾值。當提供的域名中點號的個數達到或超過這個閾值時,系統會將其視為完全限定域名,而不再使用搜索域進行搜索。默認為 1,這里將其設置為 5。

注:ndots 的值大小會影響 DNS 解析的性能,為了獲得較好的性能,建議使用 FQDN 進行服務訪問,以及將 ndots 改為更小的值。

Pod DNS 解析

當在 Pod 中執行 DNS 解析時,查詢請求被發到本地(pod 中)的 DNS 解析器。這個解析器先在緩存中查詢,如果未命中,則會根據 /etc/resolv.conf 中的配置,將請求發到上游的 DNS 服務器,即集群 DNS 服務器 10.96.0.10 完成域名解析。

根據前面的介紹,假如我們要解析的域名是 foo.bar,會依次進行如下的查詢:

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

當我們使用 foo.bar、foo.bar.svc 都可以完成解析,但 foo.bar.svc.cluster 不行,因為追加了搜索域后無法匹配到結果。假如請求方與目標服務在同一個命名空間下,只用 foo 也是可以的。

參考資料

[1] 追蹤過 Kubernetes 中的網絡數據包: https://atbug.com/tracing-network-packets-in-kubernetes/

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

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

[4] Kubernetes 的基于 DNS 的服務發現規范: https://github.com/kubernetes/dns/blob/master/docs/specification.md

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

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

[7] 創建 pod sandbox 配置時: 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

責任編輯:武曉燕 來源: 云原生指北
相關推薦

2023-03-27 00:13:26

數據包Kubernete網絡

2018-07-11 15:32:57

KubernetesDNS方式

2021-05-05 20:17:54

dnspeepDNSDNS工具

2022-03-03 12:24:17

暗碼追蹤數字水印打印機

2009-05-22 09:23:11

2015-04-09 10:58:09

2021-05-26 11:06:06

Kubernetes網絡故障集群節點

2021-05-19 08:40:36

DNS 協議查詢

2020-07-09 08:26:42

Kubernetes容器開發

2020-07-31 07:00:00

Kubernetes容器Linux

2021-02-22 09:44:03

KubernetesDNSLinux

2023-07-06 12:54:15

開源KelemetryKubernetes

2021-12-29 17:29:07

KubernetesEvents集群

2023-04-14 14:31:52

Kubernetes服務

2023-11-30 16:29:16

PostgreSQL數據庫Kubernetes

2020-04-27 13:22:30

Kubernetes架構Linux

2022-03-15 08:36:34

NginxKubernetesIngress

2020-12-10 10:40:38

DNS命令行工具Linux

2020-03-20 15:13:07

硬件光線追蹤

2024-04-22 08:00:00

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 极品销魂美女一区二区 | 91视频一区 | a欧美 | 久久大陆| 亚洲视频免费在线观看 | 天天色天天色 | 逼逼网 | 欧美大片一区 | 亚洲 欧美 日韩在线 | 欧美一区二区在线 | 国产精品免费在线 | 狠狠入ady亚洲精品经典电影 | 91精品一区二区三区久久久久 | 五月激情婷婷六月 | 国产激情视频在线观看 | 婷婷综合| 日本一区二区高清视频 | 99欧美精品 | 一区二区三区四区国产 | 久久国产区 | 日韩精品一区二区三区免费视频 | 在线观看第一页 | 久久久久一区二区三区 | 农村黄性色生活片 | 欧美极品在线观看 | 欧美一区二区三区在线观看 | 黄色毛片网站在线观看 | www.av在线| 久久久精品亚洲 | 久久久久99 | 亚洲精品日日夜夜 | 亚洲午夜在线 | 91精品国产自产精品男人的天堂 | 亚洲精品第一 | 欧美综合自拍 | 国产精品久久久久久久免费大片 | 中文字幕第九页 | 亚洲综合天堂 | 国产乱码精品一区二区三区五月婷 | 国产激情自拍视频 | 欧美一区二区久久 |