开发环境
JavaJDK:1.8
SpringBoot:2.2.10.RELEASE
SpringCloud:Hoxton.SR8
SpringCloudAlibaba:2.2.3.RELEASE
Nacos:1.3.2
问题描述
最近在使用SpringCloudAlibaba进行微服务项目开发,注册中心和配置中心用的是Nacos1.3.2,当Nacos开启了认证配置nacos.core.auth.enabled=true
时,在相应的微服务应用内需要配置连接Nacos1.3.2的账号:也就是使用spring.cloud.nacos.username
和spring.cloud.nacos.password
进行配置,正常应用连接是没问题的,但是发现如果应用内使用了spring-cloud-starter-oauth2
这个包,项目启动时虽然能正常注册到Nacos并且配置中心的配置也能正常读取,但是控制台会抛出以下错误:
com.alibaba.nacos.api.exception.NacosException: <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'>Thu Oct 15 11:23:13 CST 2020</div><div>There was an unexpected error (type=Forbidden, status=403).</div><div>authorization failed!</div></body></html>
解决方案
这个错误看起来像是认证失败导致没有连接到Nacos的API的异常,但是经过排查,Nacos配置中心和注册中心都是能够正确使用的,并且检查了配置文件内的Nacos账号密码配置,并没有什么不对。这就令人玩味了,既然微服务应用没问题,那肯定是Nacos的问题了,所以,再仔细看下日志,发现有一段异常输出内容包含了/nacos/v1/ns/operator/metrics failure
,大致意思就是在访问Nacos的这个接口时失败,而metrics相关接口在Nacos服务端的配置内是关闭的,Nacos服务端默认metrics配置如下:
从配置中,可见Nacos默认并没有开放metrics 的任何Api供外界访问,所以项目内在回调查询注册中心状态时抛出了上述的错误,那么我们只需要把Nacos服务端内这个配置打开,就可以了,修改Nacos的application.properties
内的配置management.endpoints.web.exposure.include=health
: