k8s集群中部署生产级Nacos服务

k8s集群中部署生产可用的Nacos服务

1.整体架构与设计原则

决策 原因
使用官方 Chart 与 Nacos 版本同步最好,社区维护,升级路径清晰
Nacos版本 2.4.0
global.mode: cluster 生产尽量高可用(根据实际情况选择是否用单节点)
replicaCount: 3 奇数副本保证 Raft 选主;推荐最少 3
外部 MySQL(版本5.7.44) 生产数据不能放在嵌入式 Derby
开启鉴权 + existingSecret 生产必须鉴权;密钥用 Secret 管理,避免写在 values 或 ConfigMap 里
开启 persistence 日志、raft 数据需要持久化,否则重启/漂移会丢状态(数据持久化用CubeFS)
资源限制 requests/limits 防止资源争抢和 OOM,保证可调度
反亲和性 podAntiAffinity 尽量把 3 个 Pod 打散到不同节点,提升可用性
对外暴露Istio(或者Ingress) 生产不直接暴露 NodePort,统一走 Istio 或者 Ingress

2.前置准备

2.1获取官方Chart包

官方的Github项目地址:https://github.com/nacos-group/nacos-k8s

1
2
3
# 使用master分支部署Nacos 2.x服务
# 拉取代码
git clone https://github.com/nacos-group/nacos-k8s.git

如果服务器网络慢的话也可以通过浏览器下载ZIP包到本地,在上传到服务器上:

1
2
3
4
5
6
7
# 将下载好的zip包上传到服务器
# 文件上传路径是/nacos
[root@k8s-master01 nacos]# pwd
/nacos
[root@k8s-master01 nacos]# ll
total 2380
-rw-r--r-- 1 root root 2435904 Nov 8 15:32 nacos-k8s-master.zip

解压缩:

1
[root@k8s-master01 nacos-k8s-master]# unzip nacos-k8s-master.zip

进入到 Helm 目录:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@k8s-master01 nacos-k8s-master]# cd nacos-k8s-master/
# 进入 helm 目录,后续所有 helm 命令都在这个目录执行
[root@k8s-master01 nacos-k8s-master]# cd helm/
[root@k8s-master01 helm]# ll
total 36
-rw-r--r-- 1 root root 293 Nov 2 12:44 Chart.yaml
-rw-r--r-- 1 root root 19271 Nov 2 12:44 README.md
drwxr-xr-x 2 root root 148 Nov 2 12:44 templates
-rw-r--r-- 1 root root 1997 Nov 2 12:44 values.schema.json
-rw-r--r-- 1 root root 4106 Nov 2 12:44 values.yaml

#如果是在线clone的直接cd到helm目录即可
cd 。/nacos-k8s/helm

2.2准备外置MySQL

生产数据不放在嵌入式 Derby,而是放在外置的MySQL数据库中。

创建一个数据库用户(nacos)专门给Nacos服务使用,并限制权限。

1
2
3
4
5
6
7
-- 1. 创建库(字符集必须 utf8mb4),创建的库名是nacos,专门给nacos服务使用
CREATE DATABASE nacos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 2. 创建专用用户(不要用 root),用户是nacos,密码是asdqwe123
CREATE USER 'nacos'@'%' IDENTIFIED BY 'asdqwe123';
GRANT ALL PRIVILEGES ON nacos.* TO 'nacos'@'%';
FLUSH PRIVILEGES;

通过官方的 schema 来初始化数据,我是用的是Nacos 2.x版本(必须与 Nacos 版本匹配):

从https://github.com/alibaba/nacos.git仓库获取数据库文件,找到自己版本对应的标签:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
不能直接用 develop 分支的 schema。我用的是 nacos-server:v2.4.0,必须使用对应版本的 SQL 文件,不能用 develop(当前是 3.x 开发分支)的。为什么不能用 develop?
因为develop 分支是 Nacos 3.x 的开发代码,表结构、字段、索引都可能和 2.4.0 有差异。用 3.x 的 schema 初始化 2.4.0,可能出现字段缺失、多余字段、启动报错等问题。

