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 版本基本不受影响。

相关推荐
加藤不太惠2 天前
Nacos简单实用集群创建
java·开发语言·nacos
南部余额2 天前
Nacos 从入门到实战:一站式注册中心与配置中心详解
nacos·注册中心·配置中心·命名空间·分组·临时实例·永久实例
加藤不太惠9 天前
安装nacos注意事项
nacos
rchmin9 天前
Nacos配置中心避坑指南:灵活配置 server-addr 的坑
分布式·nacos·动态配置
毕小宝9 天前
Nacos 3.2.0 升级问题汇总
nacos
0xDevNull12 天前
Spring Boot 3.x 整合 Nacos 全栈实战教程
java·spring boot·nacos
色空大师15 天前
【nacos下载安装】
java·linux·nacos·ubantu
kaizq20 天前
Python-Nacos电商订单分布微服系统开发
python·nacos·分布微服务·ai-ima-glm·电商订单
zs宝来了23 天前
Nacos 服务发现与配置中心原理:AP 架构与 Distro 协议
nacos·服务发现·配置中心·ap架构·distro协议