【踩坑】SpringBoot 应用启动失败:Nacos 2.x 9848 端口被防火墙拦截
·
一、问题现象
最近部署微服务项目时,遇到了一个非常隐蔽的坑:我的 CartApplication 服务启动直接报错退出,日志里疯狂报 Nacos 服务注册超时 / 连接失败,但奇怪的是:
- ✅ Nacos 控制台
http://192.168.100.128:8848/nacos能正常访问,账号密码登录完全没问题 - ❌ 应用启动时一直报错,无法完成服务注册,直接退出进程
- ❌ 客户端
telnet 192.168.100.128 8848能通,但telnet 192.168.100.128 9848直接超时
二、根本原因:Nacos 2.x 通信机制变化
很多人都知道 Nacos 1.x 的端口,但 Nacos 2.x 升级后,通信机制做了大改动,新增了gRPC 通信端口
Nacos 2.x 端口用途对照表:
表格
| 端口 | 用途 | 我的状态 |
|---|---|---|
| 8848 | HTTP API / 控制台页面、配置中心 | ✅ 已开放,能正常访问 |
| 9848 | gRPC 客户端通信端口(服务注册 / 发现、心跳发送、配置变更推送) | ❌ 被防火墙拦截,客户端连不上 |
| 9849 | gRPC 集群通信端口(节点间同步、选举) | ❌ 被防火墙拦截 |
⚠️ 划重点:客户端服务注册、定时心跳都是通过 9848 端口的 gRPC 协议 完成的,不是 8848!这个端口不通,服务就注册不到 Nacos 上,应用直接报错退出。
三、解决方案:开放防火墙端口
我的环境是 CentOS 7 虚拟机,直接执行下面的命令,1 分钟搞定:
1. 开放 Nacos 2.x 的关键端口
# 开放gRPC客户端通信端口(9848)
firewall-cmd --zone=public --add-port=9848/tcp --permanent
# 开放gRPC集群通信端口(9849,单机模式也建议开放)
firewall-cmd --zone=public --add-port=9849/tcp --permanent
# 重载防火墙配置,让端口规则生效
firewall-cmd --reload
2. 验证端口是否开放成功
# 查看已开放的端口列表,确认9848/9849在列表中
firewall-cmd --list-ports
看到输出里包含 9848/tcp、9849/tcp 就说明配置成功了。
3. 客户端测试端口连通性
在你的开发机 / 其他服务器上执行 telnet 命令,测试端口是否能通:
telnet 192.168.100.128 9848
如果能正常进入 telnet 交互界面,说明端口已经通了。
更多推荐


所有评论(0)