k8s叢集訪問外部域名不穩定

潇潇暮鱼鱼發表於2024-08-08

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記錄的順序

相關文章