专栏首页K8S疑难杂症POD DNS配置讲解&DNS解析不通的案例
原创

POD DNS配置讲解&DNS解析不通的案例

本文将基于Dockerd运行时来进行展开描述。

Docker容器内的resolv.conf

(这里以一个docker container为例来描述)

在节点上运行一个nginx container。

$ docker run -d nginx:latest 
da30536de35915abe1214a25e1c6278f95e5c8af157517ddefc5eaa1d3b36d93

在容器内执行findmnt。

$ docker exec  da30536de35915abe1214a25e1c6278f95e5c8af157517ddefc5eaa1d3b36d93 findmnt
...

|-/etc/resolv.conf                    /dev/vda1[/var/lib/docker/containers/da30536de35915abe1214a25e1c6278f95e5c8af157517ddefc5eaa1d3b36d93/resolv.conf] ext4    rw,noatime
|-/etc/hostname                       /dev/vda1[/var/lib/docker/containers/da30536de35915abe1214a25e1c6278f95e5c8af157517ddefc5eaa1d3b36d93/hostname]    ext4    rw,noatime
`-/etc/hosts                          /dev/vda1[/var/lib/docker/containers/da30536de35915abe1214a25e1c6278f95e5c8af157517ddefc5eaa1d3b36d93/hosts]       ext4    rw,noatime
...

可以看到,容器内的/etc/resolv.conf 是挂载到了宿主机文件上(/var/lib/docker/containers/da30536de35915abe1214a25e1c6278f95e5c8af157517ddefc5eaa1d3b36d93/resolv.conf)。

(进一步看下文件内容,会发现同节点上的/etc/resolv.conf 内容一致)

在Docker Container创建时,Docker会基于节点上的/etc/resolv.conf文件来生成容器所需的resolv.conf,生成的resolv.conf被放到了container的配置目录下(/var/lib/docker/contaienrs/...)。

另外,也可以通过如下命令查看某个Docker Container resolv.conf的真实源。

$ docker inspect da30536de35915abe1214a25e1c6278f95e5c8af157517ddefc5eaa1d3b36d93 -f {{.ResolvConfPath}}

Pod内的resolv.conf

pod支持以下4种dnsPolicy:

  • "Default": Pod 从运行所在的节点继承域名解析配置。
  • "ClusterFirst":  默认的配置,所有请求会优先在集群所在域(比如cluster.local)查询,如果没有才会转发到上游DNS。
  • "ClusterFirstWithHostNet":对于以 hostNetwork 方式运行的 Pod,应显式设置其 DNS 策略 "ClusterFirstWithHostNet";否则将从运行所在的节点上继承域名解析配置。
  • "None": 允许用户单独给 Pod 配置DNS。

当pod调度到节点上之后,kubelet会来给pod配置具体的resolv.conf内容:

1 kubelet会先创建并运行pod的sandbox,然后获取到sandbox的ResolvConfPath(/var/lib/docker/containers/xxxxxxx/resolv.conf),接下来,把dns policy的具体内容写到sandbox的ResolvConfPath(直接覆盖写)。

2 kubelet继续创建同一个pod中的其他container,并且使用相同的ResolvConfPath(同一个pod的所有容器的ResolvConfPath在宿主机上的真实源是同一个)。

所以,可以看到,pod内的resolv.conf是pod在创建的时候就确定下来的

DNS不通的案例

问题描述:

客户创建好集群之后,手动改了节点上的/etc/resolv.conf文件,将nameserver配置成自建的域名解析,导致在pod内(dnsPolicy是ClusterFirst)无法正常解析内部域名。

问题根因:

业务pod(dnsPolicy是ClusterFirst)会将DNS请求发送给集群中的Coredns,由于是内部域名,Coredns会转发请求到/etc/resolv.conf(coredns pod内部的resolv.conf),而不是Coredns pod实例所在节点上的resolv.conf,导致客户无法解析内部域名。

image.png

修复方案:

重建Coredns pod实例。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 贝壳找房基于Milvus的向量搜索实践(二)

    互联网垂直搜索领域,特别是电商行业,对于特定业务的搜索,热数据的量级一般是可控的(百万级、千万级),一般情况下,对响应时间和整体的吞吐量(QPS)都有比较高的要...

    Zilliz RDS
  • Kubernetes-kube-dns 和服务发现

    kubernetes 提供了 service 的概念可以通过 VIP 访问 pod 提供的服务,但是在使用的时候还有一个问题:怎么知道某个应用的 VIP?比如我...

    菲宇
  • Kubernetes 服务发现

    服务发现就是一种提供服务发布和查找的服务,是基于服务架构(SOA)的核心服务,需具备以下关键特性:

    Edison.Ma
  • Kubernetes DNS服务简介

    域名系统(DNS)是一种用于将各种类型的信息(例如IP地址)与易于记忆的名称相关联的系统。默认情况下,大多数Kubernetes群集会自动配置内部DNS服务,以...

    爆栈工程师
  • Kubernetes 服务发现之 coreDNS

    服务发现是 K8s 的一项很重要的功能。K8s 的服务发现有两种方式,一种是将 svc 的 ClusterIP 以环境变量的方式注入到 pod 中;一种就是 D...

    CS实验室
  • 扩展到新领域-Istio中的智能DNS代理

    DNS解析是Kubernetes上任何应用程序基础架构的重要组成部分.当您的应用程序代码尝试访问Kubernetes集群中的另一个服务甚至是Internet上的...

    有点技术
  • 聊聊 resolv.conf 中 search 和 ndots 配置

    Kubernetes 集群中,域名解析离不开 DNS 服务,在 Kubernetes v1.10 以前集群使用 kube-dns dns服务,后来在 Kuber...

    YP小站
  • k8s内网和办公网络的打通实践

    近期工作中出现了一个问题:某个旧服务中用到了redis,但是在前期项目容器化改造部署阶段研发同事并没有说明需要用到redis,直至部署生产prod环境出现问题。...

    仙人技术
  • TKE常见问题以及故障定位

    建议:暂时没有完美解决方案,可通过 Pod 反亲和打散 client 避免流量集中规避

    蒋经纬
  • 容器DNS介绍

    DNS服务是域名系统的缩写, 英文全称:Domain Name System,将域名和IP地址相互映射。在容器环境中,DNS至关重要,例如在Kubernetes...

    Se7en258
  • 上酒桌,今儿咱保证把容器SDN的这事一把唠清楚!

    容器的SDN 很多人都说2017将是容器年,大卫也这么认为。但在很长一点时间里,容器与虚拟化都是相互依存,相互补充的问题。 之前笔者发表过一篇文章,放开眼界,看...

    魏新宇
  • 「走进k8s」Kubernetes1.15.1的服务发现kubedns(33)

    PS:通过dns可以访问同一个namespace,dns跟网络经常使用的域名方式很类似的,就是域名dns找到对应的服务,性质是一样的。下节咱们说说如果不在同一个...

    IT架构圈
  • kubernetes上的服务发现-CoreDNS配置

    Kubernetes包括用于服务发现的DNS服务器Kube-DNS。 该DNS服务器利用SkyDNS的库来为Kubernetes pod和服务提供DNS请求。S...

    菲宇
  • TKE之DNS解析

    TKE集群中使用的DNS解析是采用coreDNS,Kubernetes 1.11 和更高版本中,CoreDNS 位于 GA 并且默认情况下与 kubeadm 一...

    聂伟星
  • TKE操作指南 - TKE K8S问题排查(十八)

    问题描述:查看pod日志报错,Normal Killing 39s (x735 over 15h) kubelet, 10.179.80.31 Kill...

    亮哥说TKE
  • Kubernetes 中的 DNS 查询

    在 Kubernetes 中部署应用的主要优势之一就是可以做到无缝的应用发现。Service 的概念使群集内通信变得容易,Service 代表了支持一组 Pod...

    我是阳明
  • 学练结合,快速掌握Kubernetes Service

    今天这篇文章里我们来讲一下Kubernetes里的Service对象。其实前面的文章《Kubernetes初体验--部署运行Go项目》里我们已经与Service...

    KevinYan
  • Kubernetes服务发现入门:如何高效管理服务?

    愈发复杂的应用程序正在依靠微服务来保持可扩展性和提升效率。Kubernetes为微服务提供了完美的环境,并能够让其与Kubernetes的工具组件和功能兼容。当...

    CNCF
  • 漫谈腾讯微服务平台 TSF Mesh 统一容器和虚拟机之路

    随着业务的增长,一些传统企业对诸如灰度发布、服务路由、服务熔断、服务限流等服务治理的需求越来越强烈,但他们又不想对业务代码做大量的改造,因而 Service M...

    腾讯云中间件团队

扫码关注云+社区

领取腾讯云代金券