在 kubernetes 中将 DNS 設定配置在 dnsConfig 配置項中, 而 dnsConfig 包含在 PodSpec 配置項中,是以 Pod 内所有容器都共享相同的 Network Namespace 。如下所示:
通過上述配置建立 Pod 之後,執行 kubectl exec demo cat /etc/resolv.conf 指令即可看到額外的配置項目,如下:
即,在 nameservers 中多了 172.xxx.xxx.201 、 search 中多了 ns1.svc.cluster.local 和 my.dns.search.suffix 兩項值,及多了 options ndots:2 edns0 配置。
是以,直接通過 dnsConfig 進行配置後,預設是追加到目前預設配置中。
在 kubernetes 中還提供了 dnsPolicy 決定 Pod 内預設 DNS 配置政策:
None 無任何政策
Default 預設
ClusterFirst 叢集 DNS 優先
ClusterFirstWithHostNet 叢集 DNS 優先,并伴随着使用主控端網絡
清除 Pod 預設 DNS 配置,當 dnsPolicy 設定成為這個值之後, kubernetes 不會為 Pod 預先加載任何邏輯用于判定得到 DNS 的配置。是以若将 dnsPolicy 設定為 None , 為了避免 Pod 裡面沒有 DNS 配置,最好通過 dnsConfig 來描述自定義的 DNS 參數。如下所示:
Pod 裡面的 DNS 配置繼承了主控端上的 DNS 配置。即,該 Pod 的 DNS 配置與主控端完全一緻。
通過 cat /etc/resolv.conf 可檢視到主控端上的配置如下:
與 Default 相反,會預先使用 kube-dns (或 CoreDNS ) 的資訊當預設定參數寫入到該 Pod 内的DNS配置。
注 如設定了 hostNetwork = true 時,ClusterFirst 會被強制轉化為 Default 。如下:
同時使用 hostNetwork 與 kube-dns 作為 Pod 預設 DNS 配置。
此文章選自:
作者:走在成長的道路上
連結:https://www.jianshu.com/p/dbc063e190c9