[英]Kubernetes pod doesn't take the host DNS settings even if dnsPolicy: “Default” is provided
[英]Kubernetes DNSPolicy config
我在雲上有Kubernetes集群,並且在本地安全docker登錄(example.com,192.168.1.124)。 嘗試從注冊表(example.com/mongo)中提取圖片時,它解析的是真實example.com的IP,而不是我的本地注冊表。 我在kube系統名稱空間上創建了ConfigMap:
Name: marketplace-dns
Namespace: kube-system
Labels: <none>
Annotations: <none>
Data
====
configmap_dns.yaml:
----
apiVersion: v1
kind: ConfigMap
metadata:
name: kube-dns
namespace: kube-system
data:
stubDomains: |
{"example.com": ["192.168.1.124"]}
Events: <none>
並在我的kubernetes部署yaml上設置hostNetwork: true dnsPolicy: ClusterFirst
,但是問題仍然存在。
我想設置dnsPolicy: ClusterFirstWithHostNet
將完成這項工作。
從Pod Start上的注冊表中提取圖像使用的DNS設置與從群集內的Pod中調用DNS時使用的DNS設置不同。
當Kubernetes統計新Pod時,它會將其調度到節點,然后名為kubelet
的節點上的代理kubelet
調用容器引擎(在您的情況下為Docker)以下載映像並以設計的配置運行它。
Docker使用系統DNS來解析注冊表的地址,因為它可以在您的主機系統上運行,而不是在Kubernetes中運行,這就是為什么任何DNS設置都不會影響映像下載階段的DNS解析的原因。 這是在Github上對此的討論。
如果要更改DNS設置並覆蓋注冊表IP以便在映像下載階段使用它,則應以某種方式在主機系統中進行設置。 在您的配置中,您需要修改群集中所有節點上的DNS設置。 最簡單的方法是使用/etc/hosts
文件,並使用您的自定義IP(例如192.168.1.124 example.com
添加一條記錄。 您也可以修改本地DNS解析器(如果有)等。
進行此修改后,節點上的Docker將使用/etc/hosts
的記錄作為注冊表而不是全局DNS記錄,因為該文件具有更高的優先級,並且您將能夠使用映像運行pod。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.