一个k8s导致的网络问题

有同事报一个数据库连接不上,从库可以连,但是主库连不上。

先是ping了一下,发现主库是可以ping通的,但是telnet数据库端口发现是直接Connection refused

报这个话一般就是端口没开或者防火墙给过滤了。

于是检查了网络安全组和本机的防火墙规则,发现都没有限制这个ip和这个端口。

于是就启动抓包大法,先是没有指定网卡,那就是默认eth0,可抓了之后发现居然没有对应的包,这就很奇怪啊,我明明在另外一个tab里telnet了。

tcpdump-eth0

那就所有网卡都抓吧,使用 -i any 就是所有网卡了,这个时候抓到了对应的包了。这里发现了一个奇怪的问题,这里源ip和目标ip居然是一样的,不会是这个数据库的ip就在本机吧。

tcpdump

我就使用数据库的域名telnet 22端口,发现居然就是本机的这个ssh。

telnet

那看来就是本机的了,于是使用ip a查看本机所有ip,发现居然数据库的ip赫然在列。原来都是k8s的svc搞的鬼。由于当时k8s创建的时候没有注意Service CIDR的设置,默认就是192.168.0.0/16, 这样居然跟另外一个vpc里的数据库的网段冲突了。那临时方案就是先释放这个svc ip,先不冲突,后面再新建一个k8s集群慢慢迁移了。

kube-ipvs