集群dns切换后,Pod解析用的dns依然不对问题分析

1.集群dns切换后,Pod解析用的dns依然不对问题分析

背景描述

最近,遇到了一个域名解析的问题,明明网络已经更换了DNS服务器,并且旧的DNS服务器已经关闭。但是,k8s集群里的pod一直无法正常解析。

尝试修改所有宿主机的/etc/resolv.conf 文件,都已指向新DNS,并且手工验证解析正常,但pod还是无法正确解析,进入pod里检查解析可以正常去找coredns的服务ip,但检查coredns时发现解析找的还是老的dns服务器的ip。

问题分析

经过分析,在Kubelet配置中通过使用–cluster-dns=xxx.xx.xx.xx参数指定的coredns地址会被写入容器的/etc/resolv.conf配置中。

...........................................................................................................................

并且在kublet配置中通过resolv-conf参数可以指定一个主机上的DNS配置文件。

但在默认DNS策略下主机上DNS配置文件中仅仅只有search部分会被加到容器内nameserver不会被添加到容器中

要想添加自定义的上游DNS可以通过修改coredns的configmap配置来实现。

...........................................................................................................................

解决思路

  • 直接修改coredns上游dns服务器。

  • 修改coredns添加 hosts 解析

  • 根据域名指定上游dns服务器

这里,我采用第三种方法

修改coredns 解析指定域名走指定dns


kubectl -n kube-system edit configmap coredns

example.com:53 {
        errors 
        cache 30
        forward . {
         10.231.58.6
         10.231.58.12
       }
        reload
    }

example.com 为需要解析的域名
10.231.58.6 为外部dns服务器

注:如果想要监听所有域名,可以使用 .:53。

修改后的configmap文件


apiVersion: v1
kind: ConfigMap
metadata:
  annotations:
  labels:
    eks.amazonaws.com/component: coredns
    k8s-app: kube-dns
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        errors
        health
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods insecure
          upstream 172.16.0.1
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        proxy . 172.16.0.1
        cache 30
        loop
        reload
        loadbalance
    }
    example.com:53 {
        errors 
        cache 30
        forward . {
         10.231.58.6
         10.231.58.12
       }
        reload
    }
	 consul.local:53 {
        errors
        cache 30
        proxy . 10.150.0.1
    }

配置解释

  • .:53 表示在 53 端口上监听所有域名的查询。

  • errors 插件用于记录错误。

  • health 插件用于健康检查。

  • kubernetes 插件用于 Kubernetes 服务发现。

  • prometheus 插件用于向 Prometheus 公开 CoreDNS 指标。

  • forward . 10.231.58.6 表示将所有的 DNS 查询转发到 10.231.58.6。

  • cache 30 表示设置缓存时间为 30 秒。

  • loop、reload 和 loadbalance 插件用于提供额外的功能,如防止循环、配置重载和负载均衡。

逐个重启 coredns 容器


kubectl get pod -n kube-system |grep coredns
kubectl delete pod core-dns-xxxx -n kube-system

验证解析是否正常


kubectl run busybox --restart=Never --image=busybox -- sleep 3600
kubectl exec busybox -- nslookup example.com

转载:集群dns切换后,Pod解析用的dns依然不对问题分析

  • 35
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要排查KubernetesDNS解析和kube-proxy问题,可以按照以下步骤进行: 1. 检查DNS配置:首先,请确保Kubernetes集群中的DNS配置正确。可以使用以下命令检查kube-dnscorednsPod是否正在运行: ``` kubectl get pods -n kube-system -l k8s-app=kube-dns ``` 如果Pod没有处于运行状态,可以使用以下命令查看它们的详细信息: ``` kubectl describe pod -n kube-system <kube-dns-pod-name> ``` 确保DNS Pod没有任何错误或异常,并且它们的IP地址与集群中其他组件的IP地址是可访问的。 2. 检查DNS解析配置:确保你的Service和PodDNS配置正确。可以使用以下命令检查Service和PodDNS名称是否正确解析IP地址: ``` kubectl run -it --rm --restart=Never busybox --image=busybox:1.31 nslookup <service-name> ``` 这将在一个临时Pod中执行nslookup命令来检查DNS解析情况。 3. 检查kube-proxy配置:确认kube-proxy的配置正确,并且它正在正常运行。可以使用以下命令检查kube-proxy的状态: ``` kubectl get pods -n kube-system -l k8s-app=kube-proxy ``` 如果kube-proxy Pod没有处于运行状态,可以使用以下命令查看它们的详细信息: ``` kubectl describe pod -n kube-system <kube-proxy-pod-name> ``` 确保kube-proxy没有任何错误,并且它正在监听正确的网络接口。 4. 检查网络策略和防火墙:如果你启用了网络策略(NetworkPolicy),请确保它允许从源Pod访问目标PodDNS。另外,检查防火墙规则是否允许DNS流量通过。 这些步骤可用于排查KubernetesDNS解析和kube-proxy问题。如果问题仍然存在,请提供更多详细信息,以便我能够提供更准确的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值