首页 > 其他分享 >如何在kubernetes中抓包 原创 NANA SRE运维实践

如何在kubernetes中抓包 原创 NANA SRE运维实践

时间:2024-08-03 12:16:40浏览次数:10  
标签:kubernetes 运维 SRE 宿主机 pid 使用 pod id 抓包

如何在kubernetes中抓包

原创 NANA SRE运维实践

如何在kubernetes中抓包

原创 NANA SRE运维实践    2024年08月03日 01:06 江苏 听全文 序言

   随着云原生的落地,k8s使用的人也越来越多了,而在这种环境中,抓包有的时候也是一种纠结的事情。

    爱意随风起,风止意难平,能不能抓到那个异常的包,有的时候靠的也是运气。

在k8s环境中抓包

   1 背景

    云使用的越多,那么就会碰到各种各样的版本,低版本一般使用的是dockerd,而高版本慢慢的在抛弃dockerd,逐渐在使用containerd,其实dockerd调用的时候,也是使用containerd,只是docker封装了一层,所以使用方法略微有点区别。

    在k8s环境中,一般都要到pod所在的宿主机上进行抓包,而不是在pod内部抓包,毕竟pod都是最小化的进行部署,从而大部分的pod里面都没有安装tcpdump,如果安装了,那么抓包就简单了,但是也让pod使用的资源大大增加。

    在宿主机上抓包的时候,也看宿主机的操作系统,有的是yum的,有的apt的,在tcpdump上使用的是一样,但是安装基础命令的时候,有的是用yum,有的是apt。

    2 在dockerd上面进行抓包

    在dockerd上进行抓包是最简单和最熟悉的,因为大部分人都是使用docker进行入门的,抓包步骤如下:

#找到对应的pod所在的容器的id,也就是container idkubectl describe pod xxx -n namespace -o wide|grep -i "id"#登录显示的宿主机,根据container id找到对应的容器的网络命名空间docker inspect containerid |grep -i pid#根据找到的pid进入pod的网络命名空间nsenter -t pid -n#使用tcpdump进行抓包tcpdump -w xxx.pcap

 

    3 使用containerd进行抓包

    使用containerd的时候,其实使用的是ctr命令,这个是在安装containerd的时候自带的命令,不用额外进行安装,只是使用的方式不一样,在进行查找宿主机和pod的id的时候使用的命令和上面是一样的,不同的是下面的步骤:

#查看容器列表ctr -n k8s.io c list|grep "container id"#根据查到的容器id,ctr使用的时候,必须写全,而docker对于id的长度没要求ctr -n k8s.io c info containerid|grep -i pid -C 3#根据上面的命令,找到对应的path里面的数字,也就是pidnsenter -t pid -n#进入网络命名空间进行抓包

 

    在上面的步骤中,可以看到使用ctr的时候,单独加了一个命名空间为k8s.io,这个属于低版本的containerd,不然的话,你是看不到对应的容器的。

    在dockerd中,其实也可以使用ctr命名,但是命名空间为moby,也可以查到一些信息,但是不好找到对应的pid。

    3 使用crictl命令

    crictl命令一般需要进行额外安装,一般属于cri-tools这个包,如果宿主机上没有,可以进行手动安装,这个命令和docker的命令比较类似,登录宿主机方式和dockerd相同,不同的地方在于如下步骤:

#使用crictl找到对应的pidcrictl inspect containerid |grep -i pid -C 5#根据上面的结果中的path,找到对应的数字也就是pidnsenter -t pid -n#进入网络命名空间进行抓包

    4 多容器的pod    

    在很多的pod中,其实容器可能有很多,还有各种各样的sidecar容器,可以随便找到一个容器id,然后找到对应的pid,进入到网络命名空间ns中,本质上是无所谓的,因为对于一个pod来说,网络命名空间是pod共享的,当然,一些特殊的pod除外,例如pod的有两个网卡,属于不同的命名空间中,那么就要考虑进入到不同的网络命名空间中。

    5 其他

    可能你会奇怪,说使用不同的cri容器运行时,好像使用的命令也是大同小异,其实这都是工具,抓包嘛,能记忆一种通用的方式即可,不同的底层,使用大差不差的方式来是最好的,免得一会使用网络ns,一会又使用网络接口,例如找到对应eth0,例如nsenter --net /path/,抓包的方式各种各样,会一样就可以了,要不然突然要抓包,还要去查一查,就很累了,简单通用不失为一种好的方式。

    在进行抓包的时候,总是考虑风险,在大部分情况下,抓包是没啥风险的,除非是超级大的流量,那么在这种机器上抓包,如果发现有问题,立刻进行停止就好了。

    在进行抓包的时候,如果担心把磁盘文件打爆,那么可以对tcpdump添加两个一个参数,一个参数是-C 表示抓包文件的大小,一个参数-W表示抓包文件的数量,从而可以整体上控制抓包文件占用的磁盘大小,这种方式的好处就是包都比较小,而且会自动轮转覆盖,不用担心直接磁盘空间的问题。

