CoreDNS介绍与使用

介绍

在Kubernetes中DNS组件为整个集群提供DNS服务,从而实现服务之间的访问。Kubernetes的DNS服务在Kubernetes中经历了3个阶段:

  • 1.3版本之前skydns
  • 1.3-1.10版本kubedns
  • 1.11版本开始coredns

CoreDNS基于Go语言开发,通过串接一组实现DNS功能的插件的插件链路实现所有功能,并且允许用户自行开发和添加必要的插件。CoreDNS底层使用Caddy作为WebServer,可以支持UDP、TLS、gRPC等方式对外提供DNS服务。

CoreDNS部署

下载CoreDNS deployment文件

下载地址:https://github.com/coredns/deployment/tree/master/kubernetes
CoreDNS介绍与使用_第1张图片

wget https://github.com/coredns/deployment/raw/master/kubernetes/coredns.yaml.sed
mv coredns.yaml.sed coredns.yml

修改deployment文件

修改cluster.local和安装集群时设置的集群域名后缀保持一致
forward 后面设置为 /etc/resolv.conf
CoreDNS介绍与使用_第2张图片
副本数根据负载情况修改
CoreDNS介绍与使用_第3张图片
pod资源限制建议配置大一些,不然在负载大的情况下查询时间会增加
CoreDNS介绍与使用_第4张图片

service IP和kubelete 配置文件中clusterDNS的值保持一致
CoreDNS介绍与使用_第5张图片

部署

kubectl apply -f coredns.yml

测试

进入一个Pod进行域名解析测试
CoreDNS介绍与使用_第6张图片

coreDNS配置文件

coreDNS的配置配置定义在名为Corefile的文件中,Corefile保存在kube-system名称空间下名为coredns的configmap中,然后以存储卷的形式挂载至coredns Pod中。具体内容如下:

    .:53 {
        errors	#将错误日志发送至标准输出
        health {	#通过http://loaclhost:8080/health报告健康状态
          lameduck 5s
        }
        ready	#所有插件就绪后通过8181端口响应200 Ok报告就绪状态
        kubernetes cluster.local in-addr.arpa ip6.arpa {	#Kubernetes系统的本地区域及专用的解析配置
          pods insecure
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153	#通过http://localhost:9153/metrics暴露指标数据
        forward . /etc/resolv.conf {	#非Kubernetes集群内部域名的转发逻辑
          max_concurrent 1000
        }
        cache 30	#启用解析缓存,缓存时长30s
        loop	#检测是否存在解析循环,如果有终止其过程
        reload	#Corefile内容改变时自动重载配置信息
        loadbalance	#轮询DNS域名解析,如果一个域名存在多个记录就轮询解析
    }

如果有些域名要转给特定的dns服务器解析,可以在Corefile中添加类似下面的配置指定dns服务器:
CoreDNS介绍与使用_第7张图片
修改完成以后等待CoreDNS重新加载配置或者重建CoreDNS Pod即可。

coreDNS解析流程

CoreDNS介绍与使用_第8张图片

  1. client Pod根据/etc/resolv.conf将解析请求转发给kube-dns service
  2. kube-dns service会将请求转发到后端的coreDNS Pod
  3. coredns Pod 根据Corefile的配置会连接到kubernetes service监视service IP的变动,维护DNS解析记录
  4. CoreDNS查询到service name对应的IP后返回给客户端
  5. 如果查询的是外部域名,coreDNS无法解析,就转发给指定的域名服务器,一般是节点上/etc/resolv.conf中的服务器解析

你可能感兴趣的:(kubernetes)