coredns解析流程和corefile配置

  

Core-DNS解析流程

  当pod1应用想通过dns域名的方式访问pod2则首先根据容器中/etc/resolv.conf内容配置的namserver地址,向dns服务器发出请求,由service将请求抛出转发给kube-dns service,由它进行调度后端的core-dns进行域名解析。解析后请求给kubernetes service进行调度后端etcd数据库返回数据,pod1得到数据后由core-dns转发目的pod2地址解析,最终pod1请求得到pod2。 

  

  运行coredns根据实际使用规格,调整coredns的副本数量和资源上限限制

root@deploy:~# vim coredns_v1.9.3.yaml

 

  

coredns configmap配置

root@deploy:~# kubectl get configmaps -n kube-system

root@deploy:~# kubectl edit configmaps coredns -n kube-system

 

 

  coredns配置解释:

       errors:错误信息标准输出

       health:在CoreDNS的http://localhost:8080/health 端口提供CoreDNS服务的健康报告。

       ready:监听8181端口,当coredns的插件都已就绪时,访问该接口会返回200 OK。

 

 

       kubernetes:CoreDNS将基于kubernetes service name进行DNS查询并返回查询记录给客户端。

       promethus:CoreDNS的度量指标数据以Promethus的key-value的格式在http://localhost:9153/metrics URI上提供

       forward:不是Kubernetes集群内的其他任何域名的查询都将转发给预定义的目的DNS服务器,如(/etc/resolv.conf中指定的nameserver)

       例如:

harbor.cncf.net {
     forward . 10.10.100.2
}

       cache:启用service解析缓存,单位为秒。

 

       loop:监测域名解析是否有死循环,如coredns转发给内网DNS服务器,而内网DNS服务器又转发给coredns,如果发现解析是死循环,则强制终止CoreDNS进程(kubernetes会重建)。

 

       reload:监测corefile是否更改,在重新编辑configmap配置后,默认2分钟后会优雅的自动加载。

 

       loadbalance:轮询DNS域名解析,如果一个域名存在多个A主机名记录轮询解析。

 

coredns下载:

  coredns的github项目下载

         选择deployment repository

 

       选择kubernetes目录

  

       选择coredns.yaml.sed

  通过kubernetes的github的项目下载

         通过kubernetes的github的项目,从kubernetes源码包内获取coredns的yaml文件

         https://github.com/kubernetes/kubernetes/releases

       点击Downloads for v1.2x下载

       下载加压后打开kubernetes/cluster/addons/dns/coredns目录下

  

  

       复制模板文件coredns.yaml.base,修改后进行应用安装

root@deploy:/usr/local/src/kubernetes/cluster/addons/dns/coredns# cp coredns.yaml.base /root/coredns.yaml

 

  

  1、修改域名

       如果使用的kubeasz部署的k8s则查看集群hosts文件来获取集群配置的dns名称

root@deploy:~# grep "DNS_DOMAIN" /etc/kubeasz/clusters/k8s-cluster1/hosts 
CLUSTER_DNS_DOMAIN="cluster.local"

 

       修改coredns的yaml,将DNS_DOMAIN修改为当前k8s集群的dns后缀名称

root@deploy:~# vim coredns.yaml

       修改_DNS_DOMAIN_ 替换为 cluster.local

  2、修改内存

       生产建议上限为 cpu:200m,内存4Gi

       修改coredns pod内存上限

 

       修改coredns地址,地址为service地址,也是pod容器内的dns地址

 

 

  修改镜像地址:

  

  手动拉取coredns镜像,并上传到本地harbor

root@deploy:~# docker pull coredns/coredns:1.9.3
docker.io/coredns/coredns:1.9.3
root@deploy:~# docker  tag coredns/coredns:1.9.3 harbor.cncf.net/baseimages/coredns/coredns:1.9.3
root@deploy:~# docker  push harbor.cncf.net/baseimages/coredns/coredns:1.9.3

 

  修改coredns镜像地址为本地harbor

  

  创建coredns,并将yaml文件修改当前版本作为归档

root@deploy:~# mv coredns.yaml coredns_v1.9.3.yaml 
root@deploy:~# kubectl apply -f coredns_v1.9.3.yaml

 

       查看pod 容器dns地址为clusterip

  查看coredns

root@deploy:~# kubectl get svc -A

 

  查看coredns pods

       pod成功通过kube-dns解析外网域名

 

posted @ 2022-07-29 10:22  PunchLinux  阅读(6059)  评论(0编辑  收藏  举报