Created
January 24, 2024 16:23
-
-
Save fjrti/b573c7a43430aa1f9b014cbe12e34766 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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