Nacos 2.x版本和3.x版本的mysql-schema.sql文件路径有所不同
从 Nacos 3.2.0 开始,官方把 mysql-schema.sql 从 distribution/conf/ 挪到了插件目录:plugin-default-impl/nacos-default-datasource-plugin/nacos-datasource-plugin-mysql/src/main/resources/META-INF/mysql-schema.sql

原则:镜像版本是多少,就用对应 tag 的 schema。正确做法(针对 v2.4.0)直接从 2.4.0 标签下载:固定到 2.4.0 标签
curl -o mysql-schema.sql \
https://github.com/alibaba/nacos/blob/2.4.0/distribution/conf/mysql-schema.sql
#备选方案:从 release 包里取
# 先下载 Nacos 2.4.0 发行包,解压后 distribution/conf 目录里就有 mysql-schema.sql
wget https://github.com/alibaba/nacos/releases/download/2.4.0/nacos-server-2.4.0.tar.gz
tar -xzf nacos-server-2.4.0.tar.gz
# 文件位置:nacos-2.4.0/distribution/conf/mysql-schema.sql,将sql文件恢复到nacos的数据库中

恢复后的表如下:


这里我用的MySQL数据库是在k8s集群外部单独部署的,为了统一管理,这里使用Service进行代理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 创建一个ruoyi命名空间
kubectl create ns ruoyi

# 创建service资源:
cat external-mysql-svc.yaml
kind: Service
apiVersion: v1
metadata:
name: external-mysql-svc #指定该MySQL的Service名字,k8s集群内服务连接MySQL时可以使用该名字
namespace: ruoyi #Service所在的命名空间,因为这个Nacos服务是准备给后面ruoyi项目用的,所以就部署在ruoyi空间
labels:
app: external-mysql
spec:
ports:
- protocol: TCP
port: 3306 #k8s集群内访问MySQL服务用3306端口
targetPort: 33806 # 指向 Endpoints 中定义的后端真实端口
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: external-mysql-svc
namespace: ruoyi
labels:
app: external-mysql
subsets:
- addresses:
- ip: 192.168.0.89 #MySQL服务所在节点的ip
ports:
- protocol: TCP
port: 33806 #这是外部MySQL服务的真实端口

创建svc,这个nacos是为了给ruoyi项目使用的,所以所有服务都创建在ruoyi空间:

1
2
3
[root@k8s-master01 mysql]# kubectl create -f external-mysql-svc.yaml -n ruoyi
service/external-mysql-svc created
endpoints/external-mysql-svc created
1
2
3
[root@k8s-master01 mysql]# kubectl get svc -n ruoyi
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
external-mysql-svc ClusterIP 10.96.105.207 <none> 3306/TCP 6m46s

nacos-server服务连接数据库所用的信息如下:

1
2
3
4
k8s集群内的数据库连接地址:external-mysql-svc.ruoyi.svc.cluster.local
用户:nacos
密码:asdqwe123
库名:nacos

2.3生成生产及鉴权密钥

Nacos 开启 Client API 鉴权,生产必须自己生成强密钥。

使用 existingSecret 后,密钥不会写进 values.yaml,升级时也不会被覆盖。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# token 建议 Base64,解码后长度足够(官方要求至少 32 字节)
[root@k8s-master01 mysql]# export NACOS_AUTH_TOKEN=$(openssl rand -base64 48 | tr -d '\n')
[root@k8s-master01 mysql]# export NACOS_AUTH_IDENTITY_KEY=$(openssl rand -hex 16)
[root@k8s-master01 mysql]# export NACOS_AUTH_IDENTITY_VALUE=$(openssl rand -hex 16)

[root@k8s-master01 mysql]# echo "NACOS_AUTH_TOKEN=$NACOS_AUTH_TOKEN"
NACOS_AUTH_TOKEN=XJchWQ+rACK5qQSEiQIhiC4nyNzzsUM0M8+Et6bx/HhhPXD2IO/prqo9Z5vQZby+

[root@k8s-master01 mysql]# echo "NACOS_AUTH_IDENTITY_KEY=$NACOS_AUTH_IDENTITY_KEY"
NACOS_AUTH_IDENTITY_KEY=4160ace3a76a3a12bc6307bbb8a2b125

