pod網路模式為default時,可以訪問外部域名,網路模式為cluster first時可以訪問叢集中域名,但是訪問公司內網域名時時通時不通,有時不能完全解析。
處理方法:
在coredns的cm中,需要新增
forward . /etc/resolv.conf { max_concurrent 1000 policy sequential }
其中 forward . /etc/resolv.conf 配置表示使用當coredns內部不能解析的時候,向宿主機上的resolv.conf檔案中配置的nameserver轉發dns解析請求,。
當宿主機上namserver有多個時,預設採用的時random的方式隨機轉發,失敗後就返回錯誤。而sequential為從第一個
編輯coredns的cm
kubectl edit cm coredns -o yaml -n kube-system
新增:policy sequential
data: Corefile: | .:53 { errors health { lameduck 5s } ready kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa ttl 30 } prometheus :9153 forward . /etc/resolv.conf { max_concurrent 1000 policy sequential } cache 30 loop reload loadbalance }
errors記錄錯誤到標準輸出
health訪問http://localhost:8080/health可以檢視其健康狀態,lameduck 5s在程序關閉之前會等待5s使程序進入非健康狀態
ready當所有的外掛都傳送了準備就緒的訊號時,8181埠會返回200
kubernetes CoreDNS將根據Kubernetes的服務和Pod的IP回覆DNS查詢。換句話說,該外掛實現了基於Kubernetes DNS的服務發現規範。ttl允許您為響應設定自定義ttl。預設值是5秒。最小TTL為0秒,最大TTL為3600秒。將TTL設定為0將阻止記錄被快取。提供pods insecure選項是為了向後相容kube-dns。您可以使用pods verified選項,只有在相同的名稱空間中存在具有匹配IP的pod時,該選項才返回A記錄。如果不使用pod記錄,可以使用pods disabled選項。
prometheus:CoreDNS的度量標準可以在http://localhost:9153/Prometheus格式的指標中找到;可以透過http://localhost:9153/metrics獲取prometheus格式的監控資料
cache 30,表示 pttl 為30s,也就是說,一條域名解析記錄在DNS快取中的存留時間最長為30s
loop:檢測簡單的轉發迴圈,如果找到迴圈則停止CoreDNS程序
reload:允許自動重新載入已更改的Corefile。編輯ConfigMap配置後,請等待兩分鐘以使更改生效loadbalance:這是一個迴圈DNS負載均衡器,可以在答案中隨機化A,AAAA和MX記錄的順序