处理 Nacos 2.0 端口 9848 被防火墙拦截的问题,最直接的方法是在服务器防火墙或云平台安全组中放行 TCP 协议的 9848 端口。
先说结论:Nacos 2.0 客户端通过 gRPC 长连接通信,默认使用主端口 +1000 的偏移端口,必须放行该端口才能注册成功。
- 先确认:检查 Nacos 服务端版本是否为 2.x 且客户端 SDK 已升级。
- 先处理:在操作系统防火墙和云安全组同时放行 9848 端口。
- 再验证:使用 telnet 测试端口连通性并观察客户端日志。
命令速用版
如果确认是 Linux 服务器防火墙问题,可直接执行以下命令放行端口。
CentOS 7+ (firewalld)
firewall-cmd `--zone`=public `--add-port`=9848/tcp `--permanent` firewall-cmd `--reload`
Ubuntu (ufw)
ufw allow 9848/tcp ufw reload
快速测试连通性
telnet <Nacos 服务器 IP> 9848
如果 Telnet 无法安装,可使用 nc 命令:
nc -zv <Nacos 服务器 IP> 9848
为什么会这样
Nacos 2.0 版本架构升级引入了 gRPC 通信协议,导致端口规则发生变化。
Nacos 1.x 版本主要基于 HTTP 协议通信,默认使用 8848 端口。Nacos 2.0 版本为了提升性能,客户端与服务端之间的配置和服务发现通信改为使用 gRPC 长连接。根据 Nacos 官方架构设计,gRPC 端口默认为主端口号加 1000。如果主端口是 8848,则 gRPC 端口为 9848。防火墙若只放行了 8848 而拦截 9848,客户端无法建立 gRPC 连接,导致注册失败或连接超时。
分步处理
步骤 1:确认 Nacos 版本与端口规划
登录 Nacos 控制台首页查看版本号,确认是否为 2.x 版本。检查启动配置,确认主端口是否修改过。如果主端口修改为其他值(例如 8080),则 gRPC 端口相应变为 9080(8080+1000)。
步骤 2:检查云平台安全组
登录云服务器控制台,找到实例对应的安全组配置。检查入方向规则,确认是否允许 TCP 协议 9848 端口。若没有,添加一条允许所有 IP 或特定客户端 IP 访问 9848 端口的规则。
步骤 3:检查操作系统防火墙
在服务器内部执行 systemctl status firewalld 或 systemctl status ufw 查看防火墙状态。若防火墙开启,需按“命令速用版”中的命令放行端口。若使用 iptables,需检查 INPUT 链规则。
步骤 4:检查 Nacos 集群端口(仅集群模式)
如果 Nacos 以集群模式部署,服务器之间同步数据还需要 9849 端口(主端口 +1001)。确保集群节点间 9849 端口互通,否则集群状态可能异常。
怎么验证是否生效
方法 1:端口连通性测试
在客户端机器上执行 telnet <Nacos 服务器 IP> 9848。如果屏幕显示 Connected 或类似成功提示,说明网络层已通。如果显示 Connection refused 或一直 Trying,说明防火墙仍拦截或服务未监听。
方法 2:查看客户端日志
检查应用启动日志,搜索 com.alibaba.nacos 相关关键字。若注册成功,通常会看到 register instance ok 或类似信息。若仍失败,查看是否有 Connection refused 或 Server check fail 错误。
方法 3:服务端控制台观察
登录 Nacos 控制台,进入“服务管理”列表。查看对应服务实例列表,确认是否有健康实例上线。若实例状态为“健康”,说明注册链路已打通。
常见坑
1. 只开了 8848 没开 9848
很多运维习惯只开放文档中常见的 8848 端口,忽略 2.0 版本的偏移端口。务必确认客户端 SDK 版本,2.x 客户端必须依赖 9848。
2. 云安全组与系统防火墙双重拦截
云服务器通常有两层防护:云平台安全组和操作系统内部防火墙。两层都必须放行,仅配置其中一层无效。
3. 集群模式忽略 9849 端口
单机部署只需关注 9848。集群部署时,节点间通信使用 9849 端口。若 9849 不通,可能导致集群节点状态不一致,间接影响客户端注册。
4. 客户端 SDK 版本不匹配
如果服务端是 2.0,但客户端 SDK 是 1.x 版本,客户端会尝试使用 HTTP 连接 8848。虽然可能连通,但无法享受 2.0 特性且可能报错。建议服务端与客户端版本保持一致。
常见问题
Nacos 1.x 版本需要开放 9848 端口吗?
不需要。Nacos 1.x 版本主要使用 HTTP 协议,默认只需开放 8848 端口,9848 是 2.0 版本引入 gRPC 后才需要的。
修改了 Nacos 主端口,9848 也要跟着改吗?
是的。gRPC 端口是动态计算的,始终为主端口 +1000。如果主端口改为 8080,gRPC 端口自动变为 9080,防火墙需放行新端口。
客户端报错 Server check fail 是什么原因?
通常是客户端无法连接服务端的 gRPC 端口。优先检查 9848 端口是否被防火墙拦截,其次检查服务端是否正常运行。
参考来源
- Nacos 官方文档 - 2.0.0 兼容性说明,https://nacos.io/zh-cn/docs/2.0.0/compatibility.html
- Nacos GitHub Issues - 关于端口偏移的讨论与确认,https://github.com/alibaba/nacos