天天看點

kubernetes 容器 DNS 設定添加預設配置DNS 政策

在 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

繼續閱讀