看了kubernetes 权威指南 遇见了dns这一块。于是便按照书上的方式部署了一下。
书上使用的方式是:kube2sky+etcd+skydns的方式。按照书上的yaml写了一遍,发现无论如何都无法将dns部署到kubernetes 的集群中,实在没办法只能着文档了。于是乎发现kubernetes 在1.2以后就已经不使用上面那套dns。1.2以后使用kube-dns+dnsmasq-metrics+kube-dnsmasq的方式部署。下面就是我部署遇见的坑:
1.dns中无法连接apiserver:8080端口(kube-dashborad也有这类问题)。
kube-dns无法连接apiserver的8080端口,一般的问题出现在iptables没有关闭(centos7:systemctl stop firewalld;centos6:service iptables stop )。还有开启ip_forward=1(开启ip转发)。这两步非常关键。建议开机启动。
2. busybox cant reach DNS service(就是创建的pod无法访问dns的服务)
我这里导致这种问题的是由于flanneld重启,导致flanneld网卡变化,但是docker使用以前的flanneld生成的配置文件。所以nodes之间的docker0网卡无法进行连接。所以,这里需要在flanneld的启动文件中添加这一步:ExecStartPost=/usr/bin/mk-docker-opts.sh -k DOCKER_OPTS -d /run/flannel/docker(centos6自行添加)。然后在docker启动文件中加入读取/run/flannel/docker变量这一步,并且将读取的变量加入到启动。$DOCKER_OPT_BIP $OCKER_OPT_IPMASQ $DOCKER_OPT_MTU(这三个变量对应上面的/run/flannel/docker)
3.将各台机器的主机名和在集群中的名字设置相同,最好加入到/etc/hosts中。
总结: 细节,细节,细节。