[root@k8s-master01 mysql]# echo "NACOS_AUTH_IDENTITY_VALUE=$NACOS_AUTH_IDENTITY_VALUE"
NACOS_AUTH_IDENTITY_VALUE=a7c67ea5322b95e7f5bfd056b4a95378


# 利用上面生成的token生成secret,secret名字是nacos-auth,也创建在ruoyi空间
[root@k8s-master01 mysql]# kubectl create secret generic nacos-auth -n ruoyi \
--from-literal=token="${NACOS_AUTH_TOKEN}" \
--from-literal=identity-key="${NACOS_AUTH_IDENTITY_KEY}" \
--from-literal=identity-value="${NACOS_AUTH_IDENTITY_VALUE}"
secret/nacos-auth created

[root@k8s-master01 mysql]# kubectl get secrets -n ruoyi
NAME TYPE DATA AGE
nacos-auth Opaque 3 57s

这个步骤是在干什么?

它在生成三个鉴权相关的密钥:

变量 作用
NACOS_AUTH_TOKEN 用于签发/校验用户登录后的 JWT Token(登录凭证)
NACOS_AUTH_IDENTITY_KEY 集群节点之间互相识别的“身份 Key”
NACOS_AUTH_IDENTITY_VALUE 对应的“身份 Value”

简单理解:

  • 用户登录控制台/调用 API 时,靠 TOKEN 生成的 JWT 来证明身份
  • 多个 Nacos 节点组成集群时,靠 IDENTITY_KEY/VALUE 互相确认“你是不是自己人”

生成后通常会放进 Kubernetes Secret,再通过环境变量或 Chart 的 existingSecret 注入给 Nacos。

如果你的nacos服务不需要开启鉴权可以忽略该步骤,如果要开启鉴权就不能省略,在nacos 3.x的版本默认就已经打开了鉴权。

生产环境建议:

  • 开启鉴权
  • 自己生成强密钥(不要用默认或空值)
  • 把密钥放进 Secret,而不是写在 values 明文里

2.4编写生产 values 文件(核心)

修改values.yaml文件,以达到生产要求:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
imagePullSecrets: []
# 如果使用私有仓库需要认证,取消注释并填写
# - name: your-registry-secret

global:
mode: cluster # 【生产必须】集群模式
nacos:
image:
repository: registry.cn-beijing.aliyuncs.com/k8s-liujunwei/nacos-server # 已经提前将镜像同步到我的阿里云仓库了
tag: v2.4.0 # 【建议固定版本】
pullPolicy: IfNotPresent
plugin:
enable: true
image:
repository: registry.cn-beijing.aliyuncs.com/k8s-liujunwei/nacos-peer-finder-plugin
tag: latest
pullPolicy: IfNotPresent
replicaCount: 3 #集群副本3,奇数个
auth:
enabled: true #开启认证
existingSecret: "nacos-auth" # 指定2.3中创建的secret
tokenSecretKey: token
identityKeySecretKey: identity-key
identityValueSecretKey: identity-value
authToken: ""
identityKey: ""
identityValue: ""
probe:
startupDelaySeconds: 180 #给足启动时间
health:
enabled: true #开机健康检查
storage:
#type: embedded
type: mysql #使用外部MySQL
db:
host: external-mysql-svc.ruoyi.svc.cluster.local #数据库的连接地址
name: nacos # 数据库的名称,连接的哪个库
port: 3306 # 数据库的端口,这个端口是集群内Service的端口
username: nacos #连接数据库用的用户名
password: asdqwe123 #nacos用户的密码
param: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false #param参数默认
persistence:
enabled: true # 开启持久化
data:
accessModes:
- ReadWriteOnce
storageClassName: "cfs-sc" #StorageClass 的名称,我的后端存储是cubefs
resources:
requests:
storage: 10Gi #存储大小10G
service:
#type: ClusterIP
type: NodePort #我这里用的NodePort,先测试,没问题后面会改成istio暴露服务,使用istio这里会改成ClusterIP
port: 8848
nodePort: 30000
resources: # 定义资源大小,按需求配置
requests:
cpu: 1000m
memory: 2Gi
# limits:
# cpu: "2000m"
# memory: "4Gi"
#pod的反亲和性为了省事我这里没配置,需要配置的参考下文
1
2
3
4
5
6
# MySQL 连接参数(MySQL5.7时默认即可)
param: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false