风言风语

     一旦查一个问题都到了抓包的时候,说明差不多是黔驴技穷了,因为日志看不出来问题在哪里,因为监控排查不了,因为配置也正常,希望你用不到抓包工具。

        抓包也只是解决问题的一个工具,就像AI一样,或许你问AI,它也能给出一样的答案或者不一样的答案,那么人和AI的区别在哪里?人也有输入源,或者是环境,或者是网上的资料,或者是自己的经验;而AI的输入源也差不多,区别在于两者的判断逻辑,输入可能为真为假,每个人也只是经过各种规矩,各种问题的训练得出来的结果;你觉得很多判断选择是你自己选的,其实可能不是。。。两者之间的差距越来越小,那么你能做什么?又扮演着一个什么角色。

        用好工具,可能是一种更好的方法;也或者是没有办法的方法。。。你以为AI是工具,或者你也只是AI的工具。。。

阅读 349   ​

标签:kubernetes,运维,SRE,宿主机,pid,使用,pod,id,抓包
From: https://www.cnblogs.com/cheyunhua/p/18340322

相关文章

  • 程序员进阶架构知识体系、开发运维工具使用、Java体系知识扩展、前后端分离流程详解、
    场景作为一名开发者,势必经历过从入门到自学、从基础到进阶、从学习到强化的过程。当经历过几年企业级开发的磨炼,再回头看之前的开发过程、成长阶段发现确实是走了好多的弯路。作为一名终身学习的信奉者,秉承持续学习、持续优化的信念。不惜耗费无数个日日夜夜,耗费大量时间精力......
  • 使用 Python 生产者和消费者在 Kubernetes minikube 上设置 Kafka Kraft
    我正在尝试从kubernetes集群外部连接到kubernetesminikubekafkapod。服务器启动没有任何问题,但我无法设法将本地kafka生产者/消费者连接到外部kafkapod。在集群内的kafka服务器映像上,我将bootstrap-server设置为:bin/kafka-topics.sh--create--bootst......
  • 基于 KubeSphere 的 Kubernetes 生产环境部署架构设计及成本分析
    转载:基于KubeSphere的Kubernetes生产环境部署架构设计及成本分析 前言导图1.简介1.1架构概要说明今天分享一个实际小规模生产环境部署架构设计的案例,该架构设计概要说明如下:本架构设计适用于中小规模(<=50)的Kubernetes生产环境,大型环境没有经验,有待验证。......
  • 【远程驰骋:Python SSH 自动化运维实战笔记】
    使用GqylpySSH库简化SSH命令执行在自动化运维或脚本编写中,经常需要通过SSH连接到远程服务器执行命令。虽然Python的paramiko库提供了强大的SSH功能,但直接使用它进行命令执行和结果处理可能会显得有些繁琐。GqylpySSH库封装了paramiko,提供了一个更加简洁易用的接口......
  • kubernetes更改nodePort模式下的默认端口范围
    使用nodePort模式,官方默认范围为30000-32767,详见Service官方文档。NodePort类型如果将type字段设置为NodePort,则Kubernetes控制平面将在–service-node-port-range标志指定的范围内分配端口(默认值:30000-32767)。每个节点将那个端口(每个节点上的相同端口号)代理到您的服务......
  • IT运维必备神器!PsShutdown,定时关机重启一键搞定!
    嘿,各位技术小能手们,小江湖今天要给大家安利一个宝贝——PsShutdown!这可不是一般的关机小工具哦;当你坐在电脑前,手指轻轻敲几下键盘,就能实现定时任务,无论是关机、重启,还是注销用户,甚至是锁屏,都尽在掌握之中;是不是已经心痒痒,迫不及待想要一探究竟了?别急,咱们先不聊那些冷冰冰的功能......
  • 借助 NGINX 对本地的 Kubernetes 服务进行自动化的 TCP 负载均衡
    原文作者:ChrisAkker-F5技术解决方案架构师,SteveWagner-F5NGINX解决方案架构师原文链接:借助NGINX对本地的Kubernetes服务进行自动化的TCP负载均衡转载来源:NGINX中文官网NGINX唯一中文官方社区,尽在 nginx.org.cn作为一名现代应用开发人员,您不仅使用一......
  • Kubernetes externalIPs 类型服务
    背景:在k8s中用到的比较到多的是ClusterIP和NodePort类型的service,externalIPs则很少使用。我们现在了解一下其用法和它的一些优缺点。官方定义:如果有路由到一个或多个集群节点的外部IP,则可以在这些IP上公开Kubernetes服务。在服务端口上使用外部IP(作为目标IP)进入集......
  • 如何在 Kubernetes 里部署 JMX Exporter
    本文会通过一个Java应用,演示PrometheusJMXExporter在Kubernetes里的部署和配置方式。为了更好地理解JMXExporter,我们将使用SpringBootJava应用程序并将所有JMX指标导出给Prometheus。在本指南结束时,您将学习:使用Java应用镜像启动JMXExporter将JMX指标导......
  • 【运维指南】常见的防火墙端口操作
    每当一个应用程序想通过网络访问自己时,它就会申请一个TCP/IP端口,这意味着该端口不能被其他任何程序使用。那么,如何检查开放的端口,看看哪个应用程序已经在使用它呢?Windows查看端口使用情况和进程名称netstat-ab按Enter键后,结果可能需要一两分钟才能完全显示出来,请......