首页 > 其他分享 >kubernetes_CoreDNS全解析

kubernetes_CoreDNS全解析

时间:2022-11-19 09:45:19浏览次数:51  
标签:kubectl 解析 kubernetes ping system CoreDNS kube

一、前言

kubernetes CoreDNS 是 kube-system 命令空间里面的一个Pod,用于域名解析。

kubernetes自带三个命名空间(用kubeadm安装的Kubernetes集群):
default kube-public kube-system
前两个不重要,kube-system命名空间很重要,静态Pod都在这个命名空间里面。

kube-system中,与网络相关的三个Pod
kube-proxy:解决service负载均衡到具体的哪个Pod
calico:解决的是node1与node2之间(不同节点之间)网络通不通的问题。
验证1:kubectl get pod -n kube-system 查看calico是否正常运行Running(如果不是Running,要么是calico绑定错误本地网卡(那个机器错误就到哪个机器上修改),要么是云服务没有打开对应的入规则和出规则);
验证2:在node1 ping 另一个节点node2 上 serviceName.namespace ,验证通不通。
CoreDNS:解决的是 ping 内网ip 可以通,ping serviceName.namespace 不通,报错为 name server unknown;ping 外网ip 可以通,ping 外网域名 不通的问题,报错为 name server unknown。解决的是将 域名解析为ip 的问题。

二、调用流程

pod - service - deployment - replicaset - 两个pod - configmap - linux

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

kubectl get deployment coredns -o yaml -n kube-system
在这里插入图片描述

在这里插入图片描述

小结:调用流程

pod - service - deployment - replicaset - 两个pod - configmap - linux

所有命令:
kubectl get pod -n kube-system -o wide
kubectl exec -it nginx bash
cat /etc/resolv.conf 
kubectl get all -o wide -A | grep 10.96.0.10
kubectl get all -o wide -A | grep kube-dns
kubectl get all -o wide -A | grep coredns
kubectl get deployment coredns -o yaml -n kube-system
kubectl get configmap coredns -o yaml -n kube-system

三、CoreDNS

3.1 dnsPolicy的四个属性

Kubernetes 中 Pod 的 DNS 策略有四种类型,yaml 文件中通过 dnsPolicy 和 dnsConfig 两个属性来指定 Pod 的dns方式。

1.Default:Pod 继承所在主机上的 DNS 配置;

2.ClusterFirst:K8s 的默认设置;先在 K8s 集群配置的 coreDNS 中查询,查不到的再去继承自主机的上游 nameserver 中查询(就是通过 configmap 里面的 forward 属性来指定上游服务器);

3.ClusterFirstWithHostNet:对于网络配置为 hostNetwork 的 Pod 而言,其 DNS 配置规则与 ClusterFirst 一致;

4.None:忽略 K8s 环境的 DNS 配置,只认 Pod 的 dnsConfig 设置。(当 dnsPolicy 指定为 none,dnsConfig 属性必须配置)

默认是 ClusterFirst ,表示 ping serviceName.namespace 可以,ping 外网域名 报错 name server unknown。

设置为 Default 表示 继承所在主机上的 DNS 配置,但是 ping serviceName.namespace 报错 name server unknown。

3.2 Corefile 各自字段什么意思

53 表示的 kube-dns Service 服务的端口,其他的如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        errors
        health {
            lameduck 5s
        }
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           fallthrough in-addr.arpa ip6.arpa
           ttl 30
        }
        prometheus :9153
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }    

Corefile 配置包括以下 CoreDNS 插件:

errors:错误记录到标准输出。

health:在 http://localhost:8080/health 处提供 CoreDNS 的健康报告。

ready:在端口 8181 上提供的一个 HTTP 末端,当所有能够 表达自身就绪的插件都已就绪时,在此末端返回 200 OK。

kubernetes:CoreDNS 将基于 Kubernetes 的服务和 Pod 的 IP 答复 DNS 查询。你可以在 CoreDNS 网站阅读更多细节。 你可以使用 ttl 来定制响应的 TTL。默认值是 5 秒钟。TTL 的最小值可以是 0 秒钟, 最大值为 3600 秒。将 TTL 设置为 0 可以禁止对 DNS 记录进行缓存。

pods insecure 选项是为了与 kube-dns 向后兼容。你可以使用 pods verified 选项,该选项使得 仅在相同名称空间中存在具有匹配 IP 的 Pod 时才返回 A 记录。如果你不使用 Pod 记录,则可以使用 pods disabled 选项。

prometheus:CoreDNS 的度量指标值以 Prometheus 格式在 http://localhost:9153/metrics 上提供。

forward: 不在 Kubernetes 集群域内的任何查询都将转发到 预定义的解析器 (/etc/resolv.conf).

cache:启用前端缓存。

loop:检测到简单的转发环,如果发现死循环,则中止 CoreDNS 进程。

reload:允许自动重新加载已更改的 Corefile。 编辑 ConfigMap 配置后,请等待两分钟,以使更改生效。

