TKE使用kube-dns配置自定义host解析

2022-02-28 10:47:08 浏览数 (1)

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是没有的)

  1. 在kube-system 命名空间创建configmap,添加自定义host解析
代码语言:javascript复制
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了

0 人点赞