容器诊断工具之netshoot

简介: netshoot介绍netshoot是一款开源的容器网络诊断工具,本质上是一个容器,里面默认安装了一些常用网络诊断工具,如tcpdump、netstat等,被称为网络排障瑞士军刀容器。netshoot众所周知,容器下网络空间是相互隔离的,与宿主机的网络空间也是隔离的,往往需要通过工具进入容器空间排查...

netshoot介绍

netshoot是一款开源的容器网络诊断工具,本质上是一个容器,里面默认安装了一些常用网络诊断工具,如tcpdump、netstat等,被称为网络排障瑞士军刀容器。

众所周知,容器下网络空间是相互隔离的,与宿主机的网络空间也是隔离的,往往需要通过工具进入容器空间排查问题,但是业务容器不一定安装了常见的调试工具,netshoot在这样的场景提供了很大的便利。

  • 提供了“瑞士军刀”式的开箱即用的工具箱,包括各类网络诊断工具。

  • 通过与业务容器共享网络命名空间,可以不重启、“不侵入”业务容器,对容器网络进行调试排错。

  • K8s环境下pod中的容器共享网络命名空间,netshoot可以以sidecard对业务容器进行排错。

容器网络介绍

首先来简单介绍容器网络,容器本质是进程,通过Cgroup来进行资源限制、通过Namespace来进行隔离,容器网络也是通过给不同的容器创建不同的网络命名空间来进行隔离。

宿主机通过Linux veth pair和docker0网桥来建立与容器的通信,同宿容器主机通信和不同主机容器通信都可以进行通信,也是K8s环境下各种Overlay网络实现的基础。

不同的网络命名空间下都可以有自己的网络设备、路由表、协议栈、IPtable等。相互之间都是隔离的。直接在容器外围对容器网络进行排障往往不够直接,比较简单的方式就是直接进入到容器的网络空间,在容器的网络空间中,可以使用之前主机上的各类网络工具对容器的网络进行调试。

netshoot镜像构成

netshoot代码比较少,核心代码就是这样一个dockerfile,可以看到里面安装了很多的工具,与另一款Linux系统瑞士军刀busybox不同,netshoot主要关注在网络工具。

netshoot的工具选择策略

网络问题往往会影响到应用的性能,常见的网络问题包括延迟、路由、DNS解析、防火墙等。netshoot以此为出发点,选择的网络相关的工具很大部分参考性能观测工具集。

netshoot使用方式

netshoot的使用场景主要包括docker、DockerCompose、K8s等场景。

docker环境下netshoot可以通过docker的共享网络参数与容器网络命名空间共享。

Docker下网络排障

# 调试某个容器网络
docker run -it --net container:<container_name> nicolaka/netshoot
# 调试宿主机网络
docker run -it --net host nicolaka/netshoot

--net是docker运行时的参数,主要包括none、bridge、host、container等,表示容器启动时网络配置,其中:

  • none:表示关闭容器的网络,容器将不能进行通信。

  • bridge:表示通过veth接口进行网络配置,是容器与外界通信的最常见方式,示意图见上方容器网络介绍

  • host:表示容器使用主机网络,netshoot通过这种方式来对主机的网络进行排障。

  • container:表示复用另一个容器的网络,netshoot也是通过这种方式对其他容器的网络进行排障。

用法举例:如nestat、nmap等,更多的示例和用法可以参考github

Docker Compose

docker compose中netshoot容器是通过networker_mode: service:nginx与nginx容器进行网络共享,从而实现对nginx容器的网络抓包。

Kubernetes

  • K8s环境中,通过创建临时容器的方式来调试

# 临时容器
kubectl run tmp-shell --rm -i --tty --image nicolaka/netshoot
# 在宿主机网络下
kubectl run tmp-shell --rm -i --tty --overrides='{"spec": {"hostNetwork": true}}' --image nicolaka/netshoot
  • 通过sidecar方式部署,基于K8s下pod中的容器间天生共享网络命名空间。

总结

  • 简单却流行:netshoot实现原理虽然比较简单,包了一些网络工具,但却也有不少的Star数。同时,另一个K8s环境下的排障工具kubectl-debug也借助netshoot进行pod的诊断调试。

  • 纯手工操作:对于喜欢手动操作的人来说,netshoot确实像瑞士军刀一样方便,手到擒来。遇到问题,直接进入容器进行调试,方便快捷。

  • 与可观测性系统对比:可观测性通过白盒的方式,让业务暴露自身的状态指标,来进行健康状态的诊断,同时对于指标可以进行一些智能化的监控告警;站在使用者的角度,可观测性系统可以将错误异常推送过来,是一种被动发现的机制,可以减轻使用者的负担,从这个角度看,netshoot更像是一种主动诊断的机制。

  • 还在流行:在netshoot中一个issue提到将几个月前刚开源的eBPF工具eCapture(通过ePBF技术获取TLS加密的明文捕获)加入到工具集中,可以看出netshoot生命力还是比较旺盛。

参考

https://github.com/nicolaka/netshoot

https://github.com/aylei/kubectl-debug

https://github.com/ehids/ecapture

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
4天前
|
缓存 监控 网络性能优化
从内核的视角观测容器——SysOM 容器监控
从内核的视角观测容器——SysOM 容器监控
|
4天前
|
运维 监控 数据可视化
日志管理:收集和分析Docker容器日志
容器化技术的普及使得应用的部署和管理更加便捷,但随之而来的挑战之一是有效地管理和分析容器产生的大量日志。本文将深入探讨Docker容器日志管理的重要性,介绍常用的日志收集工具,以及如何分析和利用这些日志数据,提供更为丰富和实际的示例代码,帮助大家更好地理解和应用日志管理的关键技术。
|
4天前
|
监控 安全 Linux
|
存储 消息中间件 分布式计算
容器持久化存储-容器有状态应用调研报告
容器持久化存储-容器有状态应用调研报告
51877 5
容器持久化存储-容器有状态应用调研报告
|
云安全 监控 供应链
容器安全-如何为运行中的容器提供主动防护|学习笔记
快速学习容器安全-如何为运行中的容器提供主动防护
140 0
容器安全-如何为运行中的容器提供主动防护|学习笔记
|
存储 SQL Prometheus
容器监控与分析实践 | 学习笔记
快速学习容器监控与分析实践,介绍了容器监控与分析实践系统机制, 以及在实际应用过程中如何使用。
205 0
容器监控与分析实践 | 学习笔记
|
分布式计算 资源调度 Kubernetes
K8S 初识_容器管理工具及容器编排管理工具介绍 | 学习笔记
快速学习 K8S 初识_容器管理工具及容器编排管理工具介绍
234 0
|
Web App开发 Kubernetes 负载均衡
|
Prometheus 监控 Kubernetes
容器下监控体系的构建-概览
kubernetes下监控体系的构建 整体结构如图所示,下面我们来分别介绍每一部分的构建方案,以及相关的参考 k8s本身的监控 k8s事件监控体系的补全 大家都知道k8s本身的事件体系还是比较强大的,非常适合其本身的声明式API的特征。
919 0
容器下监控体系的构建-概览
|
容器 Docker Linux
【DockerCon2017技术解读】使用Moby工具和Linuxkit定制容器系统
DockerCon2017的技术解读中,阿里巴巴技术专家王炳燊为大家解读了在DockerCon2017中新发布的Moby项目和Linuxkit项目,为大家详细地介绍了Moby与Docker的区别,以及Linuxkit的优势所在,并通过示例介绍了如何利用Moby工具和Linuxkit定制容器系统。
629 0