1 宿主机上进入容器namespace
排查问题时, pod内经常缺少常用工具, exec进去排查就很不方便, 此时可以在 宿主机上执行各种命令进入到容器的namespace里去, 这样就能使用宿主机上的命 令行工具来排查.
网络ns
参考: https://www.sfernetes.com/k8s-network-debug/
找到容器的PID:
docker inspect CONTAINERID | grep Pid
或者:
lsns -t pid | grep 进程名字
进入到指定PID的网络命名空间:
nsenter -t PID -n
或者通过ip命令: 根据pid找到namespace的名字
ip netns identify 129889
进入到指定namespace
ip netns exec cni-607c5530-b6d8-ba57-420e-a467d7b10c56 ip a
2 找到某个容器对应宿主机上的网卡
有些容器docker inspect看不到network, 此时可以:
ip link show eth0
eth0名字上有类似"@if43", 表示veth对的索引是 43
然后在宿主机执行:
ip link
找到对应数字的网络设备就是容器在宿主机上的veth pair了
参考: https://atbug.com/learn-cilium-and-ebpf/
3 查询某个网卡是否有bpg程序
tc filter show dev lxc00aa ingress
tc filter show dev lxc00aa egress
4 网络监控
nload
查看各个网络设备当前流量
nload devices eth0
5 veth pair操作
创建veth pair
创建:
ip link add type veth
可以看到多了两个网络设备:
ip a
创建namespace
ip netns add ns0
ip netns add ns1
转移veth设备到ns
ip link set veth0 netns ns0
启用:
ip netns exec ns0 ip link set veth0 up
分配IP:
ip netns exec ns0 ip addr add 10.0.0.1/24 dev veth0
重命名:
ip netns exec ns0 ip link set dev veth0 name eth0