转载:网络诊断利器:掌握 Kubernetes Pod 抓包技巧
背景
有没有对Pod抓包而感到苦恼,下面针对在线上出现问题之后,针对Pod进行抓包
1. 宿主机上捕获
应用其实是运行在 Pod 内的 Container 里的,所以只要定位到 Container 被调度到了哪个 Node 上,在相应的 Node 里,对容器进行抓包即可。
2.1 定位Pod ip和containerID
定位 Pod 的 containerID 以及它所运行的宿主机 IP
# kubectl get pod -n ${NAMESPACE}${POD_NAME} -o json|jq '.status|{hostIP: .hostIP, container: [.containerStatuses[]|{name: .name, containerID: .containerID}]}'
{
"hostIP": "10.103.236.203",
"container": [
{
"name": "app",
"containerID": "docker://808605e67373b6dee49162c67745e8cd0f5062978385707c91e42d1c37bfba57"
}
]
}
2.2 查找网络接口索引
通过 ssh 登陆到 Pod 所在的宿主机上,然后在容器内执行 cat /sys/class/net/eth0/iflink,查找容器中的网卡与宿主机的 veth 网卡之间的对应关系
kubectl exec -it ${PodName} -- /bin/sh -c "cat /sys/class/net/eth0/iflink"
[root@kube-master ~]# kubectl exec -it app-prod-97dfb4bf-h59vq -- /bin/sh -c "cat /sys/class/net/eth0/iflink"
14
2.3 查找网络接口信息
[root@kube-master ~]# ip link |grep 14
14: cali3002ec233ba@if4: <BROADCAST