date: 2020-09-18title: k8s之 core-dns 组件 #标题
tags: core-dns #标签
categories: k8s # 分类

从Kubernetes v1.12开始,CoreDNS是推荐的DNS服务器,取代了kube-dns。

这篇博文就来分析下core-dns的配置,参考: 官方文档

core-dns的配置文件

在Kubernetes中,使用以下默认Corefile配置安装了CoreDNS:

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: coredns
  5. namespace: kube-system
  6. data:
  7. Corefile: |
  8. .:53 {
  9. errors
  10. log
  11. health {
  12. lameduck 5s
  13. }
  14. ready
  15. kubernetes cluster.local in-addr.arpa ip6.arpa {
  16. pods insecure
  17. fallthrough in-addr.arpa ip6.arpa
  18. ttl 30
  19. }
  20. prometheus :9153
  21. forward . /etc/resolv.conf
  22. cache 30
  23. loop
  24. reload
  25. loadbalance
  26. }

Corefile配置包括以下CoreDNS 插件:

  • errors: 将错误记录到stdout。
  • log: 记录解析记录的日志。
  • health:据报告CoreDNS的健康http://localhost:8080/health。使用这种扩展语法,lameduck将使进程运行不正常,然后等待5秒钟,然后关闭进程。
  • ready:当所有能够发出信号准备就绪的插件都这样做时,端口8181上的HTTP端点将返回200 OK。
  • kubernetes:CoreDNS将基于Kubernetes的服务和Pod的IP答复DNS查询。可以在CoreDNS网站上找到有关该插件的更多详细信息。ttl允许您为响应设置自定义TTL。默认值为5秒。允许的最小TTL为0秒,最大为3600秒。将TTL设置为0将防止记录被缓存。提供该pods insecure选项是为了与kube-dns向后兼容。您可以使用该pods verified选项,仅当在相同名称空间中存在具有匹配IP的容器时,该选项才返回A记录。pods disabled如果您不使用pod记录,则可以使用该选项。
  • prometheus:CoreDNS的Metrics可在http://localhost:9153/metrics在普罗米修斯中展示(也称为OpenMetrics)。
  • forward:不在Kubernetes集群域内的任何查询都将转发到预定义的解析器(/etc/resolv.conf)。若要转发至其他dns服务器,而不是/etc/resolv.conf,可以写为: forward . dns_ip。
  • cache:这将启用前端缓存。
  • loop:检测简单的转发循环,如果发现循环,则暂停CoreDNS进程。
  • reload:允许自动重新加载已更改的Corefile。编辑ConfigMap配置后,请等待两分钟,以使更改生效。
  • loadbalance:这是一个轮询DNS负载平衡器,用于随机分配答案中A,AAAA和MX记录的顺序。

如何更改configmap

  1. $ kubectl get configmap -n kube-system # 查看当前名称空间
  2. NAME DATA AGE
  3. calico-config 4 24d
  4. coredns 1 24d
  5. extension-apiserver-authentication 6 24d
  6. kube-proxy 2 24d
  7. kubeadm-config 2 24d
  8. kubelet-config-1.18 1 24d
  9. $ kubectl edit configmap/coredns -n kube-system # 进入编辑