kubernetes 1.5.2 部署kube-dns 踩过的坑

  看了kubernetes 权威指南 碰见了dns这一块。因而便按照书上的方式部署了一下。node

  书上使用的方式是:kube2sky+etcd+skydns的方式。按照书上的yaml写了一遍,发现不管如何都没法将dns部署到kubernetes 的集群中,实在没办法只能着文档了。因而乎发现kubernetes 在1.2之后就已经不使用上面那套dns。1.2之后使用kube-dns+dnsmasq-metrics+kube-dnsmasq的方式部署。下面就是我部署碰见的坑:docker

1.dns中没法链接apiserver:8080端口(kube-dashborad也有这类问题)。centos

     kube-dns没法链接apiserver的8080端口,通常的问题出现在iptables没有关闭(centos7:systemctl stop firewalld;centos6:service iptables stop )。还有开启ip_forward=1(开启ip转发)。这两步很是关键。建议开机启动。api

2. busybox cant reach DNS service(就是建立的pod没法访问dns的服务)centos7

  我这里致使这种问题的是因为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)spa

3.将各台机器的主机名和在集群中的名字设置相同,最好加入到/etc/hosts中。server

总结: 细节,细节,细节。dns