• 对coredns解析外部域名的一点理解


    Coredns 解析流程:

    1、K8s集群内部服务解析-----》直接请求 coredns 服务ip;

    K8s 集群以外的域名解析-------》会coredns configmap中找到forward配置或proxy配置的上游dns ip-----》如果没有proxy配置,只有forward转发的/etc/resolv.conf这个配置里有记录,不过并没有看到明确dns ip地址,这句意思是转发到pod内部的/etc/resolv.conf配置文件,即:解析不到的域名会在pod中的/etc/resolv.conf中寻找解析的dns(如下图)-------》而coredns的po又无法进入查看,我们可以docker inspect  coredns容器id看看能否发现线索------》会发现有一行挂载路径是/var/lib/container/**container id**/resolv.conf的文件,cat这行文件其实就是宿主机的resolv.conf------》我们顺着container id,docker ps | grep 以下会发现这个id是coredns的POD volume,这里有一个概念,在k8s里pod和POD会共享数据卷和网络,所以这个文件也是coredns容器内部的解析配置,docker在启动容器时会将容器宿主机上resolv.conf配置加载到容器内部,这也是为什么配置文件里看不到挂载本地resolv.conf文件的原因-----》所以forward . /etc/resolv.conf这个配置可以理解为,找不到的域名解析最终会请求到容器所在的宿主机resolv.conf配置里,如果宿主机里也没有的话,那这条记录就解析失败了

    这里有两个注意点:

    busybox镜像不建议做nslookup 测试域名,或者若用就用2022-10-30后的最新版,旧版本存在解析失败的bug

    如果启动coredns后想暂时停止dns外部域名解析:注释pod所在宿主机的resolv.conf中的记录没用,因为配置已经被加载到容器中,并且不会像 coredns的configmap中的配置那样被热加载。

    描述的有点糙,有不对的地方请交流。

  • 相关阅读:
    终于有人把Java程序员必学知识点整理出来了,令人有如醍醐灌顶
    手写 Vuex4.x 核心(Vuex源码实现)
    1057 Stack
    圣普伦数字项目管理大师课:3重核心技能,2个月学会,这波很值
    webpack前端性能优化的操作有哪些?
    充气泵方案设计—汽车打气泵方案开发
    什么是线程池?
    V100 GPU服务器安装GPU驱动教程
    mysql数据库基础:视图、变量
    美团VS饿了么,到底谁更胜一筹?
  • 原文地址:https://blog.csdn.net/womenrendeme/article/details/127598908