前言:
总会碰到这样的场景,查看某个redis上都有哪些连接,会有很多k8s中的node,只清楚具体哪个node,但是不清楚具体的pod。
解决流程:
知道node节点上的随机端口,但由docker占用宿主机上的随机端口netstat -lntpa并不显示。我们写了个脚本,进入node上所有容器的网络空间,再去筛选redis上连接的随机端口,发现容器网络空间的连接随机端口又是通过宿主机上另一个随机端口发出的。。事已至此,好像没有更好的办法去查找具体的pod。
最终解决办法:
Netfilter conntrack 又名 CT ,译作连接跟踪。它是一个内核模块(nf_conntrack),用于维护可跟踪协议(trackable protocols)的连接状态。目前只支持以下六种协议:TCP、UDP、ICMP、DCCP、SCTP、GRE。
既然说跟踪,得有一个或一组标记可供记录、查找、回溯。在这里 CT 利用到了每个网络包里面的源 IP ,目的 IP ,源 Port ,目的 Port 和 Protocol 这5个参数所组成的一组标记。更简单地说,CT 认为这5个参数可用来唯一标识一个单向连接。注意,这里说的是单向连接。网络通信涉及到去和回两个单向连接。
你可以用命令 conntrack -L 查看本机的 CT 记录。如下表所示,第一条记录了去、回两个方向的记录。每一个这样的记录叫做:connection tracking entry (conntrack entry)。