Nacos 3.1.2 适配 PG 数据库插件打包全流程分享

背景

Nacos 2.5.x 版本存在未授权漏洞问题,说是漏洞也可能不是,就是它有几个 API 接口 /nacos/v1/console/namespaces/nacos/v2/console/namespace 不需要登录就能访问。

而它们是用来展示Nacos集群中存在的命名空间信息,默认是公开且不支持直接关闭或进行鉴权的。这是因为它们被设计为提供公开数据,类似云平台的Region信息,旨在允许用户查看和选择命名空间,也不算是漏洞。

解决办法

客户方漏扫认为是 Bug,需要升级。前面调研了最新版本 3.2.0 的功能,它内置了所有的数据库插件,但是实际测下来,关键功能操作有问题,感觉这是个没有准备好就发布的版本。

GitHub 上都找不到这个版本的 issues ,最后放弃了。选择了一个比较早的版本 3.1.2,自己打包 PG 数据库插件,这个版本的功能和界面跟 2.x 基本一致,只是多了 AI 几个新功能。而且官网插件也是基于这个版本的,编译一下就通过了。

编译流程

第一步,下载 nacos-plugin-develop 源码,然后修改 pom.xml 的 nacos 版本编号:

bash 复制代码
<alibaba-nacos.version>3.1.2</alibaba-nacos.version>

第二步,nacos-datasource-plugin-ext 模块下的 nacos-postgresql-datasource-plugin-ext 模块打包。

第三步,拷贝 target 目录下的 original-nacos-postgresql-datasource-plugin-ext-1.0.0-SNAPSHOT.jar 原始包放到 nacos server 的 plugins 目录。这个包里面不含 PG 的驱动,可以根据目标数据库添加其他基于 PG 的数据库驱动。

第四步,拷贝 PG 驱动到 nacos server 的 plugins 目录,之所以这么麻烦是因为数据库可能不是标注的 PG,而是其他基于 PG 的产品,需要自己的驱动。

部署 nacos

第一步,数据库初始化,创建目标数据库,然后执行 conf 目录下的 pg_schema.sql 文件。需要注意,这个版本的初始化 SQL 里面缺少用户信息初始化语句。

第二步,进入 conf 目录,修改 application.properties 配置中的数据库连接信息。

bash 复制代码
db.num=1
spring.datasource.platform=postgresql
db.url.0=jdbc:postgresql://xxx:xxx/nacos?tcpKeepAlive=true&reWriteBatchedInserts=true
db.user=xxx
db.password=xxx
db.pool.config.driverClassName=org.postgresql.Driver

第三步 ,进入 bin 目录,执行启动脚本:sh startup.sh -m standalone,3.x 版本默认需要开启认证,首次执行时,如果配置中没有认证信息,需要输入:

设置三个认证相关的配置后,查看启动结果。注意,nacos 3.x 版本需要 JDK 17。

访问 nacos

Nacos3.x 版本的控制台访问端口默认为 8080,首次登录访问地址为 http://IP:8080/

首次登录输入默认帐号密码 nacos/nacos 认证失败,比对 3.1.2 和最新版本 3.2.0 ,发现 初始化脚本里面缺少帐号信息的初始化语句:

bash 复制代码
INSERT INTO users (username, password, enabled)
VALUES ('nacos',
        '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', true);
commit ;

执行后,再登录,除了 标注为 New 的新菜单,其他功能跟 2.5 一样,哇,熟悉的感觉!搞不懂为什么 3.2.x 新版本直接把 UI 风格完全变了!

启示录

我是 nacos 官网安装手册里面配置的链接路径下载的新版本 3.2.1 ,但是部署下来发现重要的配置管理功能在新的 UI 里面操作不了。但是以旧版本的界面打开是可以的,难道发布之前没有人测过新版的 UI 吗?还是说测试人员也看不过新版本 UI 直接点开旧版本测试的功能?

3.1.2 版本的 pg-schema.sql 里面缺少初始化帐号的脚本,之前2.x 版本是首次登录的时候,自动插入初始帐号的。新版本改动的时候把这个逻辑弄没了,又忘记更新初始化 SQL 了。

结论就是,3.1.2 版本还算稳定,客户端不动,还保留 nacos 2.x 版本基本不受影响。

相关推荐
rebibabo5 天前
Java进阶(1) | 微服务入门:从单体到 Spring Cloud 全家桶
spring cloud·微服务·nacos·openfeign·服务注册与发现·java进阶·单体架构
不能只会打代码8 天前
校享云 — 高校智慧后勤平台微服务架构设计与实践
spring cloud·docker·微服务·nacos·vue·校享云
雪碧聊技术9 天前
Spring Boot项目如何彻底禁用Nacos(服务发现+配置中心),本地启动不再依赖Nacos
spring boot·nacos·服务发现
Misnearch10 天前
nacos配置管理改造
java·spring cloud·nacos
熊出没10 天前
你用过nacos的主动创建服务吗
nacos
真实的菜11 天前
实战:用HealthCheckProcessor实现Redis探活插件
nacos
凤山老林1 个月前
JDK 11 升级至 JDK 17
java·开发语言·jdk17·jdk升级·jdk11
my_styles1 个月前
nacos 报错 errCode: 500, errMsg: do metadata operation failed
nacos
染翰1 个月前
Nacos 切换 Namespace 后配置不生效、占位符报错终极复盘
java·后端·spring·nacos
小毕超1 个月前
基于A2A + AgentScope + Nacos 构建分布式高可用异构 Agent 方案
nacos·a2a·agentscope