k8s集群-spring cloud 集成seata的时候:can not register RM,err:can not connect to services-server.

发布时间 2023-09-12 11:32:57作者: 邹姣姣

背景说明

  1. seate和其他微服务在k8s集群中部署,都在同一个命名空间。注册到nacos的同一个命名空间
  2. seate是官方提供,无改动

k8s中部署情况:

报错提示

core服务的报错内容:

2023-09-12 11:07:06.524 ERROR 7 --- [eoutChecker_2_1] i.s.c.r.netty.NettyClientChannelManager  : 0101 can not connect to 127.0.0.1:8091 cause:can not register RM,err:can not connect to services-server.

io.seata.common.exception.FrameworkException: can not register RM,err:can not connect to services-server.
	at io.seata.core.rpc.netty.NettyClientChannelManager.doConnect(NettyClientChannelManager.java:250) ~[seata-all-1.6.1.jar!/:1.6.1]
	at io.seata.core.rpc.netty.NettyClientChannelManager.acquireChannel(NettyClientChannelManager.java:112) ~[seata-all-1.6.1.jar!/:1.6.1]
	at io.seata.core.rpc.netty.NettyClientChannelManager.reconnect(NettyClientChannelManager.java:196) ~[seata-all-1.6.1.jar!/:1.6.1]
	at io.seata.core.rpc.netty.AbstractNettyRemotingClient$1.run(AbstractNettyRemotingClient.java:115) ~[seata-all-1.6.1.jar!/:1.6.1]
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[na:na]
	at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source) ~[na:na]
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[na:na]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.92.Final.jar!/:4.1.92.Final]
	at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]

排查过程

  1. 检查配置
    初步排查怀疑是这个service.default.grouplist=127.0.0.1:8091 配置导致。
    在k8s中,应该是用server name 来代替127.0.0.1

配置修改如下:

没有解决问题。

  1. 检查nacos中的注册ip

可以看到这个10.96.42.251是pod的ip。若其他微服务是通过这个ip进行访问seate的话,这个pod的ip是无法提供服务的。

  1. 检查core是如何调用

    从配置中可以看出,core并没有指定seate服务的服务名称,也没有指定seate的ip地址和端口。