Nacos 2.0 服务端强制要求客户端使用 2.0 及以上版本,因为通信协议已从 HTTP 变更为 gRPC。老版本客户端无法连接时,必须升级客户端 SDK 至 2.0+,并确保服务端防火墙开放了 9848 和 9849 端口。
先说结论:老版本客户端无法连接 Nacos 2.0 服务端是协议不兼容导致的,必须升级客户端并开放新端口。
- 先确认:检查 Nacos 服务端版本是否为 2.0+,客户端版本是否低于 2.0.0。
- 先处理:升级客户端依赖至 2.0.0 以上,并在防火墙放行主端口 +1000 和 +1001 的端口。
- 再验证:观察客户端日志是否不再报"Client not connected",且服务端控制台显示实例在线。
命令速用版
如果确认服务端已升级至 2.0,请直接在项目中修改依赖版本并检查网络策略。
<!-- Maven 依赖示例 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.6.RELEASE</version> <!-- 确保对应 Nacos 2.0 客户端 -->
</dependency>网络检查命令(Linux 服务端):
netstat -tunlp | grep 9848
netstat -tunlp | grep 9849为什么会这样
Nacos 2.0 架构引入了 gRPC 作为默认通信协议,老版本客户端仅支持 HTTP 长轮询。
Nacos 1.x 版本主要基于 HTTP/1.1 协议进行通信,而 2.0 版本为了提升性能和实时性,引入了基于 gRPC 的双向长连接通信模型。这意味着除了原先用于 HTTP API 和管理控制台的主端口(默认 8848),Nacos 2.0 还会自动开启两个 gRPC 通信端口。客户端在启动时,会先通过 8848 端口获取服务端的基本信息,然后立即尝试与 9848 端口建立 gRPC 长连接。如果客户端版本过低,无法发起 gRPC 请求,或者网络层面阻止了 gRPC 端口的访问,连接就会失败。
分步处理
步骤 1:核对版本兼容性
Nacos 2.0 客户端与 1.x 服务端完全不兼容,反之亦然。如果服务端已升级至 2.0,客户端 SDK 必须升级到 2.0.0 及以上版本。检查项目的 pom.xml 或 build.gradle,确认 nacos-client 或 spring-cloud-starter-alibaba-nacos 的版本。
步骤 2:开放 gRPC 端口
Nacos 2.0 的 gRPC 端口是通过“端口偏移量”机制计算的。默认情况下,如果主端口是 8848,则需要开放以下端口:
- 8848:HTTP API、控制台访问
- 9848:gRPC 数据通信(客户端连接服务端核心通道)
- 9849:gRPC TLS/SSL 通信(服务端节点间通信或启用 TLS 时)
在云服务器安全组或本地防火墙中,确保 9848 和 9849 端口处于放行状态。如果修改了 server.port 配置,gRPC 端口会随之变化(主端口 +1000 和 +1001)。
步骤 3:检查 Kubernetes 端口映射(如适用)
在 K8s 环境中,Service 配置需要同时映射 HTTP 和 gRPC 端口。如果只映射了 8848,客户端通过 NodePort 访问时,计算出的 gRPC 端口(如 32048)可能未被映射,导致连接失败。需要确保 Service 暴露了所有必要的端口。
怎么验证是否生效
日志检查:启动客户端应用,观察日志是否不再出现com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTING异常。
端口测试:在客户端机器上使用 telnet 或 nc 命令测试服务端 9848 端口是否通。
telnet <nacos-server-ip> 9848控制台确认:登录 Nacos 管理控制台,查看“服务管理”列表,确认客户端服务实例状态为“健康”。
常见坑
- 端口偏移计算错误:如果自定义了 Nacos 服务端的主端口(例如改为 8858),gRPC 端口会自动变为 9858 和 9859,防火墙需同步调整。
- 只开 8848 端口:很多运维人员只开放了控制台端口,忽略了 9848 核心通信端口,导致客户端一直卡在 STARTING 状态。
- 混合版本部署:集群中部分节点是 1.x,部分是 2.0,会导致客户端连接行为不一致,建议集群版本保持一致。
- TLS 配置影响:如果启用了 TLS 加密,必须确保 9849 端口开放,否则加密通信失败。
常见问题
Nacos 1.x 客户端能连接 2.0 服务端吗?
不能。Nacos 2.0 服务端默认使用 gRPC 协议,1.x 客户端仅支持 HTTP 长轮询,协议不兼容会导致连接失败。
为什么控制台能打开但客户端注册不上?
控制台使用 8848 HTTP 端口,客户端注册使用 9848 gRPC 端口。通常是防火墙只放了 8848 而拦截了 9848。
修改了 server.port 后 gRPC 端口会变吗?
会变。gRPC 端口基于主端口动态计算,分别为 主端口 +1000 和 主端口 +1001。
参考来源
- Nacos 2.0 端口配置全解析:解决 Client not connected 异常的关键步骤
- Nacos 2.x 升级后踩坑记:gRPC 端口偏移量导致的‘幽灵连接失败’与修复方案
- Nacos 2.0 升级踩坑记:如何解决 gRPC 连接报错与 9848 端口问题
- 从源码看 Nacos 连接异常:Client not connected 的 5 种排查姿势