如何让我的VSTS代理POD解析外部DNS地址?

时间:2018-06-08 12:14:55

标签: kubernetes

我目前在Kubernetes集群中有2台机器,1 x控制器和1 x worker。 (一旦我开始运作,我将增加2名工人)。

两台机器都是物理的,并且正在运行Ubuntu 18.04。群集启动并运行,因为我可以对其进行部署并从Pod等中获取结果。我已经部署了Flannel覆盖网络。

Kubernetes版

Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:17:39Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.4", GitCommit:"5ca598b4ba5abb89bb773071ce452e33fb66339d", GitTreeState:"clean", BuildDate:"2018-06-06T08:00:59Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

我创建了一个新的命名空间build-agents,我已经应用了一个部署,创建了vsts-agent的2个副本。

部署成功,但Pod无法解析外部DNS地址,尽管它可以访问Internet。我可以使外部DNS解析工作的唯一方法是将以下内容添加到我的部署中:

 dnsPolicy: None
 dnsConfig:
    nameservers:
      - 192.168.50.2
    searches:
      - home.turtlesystems.co.uk

这可以确保Pod可以解析外部地址,但这确实意味着我必须明确说明要使用哪个DNS服务器,这是不理想的。

我从我的vsts-agent pod获得的错误是

Determining matching VSTS agent...
curl: (6) Could not resolve host: turtlesystems.visualstudio.com

我的理解是kubedns应该能够提供所需的所有DNS。这样我就可以在同一名称空间中测试我已经部署busybox到集群中的内容,所以我可以运行一些测试:

kubectl exec -it busybox -n build-agents -- ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=57 time=16.222 ms
64 bytes from 8.8.8.8: seq=1 ttl=57 time=16.227 ms
64 bytes from 8.8.8.8: seq=2 ttl=57 time=7.487 ms
64 bytes from 8.8.8.8: seq=3 ttl=57 time=7.288 ms
^C
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 7.288/11.806/16.227 ms

但尝试进行DNS解析失败,

kubectl exec -it busybox -n build-agents -- nslookup www.google.co.uk
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

nslookup: can't resolve 'www.google.co.uk'

可以看出正在使用的名称服务器是10.96.0.10。我可以看到这是kubedns服务

NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE       SELECTOR
kube-dns               ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP   20h       k8s-app=kube-dns

然而,POD无法访问此地址。 Kubedns似乎正在兴奋起来。法兰绒网络设置为10.244.0.0/16,如文档中所述。

我确实看到一个页面,其中显示Kubedns 1.4.9存在问题,但我目前正在运行1.4.8。

两台物理机都能够使用我的本地DNS服务器成功解析地址。

我曾使用Google和SO尝试找到答案,但都失败了。有些人建议阻止systemd管理/etc/resolve.conf文件并静态设置 - 我已经完成了这个并且它不起作用。 其他人建议尝试更改cluster-dns地址,但我不清楚在何处以及如何执行此操作。是通过群集初始化还是之后?

我目前有解决方法,但我真的很想了解为什么我部署的Pod无法解析DNS,因为我的理解是它应该能够开箱即用。

0 个答案:

没有答案