# 如果外部 MySQL 是 8.0+,建议加上 allowPublicKeyRetrieval=true,否则可能报公钥检索错误:
param: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true

下图原配置和修改后的对比截图,左边是chart包里values.yaml默认配置 ,右边是修改后的values.yaml配置:

global.mode: cluster + replicaCount: 3
生产高可用必须。单节点无法容忍故障。

nacos.auth.enabled: true + existingSecret
生产必须鉴权。用 Secret 管理密钥,避免明文出现在 values 或 Git 仓库。

storage.type: mysql + 完整 db 配置
生产数据必须进外部数据库,才能做备份、主从、监控。

persistence.enabled: true
即使使用外部 MySQL,Nacos 自身仍有 raft 日志、本地缓存等需要持久化,否则 Pod 重建后集群状态恢复慢或不稳定。

resources
不设 limits 容易被其他 Pod 挤占或 OOMKill;requests 保证调度时有足够资源。

affinity.podAntiAffinity,该配置我没设置,生产建议配置
强制/尽量把副本分散到不同物理节点,避免单节点故障导致整个集群不可用。

1
2
3
4
5
6
7
8
9
10
11
12
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- nacos
topologyKey: kubernetes.io/hostname

3.安装Nacos集群

在正式安装前可以先执行dry-run检查渲染出来的 YAML 是否正确,避免直接上生产出错:

1
2
3
4
# 在values.yaml执行
helm install nacos . \
-n ruoyi \
--dry-run --debug

没有问题在正式安装服务:

1
2
# 在values.yaml所在的目录中执行安装指令
[root@k8s-master01 helm]# helm install nacos . -n ruoyi

查看服务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@k8s-master01 helm]# helm  list  -n ruoyi
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
nacos ruoyi 1 2026-11-08 22:16:28.181960688 +0800 CST deployed nacos-1.3.0 3.3.0


[root@k8s-master01 helm]# kubectl get all -n ruoyi
NAME READY STATUS RESTARTS AGE
pod/nacos-0 1/1 Running 0 78m
pod/nacos-1 1/1 Running 0 78m
pod/nacos-2 1/1 Running 0 78m

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/external-mysql-svc ClusterIP 10.96.105.207 <none> 3306/TCP 3h45m
service/nacos-cs NodePort 10.96.115.191 <none> 8848:30000/TCP,9848:31972/TCP,9849:31743/TCP,7848:32752/TCP 78m
service/nacos-hs ClusterIP None <none> 8848/TCP,9848/TCP,9849/TCP,7848/TCP 78m

NAME READY AGE
statefulset.apps/nacos 3/3 78m

[root@k8s-master01 helm]# kubectl get pvc -n ruoyi
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
data-nacos-0 Bound pvc-73b96b6b-ed54-4799-bff1-5c137a960fdb 10Gi RWO cfs-sc <unset> 78m
data-nacos-1 Bound pvc-69e1e6f6-7dbc-411c-bd04-98eb12704a69 10Gi RWO cfs-sc <unset> 78m
data-nacos-2 Bound pvc-fb7ccb93-6e41-480b-85b8-b36a72c10da7 10Gi RWO cfs-sc <unset> 78m

查看pod日志,启动成功后日志中会出现类似信息:

1
2
3
2026-11-08 22:17:44,457 INFO Nacos is starting...
2026-11-08 22:17:45,458 INFO Nacos is starting...
2026-11-08 22:17:46,048 INFO Nacos started successfully in cluster mode. use external storage

4.访问web控制台

4.1修改nacos用户密码

启动成功通过NodePort的端口访问,2.4.0之前的版本会有默认账号密码:nacos / nacos

自 2.4.0 版本开始,Nacos构建时不再提供管理员用户nacos的默认密码,需要在首次开启鉴权后,通过 API 或 Nacos 控制台进行管理员用户nacos的密码初始化。

