容器诊断工具之netshoot

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
6月前
|
存储 Prometheus 监控
Prometheus vs. ELK Stack:容器监控与日志管理工具的较量
随着容器化技术的广泛应用,容器监控与日志管理成为了关键任务。本文将对两种常用工具进行比较与选择,分别是Prometheus和ELK Stack。Prometheus是一款开源的监控系统,专注于时序数据的收集和告警。而ELK Stack则是一套完整的日志管理解决方案,由Elasticsearch、Logstash和Kibana三个组件组成。通过比较它们的特点、优势和适用场景,读者可以更好地了解如何选择适合自己需求的工具。
|
2月前
|
Ubuntu Linux pouch
Docker容器管理工具
文章介绍了Docker容器管理工具,以及早期使用的LXC容器管理工具,包括它们的安装、使用和相关技术特点。
76 10
Docker容器管理工具
|
2月前
|
Linux pouch 容器
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
关于如何在CentOS 7.6操作系统上安装和使用阿里巴巴开源的Pouch容器管理工具的实战教程。
123 2
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
|
6月前
|
存储 Kubernetes C++
【专栏】Kubernetes VS Docker Swarm了解两者特点,助力选取合适容器编排工具
【4月更文挑战第27天】对比Kubernetes和Docker Swarm:K8s在可扩展性和自动化方面出色,有强大社区支持;Swarm以简易用著称,适合初学者。选择取决于项目需求、团队技能和预期收益。高度复杂项目推荐Kubernetes,快速上手小项目则选Docker Swarm。了解两者特点,助力选取合适容器编排工具。
215 1
|
1月前
|
运维 Prometheus 监控
提升运维效率:容器化技术与自动化工具的结合
在当今信息技术飞速发展的时代,运维工作面临着前所未有的挑战。为了应对这些挑战,本文将探讨如何通过结合容器化技术和自动化工具来提升运维效率。我们将介绍容器化技术的基本概念和优势,然后分析自动化工具在运维中的应用,并给出一些实用的示例。通过阅读本文,您将了解到如何利用这些先进技术来优化您的运维工作流程,提高生产力。
|
3月前
|
存储 Kubernetes Cloud Native
容器管理工具Containerd
容器管理工具Containerd
|
3月前
|
Prometheus Kubernetes 监控
揭秘Kubernetes的秘密武器库:十大工具让你的容器编排如虎添翼!探索这些神秘而强大的工具,它们将如何彻底改变你的Kubernetes体验?
【8月更文挑战第19天】在容器世界里,Kubernetes是部署与管理容器化应用的首选平台。为了增强其功能,本文精选了十大必备工具:Helm简化复杂应用部署;Prometheus监控系统与应用指标;Grafana提供数据可视化;Fluentd统一日志管理;Envoy实现服务间通信与控制;Calico确保网络连接安全;CoreDNS提升DNS服务性能;Velero保障数据安全与迁移;Argo Workflows执行复杂工作流;Istio强化服务网格功能。这些工具覆盖部署、监控、日志等多个方面,助力提升Kubernetes的效率与稳定性。
76 3
|
3月前
|
Kubernetes 监控 Shell
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?
|
4月前
|
Docker Python 容器
容器化技术,特别是Docker,已经成为现代软件开发和部署的重要工具。
容器化技术,特别是Docker,已经成为现代软件开发和部署的重要工具。
|
4月前
|
缓存 测试技术 Linux
【好用的个人工具】部署Dokcer容器速查表工具
【7月更文挑战第13天】部署Dokcer容器速查表工具
36 1