K8S的CoreDns域名解析

目录

一、CoreDns的概述

二、CoreDns域名解析链路

三、CoreDns域名解析配置

1.将特定域名解析到单个IP

2.将特定域名解析到特定的DNS服务器

3.将所有域名解析到特定的DNS服务器

四、edit无权限修改默认configmap

1.保存旧configmap配置

 2.更新configmap配置

3.更新coredns的pod 

4.验证测试


一、CoreDns的概述

        负责为整个k8s集群提供 DNS 服务,属于DNS插件。

        基于dns的接口去实现集群内部的dns内部域名解析的一种能力。

        k8s集群创建后,会在kube-system名称空间下默认生成两个coredns的pod,所有pod的域名请求会以负载均衡的方式向这两个coredns的pod进行域名解析。

kubectl get pod -n kube-system -o wide
    #查看coredns的pod

二、CoreDns域名解析链路

        coredns配置相应的域名解析后,会将配置结果存储在etcd键值对数据库中,当pod发起域名请求,这个域名就会经过kube-dns服务负载到coredns的pod上,coredns会通过api-server向etcd获取解析结果,然后将结果返回给pod,pod再根据域名解析结果,通过svc发起访问请求。

kubectl get svc -n kube-system   kube-dns
    #查看kube-dns的ip

ipvsadm -Ln
    #查看ipvs的负载
    #kube-dns将请求负载到了coredns的两个pod上。

三、CoreDns域名解析配置

1.将特定域名解析到单个IP

kubectl edit cm -n kube-system coredns
#加入下面的配置
#注意,“缩进”不能使用tab,要使用空格,
 hosts {
   192.168.159.82 www.aaa.com
   fallthrough
 }

2.将特定域名解析到特定的DNS服务器

kubectl edit cm -n kube-system coredns
    #加入如下配置
    #缩进与 .:53 同级

    bbb.com:53 {
        errors
        cache 30
        forward . 192.168.159.82 {
          prefer_udp
        }

3.将所有域名解析到特定的DNS服务器

kubectl edit cm -n kube-system coredns
    #加入一下配置
forward . 192.168.159.82 {
  prefer_udp
}

四、edit无权限修改默认configmap

        当edit修改configmap后保存退出失败,因为当前k8s用户无权限修改。可以创建一个Corefile文件,基于Corefile文件创建一个coredns的configmap,为其他人增加Corefile文件可执行权限即可。

1.保存旧configmap配置

#将此命令的结果复制下来,自建一个文件
kubectl get cm -n kube-system coredns -o yaml
#将上一步查询的结果粘贴为文件内容
vim coredns_cm.yaml
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
  Corefile: |
    .:53 {
        errors
        health {
           lameduck 15s
        }
        ready

        hosts {
          192.168.159.82 www.aaa.com
          fallthrough
        }

        kubeapi

        k8s_event {
          level info error warning
        }

        kubernetes cluster.local in-addr.arpa ip6.arpa {

          pods verified
          ttl 30
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        forward . 192.168.159.82 {
          prefer_udp
        }
        cache 30
        log
        loop
        reload
        loadbalance
    }
kind: ConfigMap
creationTimestamp: "2023-12-26T03:48:47Z"
name: coredns
namespace: kube-system
resourceVersion: "472134"
uid: 382ca971-8a97-49d7-bd8b-c63bce9076ea
#删除原来的configmap。
kubectl delete cm -n kube-system       coredns

 2.更新configmap配置

#更新coredns的configmap配置
kubectl apply -f doredns_cm.yaml

 或

#基于Corefile文件创建configmap,名为coredns
kubectl create configmap coredns -n kube-system --from-file=Corefile
chmod o+x Corefile
    #需要给其他人加上文件的可执行权限,才可以使用edit来修改。

kubectl edit cm coredns -n kube-system
    #修改正确的缩进格式。

3.更新coredns的pod 

#删除两个coredns的容器,使deployment控制器重拉pod,达到重启的效果。
#也可以登录coredns两个pod所在的worker节点,重启docker,一样的效果。
kubectl delete pod -n kube-system   coredns

4.验证测试

#测试域名解析是否成功
kubectl exec -it -n kube-system   nginx-ingress-controller-76b699b679-kqzth -- nslookup www.aaa.com

CoreDNS是一个用于Kubernetes集群的域名解析器。它负责将域名解析为相应的IP地址,以便Kubernetes集群中的各个组件可以相互通信。 当coredns解析k8s域名偶尔失败时,可能是由于以下几个原因: 1. 配置错误:coredns的配置文件可能存在错误,导致解析过程中出现问题。可以通过检查coredns的配置文件来确认是否存在错误,并进行相应的修复。 2. 网络问题:解析k8s域名的过程中,可能出现网络问题,导致解析失败。这可能是由于网络延迟、故障或不稳定等原因引起的。可以通过检查网络连接、排除网络故障来解决此问题。 3. DNS缓存问题:coredns可能会在本地缓存解析结果,以提高性能并减少对外部DNS服务器的依赖。但有时候,这些缓存可能过期或损坏,导致解析失败。可以尝试清除corednsDNS缓存,并重新进行解析。 4. 资源不足:在解析域名时,coredns可能会耗尽CPU、内存或网络资源,导致解析失败。可以通过增加集群的资源配额或调整coredns的资源限制来解决此问题。 5. 其他故障:还有一些其他因素可能导致coredns解析k8s域名失败,例如coredns的版本问题、操作系统或硬件故障等。可以尝试升级coredns到最新版本,或者联系相关技术支持人员进行故障排除和解决。 总之,当coredns解析k8s域名偶尔失败时,我们需要综合考虑可能的原因,并采取相应的措施进行故障排除和解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值