1、概述
首先部署好kubernetes集群并采用Coredns进行解析,这样集群内部的服务都能通过内部域名进行访问。但是集群内部的coredns与物理机的dns解析不完全统一,coredns不能解析物理机的hostname。所以需要一个统一的dns来管理两者。主要是建立一个coredns的上游dns服务,将物理机环境的解析添加进去。使用dnsmasq做上游的dns,统一管理coredns和物理机集群的hostname解析。dnsmasq部署于物理服务器上,而CoreDNS的上游DNS服务器默认会选择物理机网卡上设置的DNS,只要将dnsmasq作为物理机网卡设置的DNS,那么就可以直接设置为CoreDNS的上游DNS服务器了.
2、部署
#centos
yum -y install dnsmasq
修改配置文件,配置文件默认是/etc/dnsmasq.conf,主要是修改如下:
resolv-file=/etc/resolv.dnsmasq.conf
strict-order
listen-address=127.0.0.1,10.2.73.110
addn-hosts=/etc/dnsmasq.hosts
参数解释:
resolv-file 定义dnsmasq从哪里获取上游DNS服务器的地址, 默认是从/etc/resolv.conf获取。在此我们定义的是从/etc/resolv.dnsmasq.conf文件中获得。
strict-order 表示严格按照resolv-file文件中的顺序从上到下进行DNS解析,直到第一个解析成功为止。
listen-address 定义dnsmasq监听的地址,默认是监控本机的所有网卡上
addn-hosts 添加主机记录,就和/etc/hosts文件一样,添加物理机hostname和ip映射
文件:
# cat /etc/resolv.dnsmasq.conf
nameserver 10.42.25.1
nameserver 10.42.25.2
nameserver 114.114.114.114
根据自己的服务器填写。
# cat /etc/dnsmasq.hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.2.73.110 ku
3、启动服务
system start dnsmasq
system enable dnsmasq
system status dnsmasq
将物理机的/etc/resolv.conf里面nameserver地址换成dnsmasq的服务地址,默认监听53端口。
nameserver 10.2.73.110
由于集群里面的Coredns已经提前部署好了,所以默认使用的是之前的/etc/resolv.conf里面的nameserver,所以不能解析node name,所以需要重新部署一下Coredns:
kubectl delete pod coredns-576cbf47c7-6t85b -n kube-system
kubectl delete pod coredns-576cbf47c7-wlsrd -n kube-system
等待几秒钟服务会自动部署好。
4、测试dns
1)在物理机上面,访问外网测试
2)在pod里面