基于eBPF的云原生可观测性开源项目Kindling之容器环境下的DNS问题排查

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: DNS是容器化环境下很重要且使用频繁的功能,但DNS问题却又是比较难以排查的,本文主要介绍DNS问题排查。

问题描述

最近在协助用户做业务的容器化迁移时,对业务做压力测试,发现ui服务的/homepage接口出现了偶发性的响应请求超时。给大家分享下排查问题过程。

问题定位

先通过skywalking看看相关ui的/homepagetrace,通过下图可以看到总耗时超过5828ms。

发现延时出现在ui/homepage的self上,共耗时4005ms。其他依赖调用的时间只用了1823ms。可以确认从ui/homepage调用app/homepage的请求发生到请求数据传输完成耗时太多。现在没有更好的方法进一步排查具体的耗时情况,进入ui容器内,只能使用curl访问app/homepage看看。

$curl -4 -w "@curl-format.txt" -o /dev/null -l "http://app.default.svc.cluster.local:8091/homepage"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:03 --:--:--     0
time_namelookup: 4.150
time_connect: 0.800
time_appconnect: 0.000
time_redirect: 0.000
time_pretransfer: 0.021
time_starttransfer: 0.000
----------
time_total: 4.981

直接在pod中使用tcpdump抓包,使用wireshark分析结果如下:

  1. app.default.svc.cluster.local 域名解析成IP的总共耗时4.1s。
  2. 在app.default.svc.cluster.local 的基础上,依次添加default.svc.cluster.local、svc.cluster.local、cluster.local、openstacklocal 后缀进行域名解析,都失败了。
  3. 最后一次使用app.default.svc.cluster.local 进行解析成功了。

为啥会有多次请求DNS,百度了下发现K8S的DNS解析机制,和resolv.conf文件中ndots和search两个参数的机制作用有关系。查看容器的/etc/resolv.conf配置:

nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local openstacklocal
options ndots:5 single-request-reopen
ndots: 5 表示如果域名包含的 "." 少于5个,则先添加 search 后缀,再使用绝对域名;如果域名包含的 "." 大于等于5个,则先使用绝对域名,再添加 search 后缀。

原因是app.default.svc.cluster.local少于5个点,所以先加search后缀。最后再使用app.default.svc.cluster.local进行解析。

解决方案

  1. 使用简短域名,app.default.svc.cluster.local改成app
  2. 修改/etc/resolv.conf配置,将ndots: 5 修改为 ndots: 4

问题复盘

DNS是Kubernetes集群中至关重要的基础服务之一,因为K8S的机制,造成DNS域名解析请求是Kubernetes最高频的网络行为之一。如果DNS有问题,很容易出现性能问题。但DNS很难通过apm等监控工具的trace定位问题,只能通过登录容器进行抓包分析,这种除了耗时耗力外,很可能相关的POD都已经消亡了。

可以实时监控DNS吗?

Kindling的eBPF探针可以实时获取到被监控POD间的所有请求,包括DNS请求。部署完成后,通过Kindling来排查DNS问题就很方便了。DNS Request Detiail 面板显示了单个K8S集群下DNS请求的监控数据。可以在此面板中分析网络的DNS性能。面板显示了DNS的关键KPI指标,例如:请求量、延时、错误数等。通过面板可以清晰了解DNS的运行状态,像前面介绍的场景可以直接看到发起了4次状态为NXDomain的DNS解析。下面通过一段视频简单介绍一下Kindling轻量版的DNS面板功能。


Kindling项目地址:Kindling

在云可观测性方面有任何疑问欢迎与我们联系:Kindling官网

目录
相关文章
|
7月前
|
监控 Cloud Native 安全
浅谈云原生可观测性
【1月更文挑战第23天】
|
2月前
|
Cloud Native API C#
.NET云原生应用实践(一):从搭建项目框架结构开始
.NET云原生应用实践(一):从搭建项目框架结构开始
|
4月前
|
Kubernetes Shell Docker
在K8S中,如果容器没有bash命令,如何进⼊容器排查问题?
在K8S中,如果容器没有bash命令,如何进⼊容器排查问题?
|
4月前
|
Kubernetes 监控 Cloud Native
eBPF技术大揭秘:一张全景图彻底改变Kubernetes问题排查,助你成为云原生时代的超级英雄!
【8月更文挑战第8天】在云原生时代,Kubernetes作为容器编排的标准,其问题排查变得日益复杂。eBPF技术无需改动内核即可编写高效、安全的内核程序,实现系统细粒度观测与控制。近期发布的基于eBPF的Kubernetes问题排查全景图,展示了如何利用eBPF监控资源使用、网络性能及调度策略等,例如通过eBPF程序监控CPU使用率。此全景图有助于快速定位如高CPU使用率等问题所在Pod,进而优化配置或调整调度。
123 8
|
5月前
|
存储 监控 Cloud Native
kubevela可观测体系问题之KubeVela云原生时代可观测性挑战的问题如何解决
kubevela可观测体系问题之KubeVela云原生时代可观测性挑战的问题如何解决
|
4月前
|
Kubernetes 网络协议 网络安全
在K8S中,容器提供一个服务,外部访问慢,到底是容器网络问题?还是容器服务问题?这种怎么排查?
在K8S中,容器提供一个服务,外部访问慢,到底是容器网络问题?还是容器服务问题?这种怎么排查?
|
4月前
|
Kubernetes 监控 Shell
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?
|
5月前
|
存储 Kubernetes Cloud Native
云原生周刊:Score 成为 CNCF 沙箱项目
以下是内容的摘要,格式为Markdown: 开源项目: - [Trident]:NetApp维护的开源存储解决方案,支持容器化应用的持久化存储,兼容CSI接口。 - [Monokle]:Kubernetes YAML编辑器,简化配置创建、分析和部署。 - [Platform Aware Scheduling]:模块化策略驱动的Kubernetes调度器扩展,考虑平台特性。 - [cdebug]):容器和Pod故障排查工具,提供端口转发、文件系统导出等功能。
|
7月前
|
Java Serverless Apache
9 个开源项目、25 个课题可选丨欢迎报名阿里云云原生开源之夏
2024 开源之夏,阿里云云原生应用平台团队开放了包括 Apache Dubbo/Apache RocketMQ/Apache Seata/Higress/iLogtail /Nacos/Sentinel/Spring Could Alibaba / Serverless Devs 在内,涉及微服务、消息、可观测、Serverless 4 大技术领域的 9 个开源项目。
1443 10
|
5月前
|
SQL Cloud Native 关系型数据库
云原生数据仓库使用问题之实例查询变慢该如何排查
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。

推荐镜像

更多