k8s集群之上游dns--dnsmasq,统一管理kubernetes的dns解析

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里面

 

 

posted @ 2018-10-26 15:56  诗码者  阅读(4780)  评论(0编辑  收藏  举报