用这个开源项目,网络小白也能搞定容器网络问题排查

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
性能测试 PTS,5000VUM额度
简介: 用这个开源项目,网络小白也能搞定容器网络问题排查

作者:溪恒、谢石、遐宇


Kubernetes 本身比较复杂,使用门槛较高,用户在开始容器化迁移时经常遇到各种各样的问题,由于缺乏故障定位的技能和工具,用户常常产生挫败感,甚至放弃业务容器化。其中网络问题表现尤为突出,Kubernetes 网络虚拟化导致网络问题排查的难度巨大。


KubeSkoop 是阿里云容器服务团队开源的 Kubernetes 容器网络诊断工具,支持主流的网络插件和云厂商的 Kubernetes 集群诊断。它正是为了降低网络问题排查难度,让没有网络知识的人也可以自动化地定位网络问题。


Kubernetes 容器网络诊断工具: https://github.com/alibaba/kubeskoop


KubeSkoop 能够自动构建出给定源和目的地址在容器网络中的访问路径,自动化地采集和分析链路上每一个网络节点的配置,结合 eBPF 内核监控以及 IaaS 层的网络配置检查,定位出导致网络不通的根因,极大地降低了网络问题定位的时间,即使没有任何网络技能的用户也可以使用。目前在阿里云容器服务的环境中,作为自运维工具解决了大量客户在大规模 Kubernetes 集群场景下遇到的网络问题。


本文将会对容器网络和传统定位手段带来的问题进行简单的介绍,以及对 KubeSkoop 的功能设计等方面进行总体解说。


容器网络


网络连通性-CNI

容器网络是 Kubernetes 集群中及其重要的一部分,包括了构成集群网络连通性的 CNI 插件、Service 服务发现机制、NetworkPolicy 网络策略等。Kubernetes 集群网络保证了每个 Pod 拥有自己独立的网络空间,并且能够与集群中的 Pod 和 Node 互相通信。


CNI 插件是构成集群容器网络中的核心,实现集群级别唯一的地址分配,将集群维度的网络打通。




不同的 CNI 插件,如 Flannel、Calico、Cilium、Terway 等,有其不同的网络实现,包括地址分配,网络虚拟化实现,网络连通性实现等。服务发现和网络策略除 CNI 插件外,Kubernetes 还提供了 Service 作为服务发现,以及 NetworkPolicy 作为网络策略能力。这些能力也是通过可替换的组件来实现的。




复杂性和网络问题定位

由于概念繁多,以及插件实现选择的丰富性,导致 Kubernetes 网络问题存在着相当的复杂性,包括:


  • 逻辑概念的复杂性
  • Ingress/Service/NetworkPolicy 配置灵活,可能导致配置错误/规则冲突等问题。
  • 使用 ServiceMesh 或第三方 CNI 插件,带来更复杂的网络策略和扩展能力。
  • 数据面实现的复杂性
  • 数据平面经过不同组件的多层处理,且存在多种实现。
  • 协议栈链路复杂,涉及到网卡驱动 /netfilter/route/bridge 等配置。
  • 不同云厂商的底层配置不同,安全组、路由表等配置复杂。


传统的容器网络问题定位手段,主要是通过抓包定位丢包点、压测复现、人工查配置等方式。存在着定位流程长、大量时间开销、人员经验要求高等问题。


image.png


在日常的工作中,排查容器网络问题占用了相当大部分的精力。因此,我们开发了 KubeSkoop 项目,来实现针对容器网络场景下问题的自动诊断系统。


KubeSkoop 功能


在我们的分析中,常见的 Kubernetes 网络问题可以分为以下两类:


  • 网络持续不通问题
  • 持续的无法访问:ping 不同、connect 超时、DNS 无法解析等。
  • 网络抖动问题
  • 偶发的网络问题:偶尔的业务超时、504、偶发 reset 等。
  • 网络性能问题:网络性能低、QPS 压不上去等。


在这些问题中,80% 都是可以依赖经验解决的已知问题。而问题的处理时间主要浪费在问题上报、信息收集和验证上。


KubeSkoop 即是针对这两类场景,通过信息收集(包括 CNI 插件、ServiceMesh、Kernel/eBPF、基础设施等)、推导和展示(容器服务智能运维、Prometheus、Grafana/Loki 等),实现全链路一键诊断、网络栈延迟分析、网络异常事件识别回溯,快速定位问题根因。




项目可分为两部分:诊断网络持续不通问题的 KubeSkoop 连通性诊断,和分析网络抖动问题的 KubeSkoop 深度网络监控。


连通性诊断

通过 KubeSkoop,能够对网络持续不通问题进行一键诊断。


用户通过指定网络不通的来源 IP 和目的 IP 发起一次诊断。在诊断中,KubeSkoop 将会自动构建网络访问链路,收集网络栈信息,分析链路问题。


同时,诊断包含了 Service、NetworkPolicy 等 Kubernetes 概念的分析,全面覆盖协议栈、底层 IaaS 的连通性相关检查,让用户无需了解网络插件的实现,也无需拥有复杂网络问题排查经验,就能够一键定位网络问题并自助解决。



连通性诊断目前提供了 Flannel、Calico(内部包括 Terway)网络插件插件的诊断支持,以及阿里云作为基础设施的支持。关于诊断能力的完整使用文档,可见:https://kubeskoop.io/docs/guide/diagnose/intro


深度网络监控

针对网络抖动问题,KubeSkoop 深度网络监控提供了基于 eBPF 的,Pod 级别的容器网络异常监控能力。


image.png


基于 eBPF,KubeSkoop 提供了精简、低开销的内核异常监控能力,覆盖驱动、netfilter、TCP 等完整协议栈,几十种异常场景的识别。同时,基于云原生部署,提供了与 Prometheus 等可观测体系的对接,支持网络问题的 Metrics 查看和事件回溯。




关于深度网络监控能力的指标透出,可参考:https://kubeskoop.io/docs/guide/exporter/exporter-description


KubeSkoop 设计


KubeSkoop 的设计,同样分为连通性诊断和深度网络监控两部分。


连通性诊断

工作流程





KubeSkoop 连通性诊断的工作流程可分为三步:拓扑构建、信息采集和链路模拟。


  • 拓扑构建

通过用户所提供的信息,再通过 API Server 获取集群内的 Pod/Node 资源和 Service/NetworkPolicy 规则,匹配对应的 CNI 插件、基础设施,构建集群内的访问关系。

  • 信息采集

在构建链路的过程中,KubeSkoop 会按需向集群中的节点下发信息采集任务。采集的内容包括运行时信息、协议栈采集(路由、iptables、IPVS 等)和基础设施信息(ECS metadata)。采集后的信息用于后续的网络拓扑构建和诊断模拟过程。

  • 链路模拟

KubeSkoop 会根据网络拓扑和所收集到到的信息,进行检查和模拟。包括对路径上的拓扑点和链路的转发模拟、对于 CNI 插件实现的模拟、云厂商的模拟,快速发现链路中存在的丢包或错误路由配置。


最终,结合网络拓扑以及诊断中发现的异常链路,KubeSkoop 会输出诊断结果和链路中存在的问题,或在 Web UI 中进行直观地展示。


扩展性


image.png


KubeSkoop 连通性诊断提供了对 CNI 插件和基础设施架构的扩展,能够轻松地在框架中提供对其它 CNI 插件和云厂商的支持。


深度网络监控

工作流程



KubeSkoop 深度网络监控通过在需要采集信息的集群节点上运行 KubeSkkop exporter 的方式,采集节点上 Pod 的网络监控信息并以多种形式导出,包括:


  • 深度容器网络采集
  • 通过 eBPF 采集协议栈关键点
  • 采集 procfs 下内核透出信息用于回溯
  • 采用 CRI 接口关联采集点和 Pod
  • 容器指标和异常事件预处理
  • 网络异常 Metrics 过滤,减少开销
  • 多指标聚合生成异常 Event
  • 网络 Metrics 和 Event 展示
  • 通过 Prometheus+Grafa 存储和回溯异常时间点指标
  • Grafana Loki 记录异常事件
  • KubeSkoop Inspector 查看实时异常事件流


实现

在实现中,采用了 eBPF 作为 KubeSkoop 主要数据的采集来源。eBPF 可以达到在内核中动态注入代码的目的,eBPF 代码在内核中执行效率高,并且可以通过 map 和 pert_event 与用户态通信。eBPF 还自带了校验机制,避免了因挂载的程序问题而导致宕机。



为了兼容性和性能考虑,在使用 eBPF 的过程中,我们也做了许多优化措施:

  • 采用 CO-RE 方式减少编译开销,提升内核兼容性
  • 减少在关键路径上的注入
  • 尽量在 eBPF 程序中过滤异常数据,以减少内存开销
  • 默认注入低开销程序,根据需求可动态插拔 eBPF 采集模块和修改过滤参数


未来规划


目前,KubeSkoop 项目仍旧处于早期阶段。我们下一步的规划包括:


  • 增加更多云厂商和网络插件的支持。
  • 支持模拟发包和追踪以定位未知问题点,缩小排查范围。
  • 提供 KubeSkoop Analysis 工具,智能分析 KubeSkoop 的指标和事件,降低诊断结果理解门槛。
  • 不限于网络诊断,增加存储、性能诊断。
  • 应用层感知能力,提供对7层协议(如 http、redis 等)的感知和处理。


KubeSkoop 的官网位于:https://kubeskoop.io


