使用nsenter调试k8s网络

一、 nsenter介绍

nsenter是一个命令行工具, 可以进入进程的名称空间中。例如,如果一个容器以非 root 用户身份运行,使用 docker exec 进入其中后,发现该容器没有安装 sudo 或未 netstat ,并且您想查看其当前的网络属性,如开放端口,这种场景下将如何做到这一点?nsenter 就是用来解决这个问题的。

nsenter(namespace enter)可以在容器的宿主机上使用 nsenter 命令进入容器的命名空间,以容器视角使用宿主机上的相应网络命令进行操作。当然需要拥有 root 权限。

nsenter 的 c 使用语法为,nsenter -t pid -n ,-t 接进程 ID 号,-n 表示进入名称空间内,为执行的命令。

二、实战

首先确定 Pod 名称和所在的节点:

kubectl -n ns-v3-fi-dev  get pod  -o wide  | grep vip1web
vip1web-588bf7c5dc-p6fbl 172.20.199.54
vip1web-rpt-59868cc5fb-72jp4 172.20.199.54
vip1web-upgrad-5bbb8fcd84-6mk6c 172.20.199.54

排查目标:vip1web-588bf7c5dc-p6fbl 的tcp 1521的连接

提前准备了脚本,用于获取pod的pid:

vim get_pod_pid.sh
#!/bin/bash
list=$(docker ps -f 'status=running' |grep -v /pause |awk '{print $1}' |grep -v  CONTAINER)
for i in $list
do
pid=$(docker inspect -f {{.State.Pid}} $i)
cantainer_name=$(docker inspect -f '{{index .Config.Labels "io.kubernetes.pod.name"}}' $i)
echo $pid " "  $cantainer_name
done

上传到脚本中心
登录宿主机172.20.199.54,执行命令,获得pod的pid:

curl -s  http://xxx.xxx.com/k8s/get_pod_pid.sh  | sh | grep  vip1web-588bf7c5dc-p6fbl
60935   vip1web-588bf7c5dc-p6fbl

最后执行命令:

nsenter -t  60935  -n netstat -anp | grep 1521  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值