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

简介: 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官网

目录
相关文章
|
4月前
|
Kubernetes 供应链 安全
云原生环境下的容器安全与最佳实践
云原生时代,容器与 Kubernetes 成为企业应用核心基础设施,但安全挑战日益突出。本文探讨容器安全现状与对策,涵盖镜像安全、运行时防护、编排系统风险及供应链安全,提出最小权限、漏洞扫描、网络控制等最佳实践,并结合阿里云 ACK、ACR 等服务提供全链路解决方案,展望零信任、AI 安全与 DevSecOps 融合趋势。
219 4
|
5月前
|
缓存 Ubuntu Docker
Ubuntu环境下删除Docker镜像与容器、配置静态IP地址教程。
如果遇见问题或者想回滚改动, 可以重启系统.
402 16
|
6月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
209 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
6月前
|
存储 缓存 Serverless
【Azure Container App】如何在Consumption类型的容器应用环境中缓存Docker镜像
在 Azure 容器应用的 Consumption 模式下,容器每次启动均需重新拉取镜像,导致冷启动延迟。本文分析该机制,并提出优化方案:使用 ACR 区域复制加速镜像拉取、优化镜像体积、设置最小副本数减少冷启动频率,或切换至 Dedicated 模式实现镜像缓存,以提升容器启动效率和应用响应速度。
167 0
|
8月前
|
Kubernetes Cloud Native 区块链
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
260 0
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
540 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
350 3
实战~如何组织一个多容器项目docker-compose
|
存储 人工智能 调度
容器服务:智算时代云原生操作系统及月之暗面Kimi、深势科技实践分享
容器技术已经发展成为云计算操作系统的关键组成部分,向下高效调度多样化异构算力,向上提供统一编程接口,支持多样化工作负载。阿里云容器服务在2024年巴黎奥运会中提供了稳定高效的云上支持,实现了子弹时间特效等创新应用。此外,容器技术还带来了弹性、普惠的计算能力升级,如每分钟创建1万Pod和秒级CPU资源热变配,以及针对大数据与AI应用的弹性临时盘和跨可用区云盘等高性能存储解决方案。智能运维方面,推出了即时弹性节点池、智能应用弹性策略和可信赖集群托管运维等功能,进一步简化了集群管理和优化了资源利用率。
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
本文基于2024云栖大会演讲,探讨了软件供应链攻击的快速增长趋势及对企业安全的挑战。文中介绍了如何利用阿里云容器服务ACK、ACR和ASM构建云原生软件供应链安全,涵盖容器镜像的可信生产、管理和分发,以及服务网格ASM实现应用无感的零信任安全,确保企业在软件开发和部署过程中的安全性。

推荐镜像

更多
  • DNS