进入pod容器的netns
2022-06-02 本文已影响0人
wwq2020
背景
同事需要对pod的进出流量进行限速,
因为容器和主机通信是通过veth pair的,所以思路就是对veth pair的两端进行限速
进入pod容器的netns
确保/var/run/netns存在
mkdir -p /var/run/netns
准备netns
podName=yourpodname
podNamespace=yournamespace
containerID=`kubectl get pod -n $podNamespace $podName -ojsonpath='{.status.containerStatuses[0].containerID}'`
containerID="${containerID##*\/}"
containerPID=`docker inspect --format='{{.State.Pid}}' $containerID`
ln -s /proc/$containerPID/ns/net /var/run/netns/$containerPID
实验
ip netns exec $containerPID ip addr
获取veth pair两端
容器侧是eth0,所以只需要获取主机侧
vethIndex=`ip netns exec $containerPID cat /sys/class/net/eth0/iflink`
hostVeth=`ip addr|grep "${vethIndex}:" |awk '{print $2}'`
hostVeth="${host_veth%@*}"