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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 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官网

目录
相关文章
|
9天前
|
安全 Cloud Native Shell
云上攻防:云原生篇&Docker容器逃逸
本文介绍了Docker的基本概念及其对渗透测试的影响,重点讲解了容器逃逸的方法。Docker是一种轻量级的容器技术,与虚拟机相比,具有更高的便携性和资源利用率。然而,这也带来了安全风险,特别是容器逃逸问题。文章详细描述了三种常见的容器逃逸方法:不安全的配置、相关程序漏洞和内核漏洞,并提供了具体的检测和利用方法。此外,还介绍了几种特定的漏洞(如CVE-2019-5736和CVE-2020-15257)及其复现步骤,帮助读者更好地理解和应对这些安全威胁。
云上攻防:云原生篇&Docker容器逃逸
|
13天前
|
Kubernetes Cloud Native 云计算
云原生之旅:构建你的第一个容器化应用
【8月更文挑战第75天】在数字化浪潮中,云原生技术成为推动企业创新和效率提升的关键动力。本篇文章将引导你开启云原生之旅,通过一个简易的步骤指南,帮助你构建并部署第一个容器化应用。我们将一起探索Docker容器的魅力,以及如何利用Kubernetes进行集群管理,实现服务的自动化部署、扩展和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供实践操作的启示和深入思考的契机。
|
17天前
|
消息中间件 负载均衡 Cloud Native
云原生之旅:从容器到微服务的架构演变
在数字化转型的风潮中,云原生技术以其灵活性、可扩展性和弹性而备受青睐。本文将通过一个虚拟的故事,讲述一个企业如何逐步拥抱云原生,实现从传统架构向容器化和微服务架构的转变,以及这一过程中遇到的挑战和解决方案。我们将以浅显易懂的方式,探讨云原生的核心概念,并通过实际代码示例,展示如何在云平台上部署和管理微服务。
|
17天前
|
运维 监控 Cloud Native
云原生之旅:从容器到微服务的演进之路
本文将引导您踏上云原生技术的探索之旅,从容器技术的核心概念出发,逐步深入到微服务架构的世界。我们将一起揭开云原生的神秘面纱,探索它如何改变现代软件的开发、部署和运维方式。通过本文,您将获得对云原生技术基础的深刻理解,并激发您进一步探索和应用这些前沿技术的兴趣和灵感。
|
17天前
|
运维 Kubernetes Cloud Native
云原生之旅:从容器化到微服务架构的演进之路
在数字化转型的浪潮中,云原生技术如同一股清流,为现代软件开发和运维带来革命性的变化。本文将通过深入浅出的方式,探索云原生的核心概念、关键技术以及它们如何共同塑造了今天的云基础设施和服务模式。我们将一起走进云原生的世界,了解它如何影响应用程序的设计、部署和扩展,并揭示这一趋势背后的哲学和实践。
26 1
|
23天前
|
Kubernetes Cloud Native 持续交付
云原生之旅:Docker容器化与Kubernetes集群管理
【9月更文挑战第33天】在数字化转型的浪潮中,云原生技术如同一艘航船,带领企业乘风破浪。本篇文章将作为你的航海指南,从Docker容器化的基础讲起,直至Kubernetes集群的高级管理,我们将一起探索云原生的奥秘。你将学习到如何封装应用、实现环境隔离,以及如何在Kubernetes集群中部署、监控和扩展你的服务。让我们启航,驶向灵活、可伸缩的云原生未来。
|
19天前
|
Cloud Native Java 对象存储
面向未来的架构设计:Spring Cloud和Netflix OSS在云原生环境下的发展趋势
面向未来的架构设计:Spring Cloud和Netflix OSS在云原生环境下的发展趋势
36 1
|
26天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
25天前
|
Cloud Native 持续交付 Docker
云原生之旅:从容器到微服务的演变之路
【9月更文挑战第31天】在数字化转型的浪潮中,云原生技术如星辰般熠熠生辉。本文将带你探索云原生的核心——容器化与微服务架构,揭示它们如何共同推动现代软件开发的革命。通过深入浅出的语言和生动的比喻,我们将一起走进云原生的世界,理解它的魅力所在,并见证代码示例如何将理论转化为实践。
42 4
|
24天前
|
负载均衡 Cloud Native 安全
云原生时代的开发者指南:从容器到服务网格
【9月更文挑战第32天】在云原生技术日益成为企业数字化转型的核心力量之际,了解其背后的理念与实践对于开发者而言至关重要。本文旨在通过浅显易懂的语言,为读者揭开云原生技术的神秘面纱,从容器化的基础谈起,逐步深入到服务网格的高级应用,带领开发者们在云原生的海洋中航行。
35 1

推荐镜像

更多