check-update] get changed dataId error, code: 403

前言

在微服务架构中,服务注册与配置管理是基础而关键的环节。Nacos作为流行的服务发现和配置管理工具,已被广泛应用于各种云原生场景。然而,在使用Nacos的过程中,我们可能会遇到鉴权失败的问题,导致服务无法正常注册或获取配置信息。本文将分享一起典型的Nacos鉴权失败案例,并提供详细的解决策略。

问题

新部署的项目 启动后 控制台一直报错 简要内容 [check-update] get changed dataId error, code: 403 具体内容如下

2023-11-17 11:34:44.015 ERROR [com.alibaba.nacos.client.Worker.longPolling.fixed-10.226.4.98_8848-cfbc33a4-3911-4fab-9c5d-bfb11ef20654] [,,,] com.alibaba.nacos.client.config.impl.ClientWorker.checkUpdateConfigStr - [fixed-10.226.4.98_8848-cfbc33a4-3911-4fab-9c5d-bfb11ef20654] [check-update] get changed dataId error, code: 403

目前看来功能没受到影响

分析定位

由于使用的是nacos 2.2.2 版本 并且 开了鉴权 ,初步感觉问题原因,是在鉴权的时候出的问题

检查项目版本

spring boot 2.3.12.RELEASE
spring cloud Hoxton.SR8
spring cloud alibaba 2.2.6.RELEASE
发现 服务注册发现和配置文件中使用nacos-client的是 1.4.2版本
和nacos-server 2.2.2. 版本相差过大

同时发现 鉴权开启后 应用的配置文件中需要添加配置

配置nacos的账号密码 方式选择其一 即可

#方式一 分别指定 discovery 和 config 账号密码
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=xxx
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=xxx
# 方式二 统一指定nacos的账号密码 
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=xxx

另外在断点查看nacos client源码中,过于低的版本的nacos-client 并不会携带 鉴权参数导致虽然加上了配置参数 但是也是无法生效

解决

pom文件中修改 nacos-client的版本 将nacos-discovery 和 nacos-config 依赖中的nacos-client排除 并引入新的版本

<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
   <exclusions>
       <exclusion>
           <groupId>com.alibaba.nacos</groupId>
           <artifactId>nacos-client</artifactId>
       </exclusion>
   </exclusions>
</dependency>

<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
   <exclusions>
       <exclusion>
           <groupId>com.alibaba.nacos</groupId>
           <artifactId>nacos-client</artifactId>
       </exclusion>
   </exclusions>
</dependency>

<dependency>
   <groupId>com.alibaba.nacos</groupId>
   <artifactId>nacos-client</artifactId>
   <version>2.2.2</version>
</dependency>

其他的可能原因

nacos的鉴权失败有几个原因

使用了较新的nacos-server开启了鉴权 但是 应用本身自带的nacos-client版本 过低

这个问题很重要 !!! (低版本的client 请求nacos-server时 可能不会携带 鉴权信息 导致鉴权失败)

鉴权开启后 应用的配置文件中未添加nacos 配置

选择如下方式的一种 添加即可

#方式一 分别指定 discovery 和 config 账号密码
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=xxx
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=xxx
# 方式二 统一指定nacos的账号密码 
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=xxx

鉴权配置没生效 (重要!!!)

未放置在bootstrap配置文件中 (需要将该配置放入到bootstrap 应用配置中 优先加载)(平常的项目配置文件 一般是 application-环境.yaml)需要修改成 bootstrap-环境.yaml

配置被重写 这个属于细节性问题,记得多检查

同一个配置文件配置了两遍 例如说在nacos的配置上或者 服务上对应的配置文件里 第一遍写了 账号密码 后面有配置了一遍 但是没有写上账号面 例如下面这样

# 统一指定nacos的账号密码 
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=xxx

//...... 省略其他的配置
spring.cloud.nacos.username=
spring.cloud.nacos.password=

nacos 账号密码 不对 切结配置正确的账号密码

。。。。

调试技巧

使用日志跟踪:开启Nacos客户端和服务端的详细日志,跟踪鉴权过程。
使用IDE断点:在IDE中设置断点,逐步执行代码,检查鉴权逻辑。

总结

Nacos鉴权失败可能由多种原因导致,包括版本不匹配、配置错误、配置未正确加载等。通过仔细检查和调整,可以解决这些问题。在处理类似问题时,建议从版本一致性、配置正确性、配置加载顺序等方面进行排查。


good day !!!

当您在终端执行 `yum check-update && yum update` 命令时,会出现以下类似的显示页面: ``` Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager epel/x86_64/metalink | 20 kB 00:00:00 * base: mirrors.neusoft.edu.cn * epel: ftp.cuhk.edu.hk * extras: mirrors.neusoft.edu.cn * updates: mirrors.neusoft.edu.cn base | 3.6 kB 00:00:00 epel | 4.7 kB 00:00:00 extras | 3.4 kB 00:00:00 updates | 3.4 kB 00:00:00 (1/6): base/7/x86_64/group_gz | 165 kB 00:00:00 (2/6): epel/x86_64/group_gz | 95 kB 00:00:00 (3/6): extras/7/x86_64/primary_db | 152 kB 00:00:00 (4/6): updates/7/x86_64/primary_db | 2.5 MB 00:00:01 (5/6): base/7/x86_64/primary_db | 6.0 MB 00:00:02 (6/6): epel/x86_64/primary_db | 6.8 MB 00:00:04 No packages needed for security; 3 packages available Resolving Dependencies --> Running transaction check ---> Package openssl.x86_64 1:1.0.2k-16.el7_6.1 will be updated ---> Package openssl.x86_64 1:1.0.2k-19.el7 will be an update ---> Package openssl-devel.x86_64 1:1.0.2k-16.el7_6.1 will be updated ---> Package openssl-devel.x86_64 1:1.0.2k-19.el7 will be an update ---> Package openssl-libs.x86_64 1:1.0.2k-16.el7_6.1 will be updated ---> Package openssl-libs.x86_64 1:1.0.2k-19.el7 will be an update --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Updating: openssl x86_64 1:1.0.2k-19.el7 base 492 k openssl-devel x86_64 1:1.0.2k-19.el7 base 1.5 M openssl-libs x86_64 1:1.0.2k-19.el7 base 1.2 M Transaction Summary ================================================================================ Upgrade 3 Packages Total download size: 3.2 M Is this ok [y/d/N]: ``` 此时,`yum check-update` 命令会检查可用的软件包更新,并显示可用更新的软件包列表。`yum update` 命令则会执行软件包更新操作。在这个例子中,系统检查到有三个软件包可以更新,分别是 `openssl`、`openssl-devel` 和 `openssl-libs`。更新前,系统会提示您下载更新的软件包的大小,并询问您是否要执行更新操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值