[转帖]使用 nsenter、dig 和 tcpdump 调试 Kubernetes 网络问题

使用,nsenter,dig,tcpdump,调试,kubernetes,网络,问题 · 浏览次数 : 0

小编点评

当您在 Kubernetes 集群中运行一个微服务时,您可能需要使用 nsenter 命令来调试应用程序和系统问题。 **nsenter 命令的使用:** - 运行 nsenter 命令时,您需要指定命名空间。 - 使用 "-t"选项指定进程到目标命名空间的名称。 - 使用 "-n"选项指定进入网络命名空间的选项。 - 使用 "-i"选项指定捕获进出容器的流量。 **使用 nsenter 调试 Kubernetes 问题的方法:** 1. 启动 Kubernetes 集群。 2. 启动您要调试的应用程序。 3. 使用 nsenter 命令访问运行服务的主机,例如: ```bash nsenter -t 1294 -n dig +short @10.10.0.1 google.com ``` 4. 在 nsenter 的命令中指定您的问题。 **使用 nsenter 调试应用程序和系统问题的优点:** - 无需接触容器。 - 仅运行应用程序所需的最少位数的容器。 - 使用 nsenter 命令可以捕获进出容器的流量。

正文

https://zhuanlan.zhihu.com/p/410217354

 

使用 nsenter、dig 和 tcpdump 调试 Kubernetes 网络问题

作为 Kubernetes 管理员,我经常发现自己需要调试应用程序和系统问题。我遇到的大多数问题都可以通过 Grafana 仪表板和 Prometheus 指标解决,或者通过运行一个或多个 Elasticsearch 查询来检查日志。但有时我需要更深入地检查正在运行的 Pod 内的活动。许多调试指南使用 kubectl exec 命令在容器内运行一个或多个命令:

$ kubectl exec -it container-XXXX dig @10.10.0.1 google.com

但是如果容器中没有安装 shell 会发生什么?或者,如果您的容器以非特权用户身份运行(应该如此),并且未安装调试问题所需的工具,该怎么办?如果您没有 root,那么安装实用程序有点困难,而且它会破坏临时基础设施的全部意义。在这些情况下,Linux nsenter 命令将成为您最好的朋友!

如果您不熟悉 nsenter,它允许您在给定的命名空间中运行程序。因此,假设您在 Kubernetes 集群中运行了一个微服务,并且您的开发人员告诉您 DNS 解析无法正常工作。要使用 nsenter 调试此问题,您可以访问运行服务的主机,并使用“-t”(进程到目标)和“-n”(进入网络命名空间)选项执行 nsenter。最后一个参数是在进程网络命名空间中运行的命令:

$ nsenter -t 1294 -n dig +short @10.11.2.2 *.*.svc.cluster.local

10.10.0.10
10.10.0.1

在上面的示例中,nsenter 再次运行 dig 命令获取集群 DNS 服务 IP。它还使用驻留在主机文件系统上的 dig 二进制文件,而不是容器。当您需要捕获进出容器的流量时,Nsenter 也非常有用:

$ nsenter -t 1294 -n tcpdump -i eth0 port 80 and "tcp[tcpflags] & tcp-syn != 0"

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
06:04:20.424938 IP 10.11.2.1.39168 > 10.11.2.3.80: Flags [S], seq 1491800784, win 29200, options [mss 1460,sackOK,TS val 59669904 ecr 0,nop,wscale 7], length 0
06:04:20.425000 IP 10.11.2.3.80 > 10.11.2.1.39168: Flags [S.], seq 3823341284, ack 1491800785, win 28960, options [mss 1460,sackOK,TS val 59669904 ecr 59669904,nop,wscale 7], length 0

在上面的示例中,nsenter 在进程 ID 1294 的命名空间内执行了 tcpdump 实用程序。使这个超级强大的原因在于,您可以使用运行应用程序所需的最少位数来运行容器,并且您的应用程序也可以作为非特权用户运行。当您需要调试问题时,您无需接触容器。您只需在 Kubernetes worker 上启动二进制文件并进行调试即可。

与[转帖]使用 nsenter、dig 和 tcpdump 调试 Kubernetes 网络问题相似的内容:

[转帖]使用 nsenter、dig 和 tcpdump 调试 Kubernetes 网络问题

https://zhuanlan.zhihu.com/p/410217354 使用 nsenter、dig 和 tcpdump 调试 Kubernetes 网络问题 作为 Kubernetes 管理员,我经常发现自己需要调试应用程序和系统问题。我遇到的大多数问题都可以通过 Grafana 仪表板和

[转帖]nsenter使用

https://www.cnblogs.com/edeny/p/15247306.html 这个工具应该不错. 介绍 nsenter是用来进入容器内部的一个命令,它的优势之处在于可以自己选择加载容器的那些namespaces。 说直白一点就是 排查docker容器可以具备inux宿主命令的的方法。

[转帖]nsenter 工具的使用

一、背景 对于运行在后台的docker容器,我们经常需要做的事情是进入到容器中,docker为我们提供了docker exec 、docker attach 命令,并且还提供了nsenter工具,外部工具供我们使用。 docker attach存在的问题是:当多个窗口同时attach到同一个容器时,

[转帖]使用JMX服务监控Java程序性能

https://www.jianshu.com/p/3c3c836c1c20?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation 背景 单机收集服务器需要性能监控和测试。 JMX

[转帖]使用 tc netem 模拟网络异常

https://cizixs.com/2017/10/23/tc-netem-for-terrible-network/ 在某些情况下,我们需要模拟网络很差的状态来测试软件能够正常工作,比如网络延迟、丢包、乱序、重复等。linux 系统强大的流量控制工具 tc 能很轻松地完成,tc 命令行是 ipr

[转帖]使用 sysdig 进行监控和调试 linux 机器

https://cizixs.com/2017/04/27/sysdig-for-linux-system-monitor-and-analysis/ sysdig 简介 sysdig 官网 上对自己的介绍是: Open Source Universal System Visibility With

[转帖]使用MAT命令行工具生成堆dump分析文件

https://www.cnblogs.com/hellxz/p/use_mat_linux_command_line_generate_reports.html 写作目标 Java程序运行过程中,难免会出现 OOM,往往是在 JVM 启动参数中添加出现 OOM 时输出堆 dump(又名:堆转储、堆

[转帖]使用火焰图(FlameGraph)分析程序性能

火焰图概念 火焰图(FlameGraph)是 svg 格式的矢量图,是先通过 perf 等工具分析得到结果,并将该结果生成的具有不同层次且支持互动的图片,看起来就像是火焰,这也是它的名字的由来。表现形式如下所示: 需要注意以下几点: 纵向(Y 轴)高低不平,表示的是函数调用栈的深度。每一层都是一个函

[转帖]使用Prometheus和Grafana监控RabbitMQ集群 (使用RabbitMQ自带插件)

https://www.cnblogs.com/hahaha111122222/p/15683696.html 配置RabbitMQ集群 官方文档:https://www.rabbitmq.com/prometheus.html#quick-start 官方github地址:https://gith

[转帖]使用Flame Graph进行系统性能分析

http://t.zoukankan.com/arnoldlu-p-10148558.html 关键词:Flame Graph、perf、perl。 FlameGraph是由BrendanGregg开发的一款开源可视化性能分析工具,形象的成为火焰图。 从底向上像火苗一样逐渐变小,也反映了相互之间的包