Nacos开启鉴权并验证实战案例

                                              作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.Nacos不建议直接暴露在公网

Nacos是一个内部微服务组件,需要在可信的内部网络中运行,不可暴露在公网环境,防止带来安全风险。

Nacos提供简单的鉴权实现,为防止业务错用的弱鉴权体系,不是防止恶意攻击的强鉴权体系。

如果运行在不可信的网络环境或者有强鉴权诉求,请参考官方简单实现做替换增强。

参考链接:
	https://nacos.io/zh-cn/docs/auth.html

二.非Docker环境部署Nacos开启鉴权案例

1.生成toke的值,自定义密钥时,推荐将配置项设置为Base64编码的字符串,且原始密钥长度不得低于32字符。

[root@master231 ~]# openssl rand -base64 33
SuYALHsuVE4XyjQelTMhFbzeHAgDptayAKa8d5pmkQ7K
[root@master231 ~]# 

2.修改Nacos的配置文件

[root@master231 ~]# vim /yinzhengjie/softwares/nacos/conf/application.properties
...
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=true
nacos.core.auth.server.identity.key=yinzhengjie
nacos.core.auth.server.identity.value=yinzhengjie
nacos.core.auth.plugin.nacos.token.secret.key=SuYALHsuVE4XyjQelTMhFbzeHAgDptayAKa8d5pmkQ7K

3.重启Nacos服务

[root@master231 ~]# /yinzhengjie/softwares/nacos/bin/shutdown.sh 
[root@master231 ~]# /yinzhengjie/softwares/nacos/bin/startup.sh -m standalone
[root@master231 ~]# ss -ntl | grep 8848
LISTEN 0      100                      *:8848             *:*          
[root@master231 ~]# 

4.访问Nacos的WebUI()

访问地址:
  http://10.0.0.231:8848/nacos

如上图所示,首次登录时设置默认的用户名和密码均为"nacos"。

三. 修改Nacos的初始密码

如上图所示,我们可以修改Nacos的初始化密码。

如下图所示,我们需要输入2次密码哟。

四. 验证Nacos是否能够写入配置

1.再次向Nacos写入数据时报错403

[root@worker232 ~]# curl -s -X POST "http://10.0.0.231:8848/nacos/v1/cs/configs?dataId=myblog&group=k8s&content=https://www.cnblogs.com/yinzhengjie" | more
{"timestamp":"2025-02-08T12:24:01.342+08:00","status":403,"error":"Forbidden","message":"user not found!","path":"/nacos/v1/cs/configs"}
[root@worker232 ~]# 

2.登录Nacos获取token(注意,使用修改后的Nacos用户名和密码哟)

[root@worker232 ~]# curl -s -X POST 'http://10.0.0.231:8848/nacos/v1/auth/login' -d 'username=nacos&password=yinzhengjie' | more 
{"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTczOTAwNjc4MX0.KT9vc_vPF3eT1GYVaVODWVciN0Mv-j7hkwN0fsrIFy4","tokenTtl":18000,"globalAdmi
n":true,"username":"nacos"}
[root@worker232 ~]# 

3.使用accessToken进行登录验证写入数据成功(需要用到上一步的accessToken值,如上图所示,数据写入成功)

[root@worker232 ~]# curl -s -X POST "http://10.0.0.231:8848/nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTczOTAwNjc4MX0.KT9vc_vPF3eT1GYVaVODWVciN0Mv-j7hkwN0fsrIFy4&dataId=myblog&group=k8s&content=https://www.cnblogs.com/yinzhengjie" | more
true
[root@worker232 ~]# 

4.命令行方式获取配置

[root@worker233 ~]# curl -s -X GET "http://10.0.0.231:8848/nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTczOTAwNjc4MX0.KT9vc_vPF3eT1GYVaVODWVciN0Mv-j7hkwN0fsrIFy4&dataId=myblog&group=k8s" | more
https://www.cnblogs.com/yinzhengjie
[root@worker233 ~]# 

5.基于webUI查看配置内容

如下图所示,我们也可以直接在WebUI查看即可

五.Nacos验证服务注册和发现

1.服务注册

[root@master231 ~]# curl -s -X POST 'http://10.0.0.231:8848/nacos/v1/ns/instance?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTczOTAwNjc4MX0.KT9vc_vPF3eT1GYVaVODWVciN0Mv-j7hkwN0fsrIFy4&serviceName=k8s&ip=10.0.0.232&port=10250' | more 
ok
[root@master231 ~]# 

[root@master231 ~]# curl -s -X POST 'http://10.0.0.231:8848/nacos/v1/ns/instance?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTczOTAwNjc4MX0.KT9vc_vPF3eT1GYVaVODWVciN0Mv-j7hkwN0fsrIFy4&serviceName=k8s&ip=10.0.0.233&port=10250' | more 
ok
[root@master231 ~]# 

2.服务发现

[root@worker233 ~]# curl -X GET -s  'http://10.0.0.231:8848/nacos/v1/ns/instance/list?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTczOTAwNjc4MX0.KT9vc_vPF3eT1GYVaVODWVciN0Mv-j7hkwN0fsrIFy4&serviceName=k8s' | jq
{
  "name": "DEFAULT_GROUP@@k8s",
  "groupName": "DEFAULT_GROUP",
  "clusters": "",
  "cacheMillis": 10000,
  "hosts": [
    {
      "instanceId": "10.0.0.232#10250#DEFAULT#DEFAULT_GROUP@@k8s",
      "ip": "10.0.0.232",
      "port": 10250,
      "weight": 1,
      "healthy": true,
      "enabled": true,
      "ephemeral": true,
      "clusterName": "DEFAULT",
      "serviceName": "DEFAULT_GROUP@@k8s",
      "metadata": {},
      "instanceHeartBeatTimeOut": 15000,
      "ipDeleteTimeout": 30000,
      "instanceIdGenerator": "simple",
      "instanceHeartBeatInterval": 5000
    },
    {
      "instanceId": "10.0.0.233#10250#DEFAULT#DEFAULT_GROUP@@k8s",
      "ip": "10.0.0.233",
      "port": 10250,
      "weight": 1,
      "healthy": true,
      "enabled": true,
      "ephemeral": true,
      "clusterName": "DEFAULT",
      "serviceName": "DEFAULT_GROUP@@k8s",
      "metadata": {},
      "instanceHeartBeatTimeOut": 15000,
      "ipDeleteTimeout": 30000,
      "instanceIdGenerator": "simple",
      "instanceHeartBeatInterval": 5000
    }
  ],
  "lastRefTime": 1738989624096,
  "checksum": "",
  "allIPs": false,
  "reachProtectionThreshold": false,
  "valid": true
}
[root@worker233 ~]# 

posted @ 2025-02-05 05:57  尹正杰  阅读(1728)  评论(0)    收藏  举报