本文选择 Nacos 控制台的方式初始化密码,当 Nacos 集群开启鉴权后,访问 Nacos 控制台时,会校验管理员用户nacos的密码是否已经初始化,若发现未初始化密码时,则会跳转至初始化密码的页面进行初始化。

在该页面密码文本框内输入自定义密码,然后点击提交即可。


注意: 若密码文本框内未输入自定义密码或输入空白密码,Nacos 将会生成随机密码,请保存好生成的随机密码。

初始化成功后会弹窗提示初始化成功,并明文展示指定的密码或随机生成的密码,请保存好此密码。

4.2重置nacos用户密码

如果后续忘记了nacos管理员的密码可以通过修改MySQL表中数据进行密码的重置,下面演示修改nacos的密码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 如果在web端修改不起作用,可以直接在数据库里修改
htpasswd -nbBC 10 '' '你的新密码' | tr -d ':\n' | sed 's/^//'

# 得到类似:
$2a$10$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# 例如:
[root@k8s-master01 helm]# htpasswd -nbBC 10 '' 'asdqwe123' | tr -d ':\n' | sed 's/^//'
$2y$10$aiAFvwRI6ob6HujNg2dyWeYd/tKgTuOYTdjy9QkAP314w8nHp1EoW

# 登录数据库在数据库里执行:
USE nacos; -- 你的库名

-- 先看当前值
SELECT username, password FROM users WHERE username='nacos';

-- 更新(把下面密文换成你自己生成的)
UPDATE users
SET password='$2y$10$aiAFvwRI6ob6HujNg2dyWeYd/tKgTuOYTdjy9QkAP314w8nHp1EoW'
WHERE username='nacos';


--查看修改后的值
SELECT username, password FROM users WHERE username='nacos';

5.通过Istio对外暴露服务

弄过NodePort的方式能正常登录控制台后,使用Istio来对外暴露服务:

1
2
3
4
5
6
7
8
9
10
# 先将原来使用的NodePort改成ClusterIP
[root@k8s-master01 helm]# kubectl edit svc -n ruoyi nacos-cs
# 找到type: NodePort 改成 ClusterIP
type: ClusterIP


# 保存退出后查看svc,已经变更为ClusterIP:
[root@k8s-master01 helm]# kubectl get svc -n ruoyi nacos-cs
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nacos-cs ClusterIP 10.96.115.191 <none> 8848/TCP,9848/TCP,9849/TCP,7848/TCP 3d1h

创建Istio Gateway + VirtualService(控制台 HTTP),使用nacos.gateway.com进行访问nacos控制台:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 创建Gateway和VirtualService
[root@k8s-master01 nacos]# cat nacos-gateway.yaml
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: nacos-gateway
namespace: ruoyi
spec:
selector:
istio: ingressgateway # 按自己集群istio-ingressgateway的pod标签改
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- nacos.gateway.com #指定访问nacos控制台的域名
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: nacos-vs
namespace: ruoyi
spec:
hosts:
- nacos.gateway.com
gateways:
- nacos-gateway
http:
- match:
- uri:
prefix: /nacos
route:
- destination:
host: nacos-cs.ruoyi.svc.cluster.local
port:
number: 8848
timeout: 30s

创建资源:

1
2
3
[root@k8s-master01 nacos]# kubectl create -f nacos-gateway.yaml -n ruoyi
gateway.networking.istio.io/nacos-gateway created
virtualservice.networking.istio.io/nacos-vs created

本地测试记得加hosts解析,通过nacos.gateway.com:30080/nacos访问:


注意:

  • 业务应用 不要 走公网域名访问 Nacos
  • 用集群内应该用 Service,延迟更低、更稳
  • Istio Gateway 主要用于 人访问控制台,不是给所有微服务绕一圈

若微服务在集群外,才需要在 Gateway 上额外暴露 8848/9848,并做好鉴权与网络限制,参考如下:

gRPC(9848)若必须经 Istio:

1
2
3
4
5
6
7
# Gateway 增加
- port:
number: 9848
name: nacos-grpc
protocol: GRPC
hosts:
- nacos.gateway.com
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# VirtualService增加(gRPC)
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: nacos-vs
namespace: ruoyi
spec:
hosts:
- nacos.gateway.com
gateways:
- nacos-gateway
http: # Istio 对 gRPC 常走 http 路由块 + protocol GRPC
- match:
- port: 9848
route:
- destination:
host: nacos-cs.ruoyi.svc.cluster.local
port:
number: 9848

