Skip to content

Instantly share code, notes, and snippets.

@fjrti
Created January 24, 2024 16:23
Show Gist options
  • Save fjrti/b573c7a43430aa1f9b014cbe12e34766 to your computer and use it in GitHub Desktop.
Save fjrti/b573c7a43430aa1f9b014cbe12e34766 to your computer and use it in GitHub Desktop.
#!/bin/bash
# crictl -r unix:///run/containerd/containerd.sock pods
# kubectl get pod kata-1 -o jsonpath='{$.status.containerStatuses[0].containerID}'
# pod id = containerID of pause
# full-id: ctr -n k8s.io c ls
# pod_ip=172.16.102.68; for ns in $(ip netns ls | cut -f 1 -d " "); do ip netns exec $ns ip a | grep -q $pod_ip; status=$?; [ $status -eq 0 ] && echo "pod namespace: $ns" ; done
# TODO
# cmd check
# batch process
usage () {
echo "Usage:"
echo " $0 info PODNAME"
echo " $0 trace PODNAME dest-ip"
echo " $0 login PODNAME"
exit 1
}
pod_info() {
echo
echo "Sandbox ID : $1"
echo "POD Name : $2"
echo "POD ns : $3"
echo "POD IP : $4"
echo "POD Mac : $5"
echo "POD netns : $6"
echo "POD port : $7"
echo
}
pod_trace() {
[ -z $3 ] && echo "need dest IP" && exit 1
GREEN=$(tput setaf 2) && NC=$(tput sgr0)
echo ""
echo "${GREEN}Tracing $2 ($1) --> $3 $NC"
echo ""
ovs-appctl ofproto/trace br-tun in_port=Local,ip,nw_src=$pod_ip,nw_dst=$3
}
process() {
local pod_name=$2
[ -z $pod_name ] && usage
local short_id=$(nerdctl -n k8s.io ps|grep $pod_name | grep pause |awk '{print $1}')
[ -z "$short_id" ] && echo "POD $pod_name not found" && exit 1
for id in $(echo $short_id); do
local full_id=$(nerdctl -n k8s.io inspect $id | head -10 |grep -w Id |awk -F \" '{print $4}')
local pod_name=$(nerdctl -n k8s.io inspect $full_id | grep -w pod.name | awk -F \" '{print $4}')
local pod_ns=$(nerdctl -n k8s.io inspect $full_id | grep -w pod.namespace | awk -F \" '{print $4}' )
local pod_ip=$(nerdctl -n k8s.io inspect $full_id | grep "IPAddress" | head -1 | awk -F \" '{print $4}')
local pod_mac=$(nerdctl -n k8s.io inspect $full_id | grep "MacAddress" | head -1 | awk -F \" '{print $4}')
local pod_netns=$(ctr -n k8s.io c info $full_id | grep netns | awk -F \/ '{print $5}'| awk -F \" '{print $1}')
[ -z $pod_netns ] && pod_netns="none"
local pod_port=$(ip -o link show | grep $pod_netns | awk '{print $2}' | awk -F @ '{print $1}')
[ $1 = "info" ] && pod_info $full_id $pod_name $pod_ns $pod_ip $pod_mac $pod_netns $pod_port
[ $1 = "trace" ] && pod_trace $pod_name $pod_ip $3
[ $1 = "login" ] && kata-runtime exec $full_id && exit 0
done
}
case $1 in
info|trace|login) process $@ ;;
* ) usage ;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment