日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kubernetes 集群 DNS 服务发现原理

發布時間:2024/9/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kubernetes 集群 DNS 服务发现原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介:本文介紹 Kubernetes 集群中 DNS 服務發現原理。

本文介紹 Kubernetes 集群中 DNS 服務發現原理。

前提需要

  • 擁有一個 Kubernetes 集群(可以通過 ACK 創建一個 Kubernetes 集群)
  • 能通過 kubectl 連接 Kubernetes 集群
  • 集群 DNS 服務

    Kubernetes 集群中部署了一套 DNS 服務,通過 kube-dns 的服務名暴露 DNS 服務。您可執行以下命令查看 kube-dns 的服務詳情。

    kubectl get svc kube-dns -n kube-system

    輸出:

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kube-dns ClusterIP 172.24.0.10 <none> 53/UDP,53/TCP,9153/TCP 27d

    服務后端是兩個名為 coredns(下文會介紹 CoreDNS 解析原理) 的 Pod。您可執行以下命令查看 coredns 的 Pod 詳情。

    kubectl get deployment coredns -n kube-system

    輸出:

    NAME READY UP-TO-DATE AVAILABLE AGE coredns 2/2 2 2 27d

    集群內域名解析原理

    Kubernetes 集群節點上 kubelet 有--cluster-dns=${dns-service-ip} 和 --cluster-domain=${default-local-domain} 兩個 dns 相關參數,分別被用來設置集群DNS服務器的IP地址和主域名后綴。

    查看集群 default 命名空間下 dnsPolicy:ClusterFirst (下文會介紹 dnsPolicy)模式的 Pod 內的 DNS 域名解析配置文件 /etc/resolv.conf 內容:

    nameserver 172.24.0.10 search default.svc.cluster.local svc.cluster.local cluster.local options ndots:5

    各參數描述如下:

  • nameserver: 定義 DNS 服務器的 IP 地址。
  • search: 設置域名的查找后綴規則,查找配置越多,說明域名解析查找匹配次數越多。集群匹配有 default.svc.cluster.local、svc.cluster.local、cluster.local 3個后綴,最多進行8次查詢 (IPV4和IPV6查詢各四次) 才能得到正確解析結果。
  • option: 定義域名解析配置文件選項,支持多個KV值。例如該參數設置成ndots:5,說明如果訪問的域名字符串內的點字符數量超過ndots值,則認為是完整域名,并被直接解析;如果不足ndots值,則追加search段后綴再進行查詢。
  • 根據上述文件配置,在 Pod 內嘗試解析:

  • 同命名空間下服務,如 kubernetes:添加一次 search 域,發送kubernetes.default.svc.cluster.local. 一次 ipv4 域名解析請求到 172.24.0.10 進行解析即可。
  • 跨命名空間下的服務,如 kube-dns.kue-system:添加兩次 search 域,發送 kube-dns.kue-system.default.svc.cluster.local. 和 kube-dns.kue-system.svc.cluster.local. 兩次 ipv4 域名解析請求到 172.24.0.10 才能解析出正確結果。
  • 集群外服務,如 aliyun.com:添加三次 search 域,發送 aliyun.com.default.svc.cluster.local.、aliyun.com.svc.cluster.local.、aliyun.com.cluster.local. 和 aliyun.com 四次 ipv4 域名解析請求到 172.24.0.10 才能解析出正確結果。
  • Pod dnsPolicy

    Kubernetes 集群中支持通過 dnsPolicy 字段為每個 Pod 配置不同的 DNS 策略。目前支持四種策略:

    ClusterFirst:通過集群 DNS 服務來做域名解析,Pod 內 /etc/resolv.conf 配置的 DNS 服務地址是集群 DNS 服務的 kube-dns 地址。該策略是集群工作負載的默認策略。
    None:忽略集群 DNS 策略,需要您提供 dnsConfig 字段來指定 DNS 配置信息。
    Default:Pod 直接繼承集群節點的域名解析配置。即在集群直接使用節點的 /etc/resolv.conf 文件。
    ClusterFirstWithHostNetwork:強制在 hostNetWork 網絡模式下使用 ClusterFirst 策略(默認使用 Default 策略)。

    CoreDNS

    CoreDNS 目前是 Kubernetes 標準的服務發現組件,dnsPolicy: ClusterFirst 模式的 Pod 會使用 CoreDNS 來解析集群內外部域名。

    在命名空間 kube-system 下,集群有一個名為 coredns 的 configmap。其 Corefile 字段的文件配置內容如下(CoreDNS 功能都是通過 Corefile 內的插件提供)。

    Corefile: |.:53 {errorshealth {lameduck 5s}readykubernetes cluster.local in-addr.arpa ip6.arpa {pods insecureupstreamfallthrough in-addr.arpa ip6.arpattl 30}prometheus :9153forward . /etc/resolv.confcache 30loopreloadloadbalance}

    其中,各插件說明:

  • errors:錯誤信息到標準輸出。
  • health:CoreDNS自身健康狀態報告,默認監聽端口8080,一般用來做健康檢查。您可以通過http://localhost:8080/health獲取健康狀態。
  • ready:CoreDNS插件狀態報告,默認監聽端口8181,一般用來做可讀性檢查。可以通過http://localhost:8181/ready獲取可讀狀態。當所有插件都運行后,ready狀態為200。
  • kubernetes:CoreDNS kubernetes插件,提供集群內服務解析能力。
  • prometheus:CoreDNS自身metrics數據接口。可以通過http://localhost:9153/metrics獲取prometheus格式的監控數據。
  • forward(或proxy):將域名查詢請求轉到預定義的DNS服務器。默認配置中,當域名不在kubernetes域時,將請求轉發到預定義的解析器(/etc/resolv.conf)中。默認使用宿主機的/etc/resolv.conf配置。
  • cache:DNS緩存。
  • loop:環路檢測,如果檢測到環路,則停止CoreDNS。
  • reload:允許自動重新加載已更改的Corefile。編輯ConfigMap配置后,請等待兩分鐘以使更改生效。
  • loadbalance:循環DNS負載均衡器,可以在答案中隨機A、AAAA、MX記錄的順序。
  • 原文鏈接:https://developer.aliyun.com/article/779121?

    版權聲明:本文內容由阿里云實名注冊用戶自發貢獻,版權歸原作者所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌侵權內容。

    總結

    以上是生活随笔為你收集整理的Kubernetes 集群 DNS 服务发现原理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。