kubernetes在1.12以上版本已经建议使用了 coredns 作为集群的默认域名解析组件,但是之前的版本还有在使用kube-dns作为域名解析组件的,kube-dns不同于coredns,可以直接通过 host 插件进行自定义域名解析配置,需要依赖 dnsmasq 的能力实现自定义host的功能,下面就对如何实现给出步骤说明
kube-dns pod默认启动三个容器
代码语言:txt复制1. kubedns容器,负责监听集群service和endpoints资源的变化,并将信息更新到skyDNS中,skyDNS负责解析dns解析,并监听10053端口
2. dnsmasq容器,负载集群dns解析,并将 cluster.local 后缀的集群域名转发到skyDNS:10053端口,非cluster.local的域名,从获取的上游DNS服务器解析,默认从/etc/resolv.conf获取,可通过启动配置 resolv-file 调整
3. sidecar:负责健康检查和提供 DNS metrics(监听在 10054 端口)
要实现自定义host解析,主要依赖dnsmasq容器去实现,通过添加额外的host文件路径,将自定义解析配置在host文件内 ,启动配置:addn-hosts (默认是读取/etc/hosts,但是容器内/etc/hosts是没有的)
- 在kube-system 命名空间创建configmap,添加自定义host解析
apiVersion: v1
data:
dnshost: |-
1.2.3.4 www.test1.com #填写需自定义的解析host
2.2.3.4 www.test2.com
kind: ConfigMap
metadata:
name: kubedns-host
namespace: kube-system
2. 修改kube-system 命名空间下 kube-dns 的deployment资源
代码语言:javascript复制1. 将configmap挂载到dnsmasq容器的指定目录,此处使用 /dns 目录,自定义即可
volumes: #将第一步创建的configmap添加到pod内
- configMap:
defaultMode: 420
optional: true
name: kubedns-host
volumeMounts: #在dnsmasq容器的配置内添加挂载 kubedns-host这个卷,挂载到容器 /dns 目录
- mountPath: /dns
name: kubedns-host
2. 在dnsmasq的容器启动参数添加自定义解析配置文件
- args:
- --addn-hosts=/dns/dnshost
3. 测试,在pod内指定kube-dns的地址作为DNS server,发现已经可以正常解析自定义的host了