0

我在Google Container Engine上有一個簡單的容器,它已運行數月,沒有問題。突然,我無法解析任何外部域。在進行故障排除時,我已經多次重新創建容器,並將羣集版本升級到1.4.7,試圖解決問題而無需更改。外部DNS解析在容器引擎中停止工作

爲了排除應用程序代碼進行儘可能多的,甚至是基本的Node.js代碼無法解析外部域:

const dns = require('dns'); 
dns.lookup('nodejs.org', function(err, addresses, family) { 
    console.log('addresses:', addresses); 
}); 
/* logs 'undefined' */ 

在本地機器或本地搬運工集裝箱作品上的同跑預期。

這kubectl調用失敗,以及:

# kubectl exec -ti busybox -- nslookup kubernetes.default 
nslookup: can't resolve 'kubernetes.default' 

兩個顯示越來越KUBE-DNS吊艙(當然不知道這是預期)

# kubectl get pods --namespace=kube-system -l k8s-app=kube-dns 
NAME     READY  STATUS RESTARTS AGE 
kube-dns-v20-v8pd6 3/3  Running 0   1h 
kube-dns-v20-vtz4o 3/3  Running 0   1h 

都試圖檢查時說,這時候對於DNS pod中的錯誤:

# kubectl logs --namespace=kube-system pod/kube-dns-v20-v8pd6 -c kube-dns 
Error from server: container kube-dns is not valid for pod kube-dns-v20-v8pd6 

我期望內部創建的kube-dns不正確拉外部DNS結果或其他一些聯繫消失。

我會接受幾乎任何解決方法,因爲這是一個生產應用程序 - 也許可以在Kubernetes控制器YAML文件或其他位置手動設置名稱服務器。在Dockerfile中設置/etc/resolv.conf的內容似乎不起作用。

回答

1

剛剛檢查過,並在我們自己的集羣中,我們通常有3個kube-dns豆莢,所以有些東西似乎在那裏。

這說明了什麼:kybectl describe rc kube-dns-v20 --namespace=kube-system

會發生什麼事,當你殺死KUBE-DNS莢? (rc應該自動重新啓動它們)

當您使用特定的名稱服務器執行nslookup時會發生什麼? nslookup nodejs.org 8.8.8.8