loadbalance:这是一个轮转式 DNS 负载均衡器, 它在应答中随机分配 A、AAAA 和 MX 记录的顺序。

参考资料(Corefile 各自字段什么意思):https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/dns-custom-nameservers/

3.3 让container同时内网和外网(通过 forward 属性配置上游域名解析服务器来实现)

让container同时内网和外网,通过 forward 属性配置上游域名解析服务器来实现

[root@w1 ~]# kubectl get configmap coredns -o yaml -n kube-system
apiVersion: v1
data:
  Corefile: |
    .:53 {
        errors
        health
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           upstream
           fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        # 这里表示将使用本机linux的域名解析,可以配置为ip,表示其他的机器
        forward . /etc/resolv.conf  
        cache 30
        loop
        reload
        loadbalance
    }
kind: ConfigMap
metadata:
  creationTimestamp: "2022-07-28T16:05:03Z"
  name: coredns
  namespace: kube-system
  resourceVersion: "200"
  selfLink: /api/v1/namespaces/kube-system/configmaps/coredns
  uid: 0a6711df-0e8f-11ed-a989-000c291867b4

yaml里面的指定 dnsPolicy 为 ClusterFirst 或者不指定,因为默认就是 ClusterFirst,只需要修改 configmap 里面的 forward . /etc/resolv.conf 配置上上游的域名解析服务器为本地。

查看本机使用的域名解析服务器
在这里插入图片描述

cat /etc/resolv.conf
nameserver 表示域名解析器

3.4 CoreDNS 配置等同于 kube-dns

在 Kubernetes 1.21 版本中,kubeadm 移除了对将 kube-dns 作为 DNS 应用的支持。 对于 kubeadm v1.24,所支持的唯一的集群 DNS 应用是 CoreDNS。

参考资料:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/coredns/

四、尾声

最好的关于kubernetes的dns方案是:使用默认的 ClusterFirst 可以 ping serviceName.namespace ,然后加上 forward . /etc/resolv.conf 就可以 ping 外网域名。

kubernetes CoreDNS全解析,完成了。

标签:kubectl,解析,kubernetes,ping,system,CoreDNS,kube
From: https://www.cnblogs.com/maoqizhi/p/16905467.html

相关文章

  • 云原生之旅 - 12)使用 Kaniko 在 Kubernetes上构建 Docker 容器镜像
    前言前一篇文章【云原生之旅-11)基于Kubernetes动态伸缩JenkinsBuildAgents】有讲到在 KubernetesPod(Jenkinsbuildagent)里面构建docker容器镜像,当时我们......
  • 大道至简:Kubernetes中的用户与鉴权
    Overview本章主要简单阐述kubernetes认证相关原理,最后以实验来阐述kubernetes用户系统的思路objective:了解kubernetes各种认证机制的原理了解kubernetes用户的概念......
  • 计算机网络原理(TCP/IP协议四):地址解析协议
    ARPARP缓存ARP帧格式ARP缓存超时代理ARP免费ARP和地址冲突检测与ARP相关的攻击关于地址解析协议在之前计算机网络原理(六):链路层与局域网的4.1中就有原理的介绍,......
  • mybatis源码解析1
    一、mybatis的简单使用根据mybatis官网提供的例子,需要这么几个步骤1、获取mybatis配置文件的输入流对象2、创建SqlSessionFactoryBuilder对象3、调用SqlSessionFactor......
  • simpread-(132 条消息) three.js 加载 stl 文件并解析_攻城狮 plus 的博客 - CSDN 博
    threejs加载STL文件效果:加载stl格式的文件需要设置材质material;stl、obj都是静态模型,不可以包含动画,fbx除了包含几何、材质信息,可以存储骨骼动画等数据。代码:......
  • Kubernetes集群配置APIServer公网访问
    内容纲要首先打开/etc/kubernetes/pki目录,里面会有很多证书。执行命令查看当前证书允许通过哪些地址访问APIServer:opensslx509-inapiserver.crt-noout-text|gre......
  • xml解析_Jsoup_Document对象、Element对象
    xml解析_Jsoup_Document对象Document:文档对象,代表内存中的dom树获取Element对象getElementById(Stringid):根据id属性值获取唯一的elemtnt对象ge......
  • xml解析_解析方式、常见的解析器
    xml解析_解析方式解析:操作xml文档,将文档中的数据读取到内存中操作xml文档解析(读取):将文档中的数据读取到内存中写入:将内存中的数据保存到xml文档......
  • 浅谈智能DNS云解析(二)-中科三方
    在《浅谈智能DNS云解析(一)》中我们详细介绍了智能云解析在DNS智能解析和DNS健康监测方面的优势和特点,本文我们将继续介绍智能DNS云解析负载均衡和宕机切换的功能特性。 ......
  • 第二章 Kubernetes架构原则和对象设计
    Kubernetes架构 根据如上架构对各组件进行讲解etcdetcd是CoreOS基于Raft开发的分布式key-value存储,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布......