背景:近期部署k8s集群的时候,启动了我的nacos服务以及seata服务,结果发现seata无法启动,原因是无法解析k8s内部的dns域名,导致的无法连接注册到nacos中。

第一步排查,coredns是否启动

当时看seata报错发现是无法解析域名

在nacos的pod内ping自己本身的service域名发现果然不通讯

进一步排查 core-dns是否正常,结果发现core-dns正常且日志内并无报错

第二部排查,网络通讯问题

在发现core-dns没问题的时候,紧接着去检查了网络插件flannel,发现也全部启动正常且日志无报错。没有明显报错也是搞得我一头雾水,紧接着就是一直在pod内去ping域名,一直去重启core-dns,就在这时突然发现ping的时候能解析了,但是是时好时坏。

时好时坏的情况下又去检查了core-dns,结果发现现在有两个core-dns的pod,且分别飘在node1以及node3上面,而恰好我的nacos在node1上。这时心里就有了一个想法,紧接着就将core-dns的pod仅保留一个并 在node1上启动。此时我的nacos以及core-dns都在node1上面,这是我发现时好时坏的dns解析现在 已经可以百分之百成功。

第三步确定问题所在

通过前两部的排查已经可以确定是集群内部通讯的问题了,此时我在node1以及node2上分别启动pod,并且让node1上的pod去ping 在node2上pod 的ip,发现不通。此时我还是疑惑的,因为我前两天搭建了一个一模一样的集群,用的k8s组件完全相同,为什么这套集群会出现集群内部通讯问题呢?

之后想到了唯一的差异,前两天部署的机器是centos7,而这次的是欧拉24.03属于是比较新的操作系统。而我用的flannel是属于较老的稳定版本,与欧拉24.03不兼容。

这时我就去升级了网络插件使用最新版本的calico,在重新初始化了整个k8s集群后,重新进行测试。发现集群内网络已经同了。启动nacos以及seata后也是成功注册到了nacos。

更多推荐