allbet官网开户网址:kubernetes pod内抓包,telnet检查网络连接的几种方式

admin 1个月前 (06-06) 科技 10 0

靠山

在一样平常kubernetes的运维中,经常遇到pod的网络问题,如pod间网络不通,或者端口不通,更庞大的,需要在容器内里抓包剖析才气定位。而kubertnets的场景,pod使用的镜像一样平常都是只管精简,许多都是基于alpine基础镜像制作的,因而pod内没有ping,telnet,nc,curl下令,更别说tcpdump这种庞大的工具了。除了在容器或者镜像内直接安装这些工具这种最原始的法子,我们探讨下其他法子。

实现

kubectl debug插件方式

项目地址 kubect debug,https://github.com/aylei/kubectl-debug

kubectl-debug 是一个简朴的 kubectl 插件,能够辅助你便捷地举行 Kubernetes 上的 Pod 排障诊断。背后做的事情很简朴: 在运行中的 Pod 上分外起一个新容器,并将新容器加入到目的容器的 pid, network, user 以及 ipc namespace 中,这时我们就可以在新容器中直接用 netstat, tcpdump 这些熟悉的工具来解决问题了, 而旧容器可以保持最小化,不需要预装任何分外的排障工具。操作流程可以参见官方项目地址文档。

一条 kubectl debug下令背后是这样的

步骤分别是:

  1. 插件查询 ApiServer:demo-pod 是否存在,所在节点是什么
  2. ApiServer 返回 demo-pod 所在所在节点
  3. 插件请求在目的节点上确立 Debug Agent Pod
  4. Kubelet 确立 Debug Agent Pod
  5. 插件发现 Debug Agent 已经 Ready,提议 debug 请求(长毗邻)
  6. Debug Agent 收到 debug 请求,确立 Debug 容器并加入目的容器的各个 Namespace 中,确立完成后,与 Debug 容器的 tty 确立毗邻

接下来,客户端就可以最先通过 5,6 这两个毗邻最先 debug 操作。操作竣事后,Debug Agent 清算 Debug 容器,插件清算 Debug Agent,一次 Debug 完成。

直接进入容器net ns方式

有2种进入pod 所在net ns的方式,条件都是需要登录到pod所在宿主机,且需要找出pod对应的容器ID或者名字。

ip netns方式

  • 获取pod对应容器的ID或者name

    pid="$(docker inspect -f '{{.State.Pid}}' <container_name | uuid>)" #替换为环境现实的容器名字或者uuid
    
  • 确立容器对应netns

    ip netns会到/var/run/netns目录下寻找network namespace,把容器历程中netns毗邻到这个目录中后,ip netns才会感知到

    $ sudo mkdir -p /var/run/netns
    
    #docker默认不会确立这个链接,需要手动确立,这时候执行ip netns,就应当看到链接过来的network namespace
    $ sudo ln -sf /proc/$pid/ns/net "/var/run/netns/<container_name|uuid>" 
    
  • 执行ip netns <<container_name|uuid > bash,进入容器ns

    ip netns exec <container_name|uuid>  bash
    
  • 执行telnet,tcpdump等下令,此时执行ip a或者ifconfig,只能看到容器自己的IP

allbet官网开户网址:kubernetes pod内抓包,telnet检查网络连接的几种方式 第1张

如下图,执行ifconfig,只看到容器自己的IP,此时执行telnet,tcpdump即是直接在容器内操作

allbet官网开户网址:kubernetes pod内抓包,telnet检查网络连接的几种方式 第2张

nsenter方式

nsenter为util-linux内里的一个工具,除了进入容器net ns,还支持其他许多操作,可以查看官方文档。

pid="$(docker inspect -f '{{.State.Pid}}' <container_name | uuid>)"
nsenter -t $pid -n /bin/bash
tcpdump -i eth0 -nn  #此时行使宿主机的tcpdump执行抓包操作,即是在容器内抓包

allbet官网开户网址:kubernetes pod内抓包,telnet检查网络连接的几种方式 第3张

总结

  1. kubectl debug方式功效更壮大,瑕玷是需要附加镜像,要在目的pod确立debug agent的容器,对照粗笨,然则优点是能使用的工具更多,不需要ssh到pod所在节点,除了netstat,tcpdump工具,还能使用htop,iostat等其他高级工具,不仅能对网络举行debug,还能对IO等其他场景举行诊断,适用更庞大的debug场景。
  2. 直接进入容器net ns方式相对对照轻量,复用pod所在宿主机工具,但鱼和熊掌不能兼得,瑕玷是只能举行网络方面的debug,且需要ssh登录到pod所在节点操作。
,

欧博网址开户

www.cx11yj.cn欢迎进入欧博网址(Allbet Gaming),欧博网址开放会员注册、代理开户、电脑客户端下载、苹果安卓下载等业务。

皇冠体育声明:该文看法仅代表作者自己,与本平台无关。转载请注明:allbet官网开户网址:kubernetes pod内抓包,telnet检查网络连接的几种方式

网友评论

  • (*)

最新评论

文章归档

    站点信息

    • 文章总数:516
    • 页面总数:0
    • 分类总数:8
    • 标签总数:840
    • 评论总数:172
    • 浏览总数:2692