Kubernetes 集群 DNS 服务发现原理
本文介紹 Kubernetes 集群中 DNS 服務發現原理。
前提需要
集群 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各參數描述如下:
根據上述文件配置,在 Pod 內嘗試解析:
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}其中,各插件說明:
原文鏈接:https://developer.aliyun.com/article/779121?
版權聲明:本文內容由阿里云實名注冊用戶自發貢獻,版權歸原作者所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌侵權內容。總結
以上是生活随笔為你收集整理的Kubernetes 集群 DNS 服务发现原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 政企应用如何构筑安全合规的互联内容分发加
- 下一篇: 大促场景下云通信高可用、稳定性实战