我目前在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,因为我的理解是它应该能够开箱即用。