Nsenter 进入容器的网络命令空间
pid=docker inspect 67dbcf7063af | jq .[0].State.Pid
nsenter -t \(pid -n bash
67dbcf7063af 替换为具体的容器id, 然后就可用主机上的tcpdump了
下面是将这个操作转换为一个脚本
\) vim e_net.sh
#!/usr/bin/env bash
function e_net() {
set -eu
pod=`kubectl get pod ${pod_name} -n ${namespace} -o template --template='{{range .status.containerStatuses}}{{.containerID}}{{end}}' | sed 's/docker:\/\/\(.*\)$/\1/'`
pid=`docker inspect -f {{.State.Pid}} $pod`
echo -e "\033[32m Entering pod netns for ${namespace}/${pod_name} \033[0m\n"
cmd="nsenter -n -t ${pid}"
echo -e "\033[32m Execute the command: ${cmd} \033[0m"
${cmd}
}
# 运行函数
pod_name=$1
namespace=${2-"default"}
e_net
进入 Pod demo2-deployment-5f5f4fbd9b-92gd4 net 命名空间
$ ./e_net.sh demo2-deployment-5f5f4fbd9b-92gd4 test
tcpdump -w lhuan.pcap