前言

记录一下nacos从2.1.0版本升级到2.5.1版本的步骤
主要升级点就是打开了鉴权功能


一、扫描发现的漏洞

支撑的老师联系说绿盟扫描发现了一些漏洞,就开始挨个端口处理。nacos端口这里就出现了两个漏洞
在这里插入图片描述

二、升级前准备

先找开发环境升级,观察一段时间。

1. 选择版本

2025年7月14日,查看2版本的最新小版本
地址:https://nacos.io/download/nacos-server/?spm=5238cd80.2ef5001f.0.0.3f613b7crj7X5i
最新的是2.5.1版本

2. 下载镜像:

# 直接下载镜像
docker pull nacos/nacos-server:v2.5.1
# 国内源的话用下面这个
docker pull docker.1ms.run/nacos/nacos-server:v2.5.1
# 下载下来之后修改tag,推到本地仓库
docker tag docker.1ms.run/nacos/nacos-server:v2.5.1 local/library/nacos/nacos-server:v2.5.1

docker push local/library/nacos/nacos-server:v2.5.1

该处使用的url网络请求的数据。

3. 获取2.5.1版本数据库结构文件

下载地址:
https://download.nacos.io/nacos-server/nacos-server-2.5.1.zip?spm=5238cd80.2ef5001f.0.0.3f613b7crj7X5i&file=nacos-server-2.5.1.zip
下载解压后取出mysql-schema.sql文件

4. 检查启动文件差异

nacos就是nacos-quick-start.yaml来启动的,检查一下正在使用的和2.5.1的有没有啥区别
https://github.com/nacos-group/nacos-k8s/blob/master/deploy/nacos/nacos-quick-start.yaml
主要看下port和env,发现没啥特殊变化,修改nacos的版本信息
准备鉴权用到的变量

# 准备密钥
openssl rand -base64 24 | head -c 32
# 生成的密钥如下  
TA8rNDQ4GsJF3i4qbqmee1dRCH59Ni2n
# 根据密钥再转
echo -n 'TA8rNDQ4GsJF3i4qbqmee1dRCH59Ni2n' | base64
得到结果就是NACOS_AUTH_TOKEN的值
VEE4ck5EUTRHc0pGM2k0cWJxbWVlMWRSQ0g1OU5pMm4=

新增的鉴权变量信息

            - name: NACOS_AUTH_ENABLE
              value: "true"
            - name: NACOS_AUTH_TOKEN
              value: "VEE4ck5EUTRHc0pGM2k0cWJxbWVlMWRSQ0g1OU5pMm4="
            - name: NACOS_AUTH_IDENTITY_KEY
              value: "nacos"
            - name: NACOS_AUTH_IDENTITY_VALUE
              value: "nacos"

三、开始升级nacos

1、下载nacos上已有的配置文件

使用配置导出功能将业务配置文件都导出保存,由于我们项目还是用seata,所以把seata-server命名空间下的配置也都导出保存

2、保存记录下已有的命名空间信息

3、关闭nacos服务

kubectl delete -f nacos-quick-start.yaml

4、删除掉外部数据库中的nacos表,并导入新的mysql-schema.sql表结构问题

5、启动nacos服务

kubectl create -f nacos-quick-start.yaml

6、检查nacos日志,查看有无明显ERR日志

没有明显异常日志,页面也可以打开,继续升级

7、初次登陆修改nacos管理员的密码

修改成之前的nacos密码,不要用新的带特殊符号的密码,带特殊符号的话,容易出现转义错误。

8、登陆之后把命名空间和命名空间下的配置项重新导入

至此,nacos升级完成

四、项目其他部分增加nacos鉴权信息

1、后端服务

业务的application.yml文件增加nacos的账号密码配置,configmap和deployment中增加变量参数,然后重新打包就可以正常运行了

application.yml文件

在这里插入图片描述

configmap文件
在这里插入图片描述
deployment文件
在这里插入图片描述

2、前端服务

在nacos_source_url后面追加账号密码信息&username=nacos&password=XXXXXX之后就能正常运行了
在这里插入图片描述

3、业务配置中seata配置增加nacos账号密码

增加账号密码信息之后,服务就可以正常注册到seata-server了
在这里插入图片描述


五、遇到的问题

1、业务pod未配置鉴权信息问题

解决方式就是后端服务增加nacos账号密码

7:05:06.418 [main] ERROR org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter -- 
***************************
APPLICATION FAILED TO START
***************************
Description:
Config data resource 'NacosConfigDataResource{properties=NacosConfigProperties{serverAddr='192.168.150.XX:8848', encode='null', group='DEFAULT_GROUP', prefix='null', fileExtension='yaml', timeout=3000, maxRetry='null', configLongPollTimeout='null', configRetryTime='null', enableRemoteSyncConfig=false, endpoint='null', namespace='ab4324b9-0b9e-4c4c-92c5-6f9c8e9c548a', accessKey='null', secretKey='null', ramRoleName='null', contextPath='null', clusterName='null', name='null'', shares=null, extensions=null, refreshEnabled=true}, optional=false, profiles=[Profiles@4fad9bb2 active = '[]', default = '[default]', accepted = '[default]'], config=NacosItemConfig{group='DEFAULT_GROUP', dataId='service-gateway.yaml', suffix='yaml', refreshEnabled=true, preference=null}}' via location 'nacos:service-gateway.yaml' does not exist
Action:
Check that the value 'nacos:service-gateway.yaml' at class path resource [application.yml] from api_gateway-1.0-SNAPSHOT.jar - 3:13 is correct, or prefix it with 'optional:'
17:05:06.426 [Thread-6] WARN com.alibaba.nacos.common.notify.NotifyCenter -- [NotifyCenter] Start destroying Publisher
17:05:06.426 [Thread-1] WARN com.alibaba.nacos.common.http.HttpClientBeanHolder -- [HttpClientBeanHolder] Start destroying common HttpClient
17:05:06.426 [Thread-6] WARN com.alibaba.nacos.common.notify.NotifyCenter -- [NotifyCenter] Destruction of the end
17:05:06.426 [Thread-1] WARN com.alibaba.nacos.common.http.HttpClientBeanHolder -- [HttpClientBeanHolder] Destruction of the end

2、密码带有特殊符号问题

解决方式就是去掉特殊符号

<html><body><h1>Whitelabel Error Page</h1><p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p>
<div id='created'>Fri Jul 23 14:28:47 GMT+08:00 2021</div><div>There was an unexpected error (type=Forbidden, status=403).</div>
<div>unknown user!</div>

总结

2.5.1的这个版本应该可以用一大段时间了

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