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