欢迎大家前来试用&提供建议&贡献代码!也欢迎通过搜索群号的方式加入 KubeSkoop 用户钉钉交流群~(群号:26720020148)


点击此处了解 KubeSkoop 更多详情

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
Cloud Native Linux 网络虚拟化
深入理解Linux veth虚拟网络设备:原理、应用与在容器化架构中的重要性
在Linux网络虚拟化领域,虚拟以太网设备(veth)扮演着至关重要的角色🌐。veth是一种特殊类型的网络设备,它在Linux内核中以成对的形式存在,允许两个网络命名空间之间的通信🔗。这篇文章将从多个维度深入分析veth的概念、作用、重要性,以及在容器和云原生环境中的应用📚。
深入理解Linux veth虚拟网络设备:原理、应用与在容器化架构中的重要性
|
1月前
|
容器 Perl Kubernetes
深入 Kubernetes 网络:实战K8s网络故障排查与诊断策略
本文介绍了Kubernetes网络的基础知识和故障排查经验,重点讨论了私有化环境中Kubernetes网络的挑战。首先,文章阐述了Kubernetes网络模型的三大核心要素:Pod网络、Service网络和CNI,并强调了其在容器通信和服务发现中的作用。接着,通过三个具体的故障案例,展示了网络冲突、主节点DNS配置更改导致的服务中断以及容器网络抖动问题的解决过程,强调了网络规划、配置管理和人员培训的重要性。最后,提到了KubeSkoop exporter工具在监控和定位网络抖动问题中的应用。通过这些案例,读者可以深入了解Kubernetes网络的复杂性,并学习到实用的故障排查方法。
146364 19
|
27天前
|
运维 监控 Java
网络之谜:记一次失败排查的故事
【6月更文挑战第6天】文章详述了一次故障排查经历,故障表现为客户端接口调用延迟,服务器报错(Broken pipe和Connection reset by peer),Nginx连接数异常增加。通过pinpoint平台发现三种错误类型。排查过程涉及数据库、中间链路和第三方服务,但未找到根本原因。监控手段不足(如无法生成Java dump)和故障难以复现增加了难度。尽管最终靠重启服务暂时解决,但提出改进监控和提升故障排查技巧的重要性。总结中强调了故障排查的复杂性、所需专业知识及冷静分析的态度。
|
28天前
|
Kubernetes 网络协议 Cloud Native
Kubernetes网络问题排查分享两则(1)——calico特定场景下的网络性能问题
在对Kubernetes项目[kosmos](https://github.com/kosmos-io/kosmos)与Calico网络性能进行对比测试时,发现kosmos在跨集群容器网络的性能显著优于Calico的集群内网络(约6Gbit/s对比2.9Gbit/s)。物理机网络测试达到9.38Gbit/s,显示Calico有68%的性能损耗。问题定位到网卡的checksum/offload参数,尝试用`ethtool`调整后虽短暂提升,但随后恢复原状。转载自:https://mp.weixin.qq.com/s/XsQZCSqZAXJK46zqc7IpLw
|
29天前
|
弹性计算 DataWorks 安全
DataWorks产品使用合集之打通网络时,如何排查安全组问题
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
19 1
|
2月前
|
弹性计算 安全 微服务
【阿里云云原生专栏】容器网络技术前沿:阿里云Terway网络方案详解
【5月更文挑战第26天】阿里云Terway是高性能的容器网络方案,基于ECS的ENI实现,提供低延迟高吞吐的网络服务。它简化网络管理,实现安全隔离,并与阿里云服务无缝集成。Terway由CNI、Node和Controller组成,适用于微服务、混合云和多租户环境,为企业数字化转型中的复杂网络需求提供强大支持。
244 1
|
1月前
|
安全 数据安全/隐私保护 Docker
Docker 容器连接:构建安全高效的容器化网络生态
Docker 容器连接:构建安全高效的容器化网络生态
|
2月前
|
运维 安全 Linux
深入理解Docker自定义网络:构建高效的容器网络环境
深入理解Docker自定义网络:构建高效的容器网络环境
147 6
|
2月前
|
大数据 Linux Docker
mac docker 宿主机和容器间网络打通
mac docker 宿主机和容器间网络打通
27 0
|
2月前
|
监控 安全 云计算
云端防御战线:云计算环境下的网络安全策略构建高效稳定的Docker容器监控体系
【5月更文挑战第27天】 在数字化时代的浪潮中,云计算已成为企业与个人存储和处理数据的重要平台。然而,随着云服务使用率的飙升,网络威胁也愈发狡猾且复杂。本文将深入探讨在云计算环境中维护网络安全的挑战及策略,重点分析信息安全的关键组成部分,并提出多层次防御模型以增强云环境的数据保护能力。通过剖析最新的安全技术与实践,我们旨在为读者提供一套全面的网络安全解决方案蓝图。