同时确认 nacos-cs Service 已声明 9848 端口,所以直接配置vs的路由即可:

1
2
3
4
5
6
7
8
9
10
11
# nacos-cs 已经声明了9848端口
[root@k8s-master01 helm]# kubectl get svc -n ruoyi
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
external-mysql-svc ClusterIP 10.96.105.207 <none> 3306/TCP 3d4h
external-redis-svc ClusterIP 10.96.28.65 <none> 6379/TCP 2d7h
nacos-cs ClusterIP 10.96.115.191 <none> 8848/TCP,9848/TCP,9849/TCP,7848/TCP 3d1h
nacos-hs ClusterIP None <none> 8848/TCP,9848/TCP,9849/TCP,7848/TCP 3d1h
ruoyi-auth ClusterIP 10.96.52.116 <none> 9200/TCP 2d
ruoyi-gateway ClusterIP 10.96.2.167 <none> 8080/TCP 34h
ruoyi-system ClusterIP 10.96.235.128 <none> 9201/TCP 2d1h
ruoyi-ui ClusterIP 10.96.57.74 <none> 80/TCP 31h

6.验证Nacos服务可用性

接下来做验证,配置中心功能验证(必须)和 服务注册与发现验证(必须):

注意nacos2.x和3.x版本的验证路径是不一样的,我用的是2.x的版本

6.1配置中心功能验证:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
curl -s -X POST "http://nacos.gateway.com:30080/nacos/v1/cs/configs" \
-d "dataId=test.properties" \
-d "group=DEFAULT_GROUP" \
-d "content=hello=nacos-prod-test" \
-d "accessToken=${TOKEN}"

# 期望返回:true

如:
true[root@harbor ~]# curl -s -X POST "http://nacos.gateway.com:30080/nacos/v1/cs/configs" \
> -d "dataId=test.properties" \
> -d "group=DEFAULT_GROUP" \
> -d "content=hello=nacos-prod-test" \
> -d "accessToken=${TOKEN}"
true[root@harbor ~]#

控制台

1
2
3
4
5
6
7
8
9
# 读取配置
curl -s "http://nacos.gateway.com:30080/nacos/v1/cs/configs?dataId=test.properties&group=DEFAULT_GROUP&accessToken=${TOKEN}"

# 期望返回:hello=nacos-prod-test

# 删除配置
curl -s -X DELETE "http://nacos.gateway.com:30080/nacos/v1/cs/configs?dataId=test.properties&group=DEFAULT_GROUP&accessToken=${TOKEN}"

# 期望返回:true

6.2服务注册与发现验证:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 注册实例
curl -s -X POST "http://nacos.gateway.com:30080/nacos/v1/ns/instance" \
-d "serviceName=prod-check-service" \
-d "ip=10.0.0.1" \
-d "port=8080" \
-d "accessToken=${TOKEN}"

# 期望:ok

# 查询实例
curl -s "http://nacos.gateway.com:30080/nacos/v1/ns/instance/list?serviceName=prod-check-service&accessToken=${TOKEN}"

# 期望:JSON 里能看到 10.0.0.1:8080

# 注销实例
curl -s -X DELETE "http://nacos.gateway.com:30080/nacos/v1/ns/instance?serviceName=prod-check-service&ip=10.0.0.1&port=8080&accessToken=${TOKEN}"

# 期望:ok

执行过程:

1
2
3
4
5
6
[root@harbor ~]# curl -s -X POST "http://nacos.gateway.com:30080/nacos/v1/ns/instance" \
> -d "serviceName=prod-check-service" \
> -d "ip=10.0.0.1" \
> -d "port=8080" \
> -d "accessToken=${TOKEN}"
ok[root@harbor ~]#

控制台显示


测试没问题最后把实例注销即可。

证明配置中心功能和服务注册/发现/注销功能都是正常的,可以交付生产使用。

该部署实例中没有为nacos的控制台配置https证书,如果有需要可以参考文章《服务网格Istio流量治理实践》