kubernetes1.28部署nacos2.5.0集群,最新版本超详细 无坑

 Nacos(全称为 **"Dynamic Naming and Configuration Service"**)是一个开源的动态服务发现、配置管理和服务管理平台。它由阿里巴巴开源,旨在为云原生应用提供灵活、高效、易用的服务发现、配置管理以及服务治理解决方案。

1Nacos 提供了以下几个核心功能:

1.1 服务发现与健康检查

Nacos 提供了服务发现和健康检查功能,支持服务的动态注册和发现。应用可以通过 Nacos 自动注册到服务目录,其他应用可以通过 Nacos 发现这些服务并进行通信。

  • 服务注册:应用启动时会将自己注册到 Nacos,告知 Nacos 其服务名、实例信息(如 IP、端口、版本等)。
  • 服务发现:其他服务通过 Nacos 查询服务实例的详细信息(如 IP 和端口)。
  • 健康检查:Nacos 监控每个注册的服务实例的健康状态,支持自动检测和剔除不健康的实例。

1.2. 配置管理

Nacos 提供集中式的配置管理功能,可以帮助应用管理其配置项。应用在启动时可以从 Nacos 中获取最新的配置,并在运行时动态刷新配置。

  • 动态配置管理:可以在 Nacos 中维护配置文件,应用启动时动态加载并实时同步配置,无需重启服务。
  • 灰度发布:支持对不同的环境、版本进行不同的配置管理,方便进行灰度发布。
  • 配置版本管理:Nacos 支持配置版本管理,可以记录配置的历史版本,方便进行回滚和恢复。

1.3. 服务治理

Nacos 提供了一些服务治理的功能,包括负载均衡、限流、熔断等,有助于提升系统的稳定性和可靠性。

  • 动态负载均衡:Nacos 支持与负载均衡器配合,能够基于负载自动选择最优的服务实例。
  • 服务路由:Nacos 可以对服务请求进行路由,支持基于不同条件进行路由决策。
  • 服务健康检查与治理:通过健康检查机制,Nacos 能够动态识别不健康的服务实例,防止它们被访问。

1.4. Nacos 集群与高可用

Nacos 支持通过集群模式来保证高可用。多个 Nacos 节点组成一个集群,通过数据同步来实现集群间的高可用性。当一个节点出现故障时,其他节点仍然可以正常工作。

1.5. 支持多种协议

Nacos 支持多种协议,包括 HTTP、DNS 和 gRPC 等,允许用户根据实际需求选择合适的协议。

1.6. 灵活的扩展性

Nacos 提供了插件机制,可以通过编写插件扩展其功能,满足特定业务场景的需求。

2.Nacos 的主要组件

  • Nacos Server:Nacos 的核心服务组件,负责处理服务注册、发现、配置管理、服务治理等。
  • Nacos Console:Nacos 提供的 Web 控制台,允许用户方便地管理和查看服务注册情况、配置项、健康状态等。
  • Nacos Client:客户端 SDK,支持 Java、Go、Node.js 等多种语言,帮助应用与 Nacos 进行交互,完成服务注册、发现和配置管理。

3.Nacos 的使用场景

  1. 微服务架构:在微服务架构中,服务间需要动态发现对方并进行通信。Nacos 提供了高效的服务发现功能,可以帮助不同微服务实例动态连接。
  2. 动态配置管理:当系统需要频繁更改配置而不想重启应用时,Nacos 提供的配置管理功能非常实用。
  3. 多环境管理:对于不同环境(如开发、测试、生产),Nacos 可以在同一平台上管理不同的配置文件,方便管理不同的配置版本。
  4. 容器化和 Kubernetes:Nacos 与容器编排平台如 Kubernetes 配合使用时,可以方便地管理容器中的服务注册和配置管理。

4.Nacos vs. 其他服务治理框架

  • 与 Consul 和 Eureka 对比:Nacos 提供与 Consul 和 Eureka 类似的服务发现功能,但它还具备了动态配置管理的能力,这是 Eureka 和 Consul 本身不提供的。
  • 与 Spring Cloud Config 对比:Spring Cloud Config 是一个配置管理工具,但它是针对 Spring 应用的配置管理。而 Nacos 不仅支持 Spring,还支持多种不同的应用架构,并且能够结合服务发现和治理进行全面的管理。
  • 与 Zookeeper 对比:Zookeeper 可以用作服务协调和配置管理工具,但它不专注于服务发现和动态配置管理,而 Nacos 则在这些方面做了优化,并提供了更易用的 API 和 Web 控制台。

5.部署Nacos集群

环境准备k8s集群,我的实验环境只有三台机器,nacos集群至少需要运行3个,部署的时候切记允许master节点调度pod。

[root@master ~]# kubectl get node
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   89d   v1.28.2
node-1   Ready    <none>          89d   v1.28.2
node-2   Ready    <none>          89d   v1.28.2

Nacos有内置的数据库用于存放配置数据,在生产环境中最好是使用外部数据库用于存放配置数据,可以和后端应用服务共用一个数据库,数据库采用mysql5.7版本,最好是主从架构,本文采用单节点。

5.1.部署mysql

1配置nfs制作持久化存储,所有节点均安装nfs与rpcbind,我使用master作为共享节点

[root@master ~]# yum install -y nfs-utils rpcbind
[root@master ~]# mkdir /mnt/nacos
[root@master ~]# vim /etc/exports
/mnt/application 192.168.209.0/24(rw,no_root_squash)
[root@master ~]# systemctl start rpcbind
[root@master ~]# systemctl start nfs
[root@master ~]# systemctl enable nfs rpcbind

2.先创建mysql数据库

[root@master ~]# mkdir nacos/{mysql,nacos} -p 
[root@master ~]# cd nacos/mysql/
[root@master mysql]# cat create_mysql_ns.yml #创建用于部署nacos的名称空间
apiVersion: v1
kind: Namespace
metadata:
 name: nacos     
[root@master mysql]# kubectl apply -f create_mysql_ns.yml 
namespace/nacos created 
[root@master mysql]# kubectl get ns 
NAME              STATUS   AGE
default           Active   89d
kube-flannel      Active   89d
kube-node-lease   Active   89d
kube-public       Active   89d
kube-system       Active   89d
nacos             Active   7s

[root@master mysql]# cat create_mysql_pv.yml #创建mysql使用的pv
apiVersion: v1
kind: PersistentVolume
metadata: 
  name: nacos-mysql-pv
  labels:
   type: nfs
  namespace: nacos
spec:
  storageClassName: nfs
  nfs:
    server: 192.168.209.131
    path: "/mnt/application"
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
[root@master mysql]# kubectl apply -f create_mysql_pv.yml
persistentvolume/nacos-mysql-pv created
[root@master mysql]# kubectl get pv 
NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM              STORAGECLASS   REASON   AGE
nacos-mysql-pv   10Gi       RWX            Retain           Available                      nfs                     4s

[root@master mysql]# cat create_pvc.yml  #将pv与pvc进行绑定
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  namespace: nacos
spec:
  accessModes:
    - ReadWriteMany
  resources:
   requests:
     storage: 10Gi
  storageClassName: nfs
  
[root@master mysql]# kubectl apply -f create_pvc.yml 
persistentvolumeclaim/mysql-pvc created
[root@master mysql]# kubectl get pvc -n nacos 
NAME        STATUS   VOLUME           CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mysql-pvc   Bound    nacos-mysql-pv   10Gi       RWX            nfs            7s

#创建mysql的密码,使用secret保存
[root@master mysql]# echo -n 'Mysql@1233!' | base64
TXlzcWxAMTIzMyE=
[root@master mysql]# cat mysql_secret.yml
apiVersion: v1
data:
  pass: TXlzcWxAMTIzMyE=
kind: Secret
metadata:
  annotations:
  name: app-mysql
  namespace: nacos
type: Opaque
[root@master mysql]# kubectl apply -f mysql_secret.yml
secret/app-mysql created
[root@master mysql]# kubectl get secret -n nacos
NAME        TYPE     DATA   AGE
app-mysql   Opaque   1      6s

[root@master mysql]# cat mysql-svc.yml  #创建mysql的svc用于暴露服务
apiVersion: v1
kind: Service
metadata: 
  name: mysql-svc
  namespace: nacos
spec:
  type: NodePort
  ports:
    - port: 3306
      nodePort: 30006
      targetPort: 3306
  selector:
    app: app-mysql
[root@master mysql]# kubectl apply -f mysql-svc.yml 
service/mysql-svc created
[root@master mysql]# kubectl get svc -n nacos
NAME        TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
mysql-svc   NodePort   10.101.46.161   <none>        3306:30006/TCP   5s

#通过statefulset管理mysql服务
[root@master mysql]# cat statefulset-mysql.yml 
kind: StatefulSet
apiVersion: apps/v1
metadata:
  name: app-mysql
  labels:
    app: mysql
  namespace: nacos
spec:
  replicas: 1
  serviceName: mysql-svc
  selector:
    matchLabels:
      app: app-mysql
  template:
    metadata:
      labels:
        app: app-mysql
    spec:
      volumes:
        - name: data-time
          hostPath:
            path: /etc/localtime
            type: ''
        - name: data
          persistentVolumeClaim:
           claimName: mysql-pvc
      containers:
        - args:
          - --character-set-server=utf8mb4
          - --collation-server=utf8mb4_unicode_ci
          - --lower_case_table_names=1
          name: mysql
          image: registry.cn-hangzhou.aliyuncs.com/testpm-k8s/mysql:5.7
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 3306
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: app-mysql
                  key: pass
          resources:
            limits:
              cpu: '2'
              memory: 4Gi
            requests:
              cpu: 100m
              memory: 100Mi
          volumeMounts:
            - name: data-time
              mountPath: /etc/localtime
            - name: data
              mountPath: /var/lib/mysql
[root@master mysql]# kubectl apply -f statefulset-mysql.yml 
statefulset.apps/app-mysql created
[root@master mysql]# kubectl get pod -n nacos -o wide 
NAME          READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
app-mysql-0   1/1     Running   0          60s   10.244.1.15   node-2   <none>           <none>

测试:
[root@master mysql]# kubectl exec -it app-mysql-0 -n nacos -- mysql -uroot -p'Mysql@1233!'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.34 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

通过nodeport访问
[root@master mysql]# mysql -uroot -h192.168.209.133 -P30006 -p'Mysql@1233!'
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.34 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>

5.2部署nacos集群

Nacos集群依赖外部数据库(如MySQL)存储配置数据。确保已部署MySQL集群或高可用数据库,并执行以下操作:

  • 创建数据库 nacos_config
  • 执行Nacos提供的初始化SQL脚本(nacos-mysql.sql)。https://github.com/alibaba/nacos/blob/master/distribution/conf/mysql-schema.sql
  • 记录数据库连接信息(地址、用户名、密码)。
[root@master mysql]# cd ../nacos/
[root@master nacos]# mysql -uroot -h192.168.209.133 -P30006 -p'Mysql@1233!'
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.34 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> create database nacos_config; #创建数据库
Query OK, 1 row affected (0.02 sec)
MySQL [(none)]> use nacos_config
Database changed
MySQL [nacos_config]> source /root/mysql-schema.sql; #执行sql脚本
Query OK, 0 rows affected (0.05 sec)

Query OK, 0 rows affected (0.10 sec)

Query OK, 0 rows affected (0.09 sec)

Query OK, 0 rows affected (0.05 sec)

Query OK, 0 rows affected (0.05 sec)

Query OK, 0 rows affected (0.03 sec)

Query OK, 0 rows affected (0.05 sec)

Query OK, 0 rows affected (0.03 sec)

Query OK, 0 rows affected (0.05 sec)

Query OK, 0 rows affected (0.07 sec)

Query OK, 0 rows affected (0.02 sec)

Query OK, 0 rows affected (0.04 sec)

MySQL [nacos_config]> show tables;
+------------------------+
| Tables_in_nacos_config |
+------------------------+
| config_info            |
| config_info_beta       |
| config_info_gray       |
| config_info_tag        |
| config_tags_relation   |
| group_capacity         |
| his_config_info        |
| permissions            |
| roles                  |
| tenant_capacity        |
| tenant_info            |
| users                  |
+------------------------+
12 rows in set (0.00 sec)

MySQL [nacos_config]>
创建nacos的pv
[root@nacos ~]# mkdir /mnt/nacos/{data01,data02,data03}
[root@nacos ~]# cat /etc/exports
/mnt/application 192.168.209.0/24(rw,no_root_squash)
/mnt/nacos/data01 192.168.209.0/24(rw,no_root_squash)
/mnt/nacos/data02 192.168.209.0/24(rw,no_root_squash)
/mnt/nacos/data03 192.168.209.0/24(rw,no_root_squash)
[root@nacos ~]# systemctl restart nfs rpcbind

[root@master nacos]# cat nacos-pv.yml 
apiVersion: v1
kind: PersistentVolume
metadata:
 name: nacos-pv-1
 labels:
   app: pv-1
 namespace: nacos
spec:
 nfs:
  path: /mnt/nacos/data01
  server: 192.168.209.131
 accessModes:
  - ReadWriteMany
 capacity:
  storage: 5Gi
 storageClassName: nfs
 persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolume
metadata:
 name: nacos-pv-2
 labels:
   app: pv-2
 namespace: nacos
spec:
 nfs:
  path: /mnt/nacos/data02
  server: 192.168.209.131
 accessModes:
  - ReadWriteMany
 capacity:
  storage: 5Gi
 storageClassName: nfs
 persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolume
metadata:
 name: nacos-pv-3
 labels:
   app: pv-3
 namespace: nacos
spec:
 nfs:
  path: /mnt/nacos/data03
  server: 192.168.209.131
 accessModes:
  - ReadWriteMany
 capacity:
  storage: 5Gi
 storageClassName: nfs
 persistentVolumeReclaimPolicy: Retain
[root@master nacos]# kubectl apply -f nacos-pv.yml 
persistentvolume/nacos-pv-1 created
persistentvolume/nacos-pv-2 created
persistentvolume/nacos-pv-3 created
[root@master nacos]# kubectl get pv 
NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM              STORAGECLASS   REASON   AGE
nacos-mysql-pv   10Gi       RWX            Retain           Bound       nacos/mysql-pvc    nfs                     74m
nacos-pv-1       5Gi        RWX            Retain           Available                      nfs                     6s
nacos-pv-2       5Gi        RWX            Retain           Available                      nfs                     6s
nacos-pv-3       5Gi        RWX            Retain           Available                      nfs                     6s

5.3创建nacos的service

创建headless server用于集群内部节点通信,由于headless server不会给pod分配ip地址,节点之间相互指定链接地址的时候可以指定headless 为pod分配的DNS的名字,格式为:

$<Pod Name>.$<service name>.$<namespace name>.svc.cluster.local
创建headless server用户集群内部节点通信
[root@master nacos]# cat nacos-headless-svc.yml 
apiVersion: v1
kind: Service
metadata:
  name: nacos-headless 
  namespace: nacos 
  labels: 
    app: nacos 
spec:
  ports: 
  - port: 8848 
  clusterIP: None 
  type: ClusterIP 
  selector: 
    app: nacos
[root@master nacos]# kubectl apply -f nacos-headless-svc.yml 
service/nacos-headless created
[root@master nacos]# kubectl get svc -n nacos
NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
mysql-svc        NodePort    10.101.46.161   <none>        3306:30006/TCP   66m
nacos-headless   ClusterIP   None            <none>        8848/TCP         6s


Nacos服务端暴露的主要端口及其用途包括:

主端口 (默认8848): 这是Nacos客户端、控制台以及OpenAPI所使用的HTTP端口,用于配置管理、服务发现的HTTP请求。

gRPC客户端请求服务端端口 (默认9848): 即主端口+1000偏移量,用于客户端通过gRPC协议向Nacos服务端发起连接和请求。

服务端gRPC请求服务端端口 (默认9849): 即主端口+1001偏移量,用于服务间的同步和其他内部通信。

Jraft请求服务端端口 (默认7848): 即主端口-1000偏移量,用于处理服务端间的Raft一致性算法相关的请求。

如何指定与调整端口
服务端端口指定: 通过配置server.port来设定Nacos服务端的主端口,其他端口会依据上述偏移量自动计算得出。

客户端gRPC端口偏移量调整: 客户端可以通过JVM参数-D nacos.server.grpc.port.offset来自定义gRPC端口相对于主端口的偏移量。例如,若设置偏移量为5000,则客户端gRPC端口会在主端口基础上增加5000。需要注意的是,如果客户端偏移量非默认值,服务端需通过VIP/SLB正确映射端口,以确保客户端能成功访问。
创建nacos对外暴露的端口通过nodeport的方式实现
[root@master nacos]# cat nacos-nodeport.yml 
apiVersion: v1
kind: Service
metadata:
  name: nacos-nodeport
  namespace: nacos
  labels: 
    app: nacos-svc-nodeport 
spec:
  ports: 
   - port: 8848 
     targetPort: 8848 
     nodePort: 30048 
  type: NodePort 
  selector: 
    app: nacos 
[root@master nacos]# kubectl apply -f nacos-nodeport.yml 
service/nacos-nodeport created
[root@master nacos]# kubectl get svc -n nacos
NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
mysql-svc        NodePort    10.101.46.161   <none>        3306:30006/TCP   3h16m
nacos-headless   ClusterIP   None            <none>        8848/TCP         129m
nacos-nodeport   NodePort    10.111.254.34   <none>        8848:30048/TCP   6s

5.4.创建ConfigMap用于保存配置文件

创建Nacos需要的配置文件,将配置文件定义为ConfigMap,也可以使用变量的方式进行映射到pod里面

例子: 我采用的时configmap的方式
在这里插入图片描述
nacos官方配置文件系统参数:https://nacos.io/docs/latest/manual/admin/system-configurations/

[root@master nacos]# cat nacos-cm.yml 
apiVersion: v1
data:
  jvm-xmn: 128m
  jvm-xms: 256m
  jvm-xmx: 256m
  mode: cluster
  mysql-database-num: "1"
  mysql-service-db-name: nacos_config
  mysql-service-db-param: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
  mysql-service-host: app-mysql-0.mysql-svc.nacos.svc.cluster.local
  mysql-service-port: "3306"
  mysql-service-user: root
  nacos-servers: nacos-0.nacos-headless.nacos.svc.cluster.local:8848 nacos-1.nacos-headless.nacos.svc.cluster.local:8848 nacos-2.nacos-headless.nacos.svc.cluster.local:8848
  spring-datasource-platform: mysql
kind: ConfigMap
metadata:
  name: nacos-config
  namespace: nacos
[root@master nacos]# kubectl apply -f nacos-cm.yml 
configmap/nacos-config created
[root@master nacos]# kubectl get cm -n nacos
NAME               DATA   AGE
kube-root-ca.crt   1      4h
nacos-config       12     7s
镜像环境变量

属性配置列表

属性名称描述选项
MODE系统启动方式: 集群/单机,对应nacos.standalonecluster/standalone 默认 cluster
NACOS_SERVERS集群地址,对应nacos.member.listp1空格ip2空格ip3
PREFER_HOST_MODE支持IP还是域名模式,对应nacos.inetutils.prefer-hostname-over-iphostname/ip 默认IP
NACOS_SERVER_PORTNacos 运行端口,对应server.port默认8848
NACOS_SERVER_IP多网卡模式下可以指定IP,对应nacos.server.ip
SPRING_DATASOURCE_PLATFORM单机模式下支持MYSQL数据库,对应spring.sql.init.platformmysql / 空 默认:空
MYSQL_SERVICE_HOST数据库 连接地址
MYSQL_SERVICE_PORT数据库端口默认 : 3306
MYSQL_SERVICE_DB_NAME数据库库名
MYSQL_SERVICE_USER数据库用户名
MYSQL_SERVICE_PASSWORD数据库用户密码
MYSQL_SERVICE_DB_PARAM数据库连接参数默认:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
MYSQL_DATABASE_NUM数据库个数默认:1
JVM_XMS-Xms默认 :1g
JVM_XMX-Xmx默认 :1g
JVM_XMN-Xmn512m
JVM_MS- XX默认 :128m
JVM_MMS-XX默认 :320m
NACOS_DEBUG是否开启远程DEBUGy/n 默认
TOMCAT_ACCESSLOG_ENABLEDserver.tomcat.accesslog.enabled默认
NACOS_AUTH_SYSTEM_TYPE权限系统类型选择,目前只支持nacos类型默认
NACOS_AUTH_ENABLE是否开启权限系统,对应nacos.core.auth.enabled默认
NACOS_AUTH_TOKEN_EXPIRE_SECONDStoken 失效时间默认 :18000
NACOS_AUTH_TOKENtoken注意:该环境变量的默认值在Nacos 2.2.1版本中已移除,开启鉴权时需要指定
NACOS_AUTH_CACHE_ENABLE权限缓存开关 ,开启后权限缓存的更新默认有15秒的延迟默认 : false
MEMBER_LIST通过环境变量的方式设置集群地址例子:192.168.16.101:8847?raft_port=8807,192.168.16.101?raft_port=8808,192.168.16.101:8849?raft_port=8809
EMBEDDED_STORAGE是否开启集群嵌入式存储模式embedded 默认 : none
NACOS_AUTH_CACHE_ENABLEnacos.core.auth.caching.enableddefault : false
NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLEnacos.core.auth.enable.userAgentAuthWhitedefault : false
NACOS_AUTH_IDENTITY_KEYnacos.core.auth.server.identity.key注意:该环境变量的默认值在Nacos 2.2.1版本中已移除,开启鉴权时需要指定
NACOS_AUTH_IDENTITY_VALUEnacos.core.auth.server.identity.value注意:该环境变量的默认值在Nacos 2.2.1版本中已移除,开启鉴权时需要指定
NACOS_SECURITY_IGNORE_URLSnacos.security.ignore.urlsdefault : /,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
DB_POOL_CONNECTION_TIMEOUT数据库连接池超时时间,单位为毫秒默认 : 30000
NACOS_CONSOLE_UI_ENABLEDnacos.console.ui.enableddefault : true
NACOS_CORE_PARAM_CHECK_ENABLED

5.5.创建statefulset资源用于管理nacos服务

[root@master nacos]# cat state-nacos.yml 
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nacos
  namespace: nacos
spec:
  serviceName: nacos-headless #指定headless server的名字
  replicas: 3 #指定pod的个数
  selector:
    matchLabels:
      app: nacos
  template:
    metadata:
      labels:
        app: nacos
    spec:
      tolerations: #容忍master节点的污点,允许pod调度到master节点
       - key: node-role.kubernetes.io/master
         effect: NoSchedule
      volumes:
      - name: logdir
        hostPath:
         path: /var/log/nacos
      containers:
      - name: nacos
        image: nacos/nacos-server:latest
        imagePullPolicy: IfNotPresent
        env:
        - name: JVM_XMS
          valueFrom:
           configMapKeyRef:
            key: jvm-xms
            name: nacos-config
        - name: JVM_XMN
          valueFrom:
           configMapKeyRef:
            key: jvm-xmn
            name: nacos-config
        - name: JVM_XMX
          valueFrom:
           configMapKeyRef:
            key: jvm-xmx
            name: nacos-config
        - name: SPRING_DATASOURCE_PLATFORM
          valueFrom:
           configMapKeyRef:
            key: spring-datasource-platform
            name: nacos-config
        - name: MYSQL_DATABASE_NUM
          valueFrom:
           configMapKeyRef:
            key: mysql-database-num
            name: nacos-config
        - name: MODE
          valueFrom:
           configMapKeyRef:
            key: mode
            name: nacos-config
        - name: PREFER_HOST_MODE
          value: hostname  #使用主机名标识节点
        - name: NACOS_SERVERS
          valueFrom:
           configMapKeyRef:
            key: nacos-servers
            name: nacos-config 
        - name: MYSQL_SERVICE_HOST
          valueFrom:
           configMapKeyRef:
            key: mysql-service-host
            name: nacos-config
        - name: MYSQL_SERVICE_PORT
          valueFrom:
           configMapKeyRef:
            key: mysql-service-port
            name: nacos-config
        - name: MYSQL_SERVICE_DB_NAME
          valueFrom:
           configMapKeyRef:
            key: mysql-service-db-name
            name: nacos-config
        - name: MYSQL_SERVICE_USER
          valueFrom:
           configMapKeyRef:
            key: mysql-service-user
            name: nacos-config
        - name: MYSQL_SERVICE_DB_PARAM
          valueFrom:
           configMapKeyRef:
            key: mysql-service-db-param
            name: nacos-config
        - name: MYSQL_SERVICE_PASSWORD
          valueFrom:
            secretKeyRef:
              name: app-mysql
              key: pass
        - name: NACOS_AUTH_ENABLE   #以下参数是配置开启鉴权,否则没有登陆页面提示输入用户密码
          value: "true"
        - name: NACOS_AUTH_TOKEN
          value: "SecretKeyM1Z2WDc4dnVyZkQ3NmZMZjZ3RHRwZnJjNFROdkJOemEK"
        - name: NACOS_AUTH_IDENTITY_KEY
          value: "mpYGXyu7"
        ports:
        - containerPort: 8848
          name: server
        - containerPort: 7848
          name: raft
        volumeMounts:
        - name: nacos-data
          mountPath: /home/nacos/data
        - name: logdir
          mountPath: /home/nacos/logs 
  volumeClaimTemplates: #定义持久化存储模板,自动于创建好的pv绑定
  - metadata:
      name: nacos-data
    spec:
      accessModes: [ "ReadWriteMany" ]
      storageClassName: "nfs"
      resources:
        requests:
          storage: 5Gi
          
[root@master nacos]# kubectl apply -f state-nacos.yml
statefulset.apps/nacos created
[root@master nacos]# kubectl get pod -n nacos -o wide 
NAME          READY   STATUS    RESTARTS   AGE     IP            NODE     NOMINATED NODE   READINESS GATES
app-mysql-0   1/1     Running   0          4h41m   10.244.1.16   node-2   <none>           <none>
nacos-0       1/1     Running   0          20s     10.244.1.21   node-2   <none>           <none>
nacos-1       1/1     Running   0          16s     10.244.2.26   node-1   <none>           <none>
nacos-2       1/1     Running   0          10s     10.244.1.22   node-2   <none>           <none>
配置开启鉴权

https://nacos.io/docs/latest/guide/user/auth/

在这里插入图片描述

除此之外,还可以添加其他鉴权相关的环境变量信息:

namedescriptionoption
NACOS_AUTH_ENABLE是否开启权限系统默认
NACOS_AUTH_TOKEN_EXPIRE_SECONDStoken 失效时间默认:18000
NACOS_AUTH_TOKENtoken默认
NACOS_AUTH_CACHE_ENABLE权限缓存开关 ,开启后权限缓存的更新默认有15秒的延迟默认 : false

5.6访问测试:

默认用户名是nacos,密码需要初始化

在这里插入图片描述

在这里插入图片描述

使用刚刚初始的密码登陆

在这里插入图片描述
在这里插入图片描述
API接口测试
使用用户名和密码登陆nacos集群,若用户名和密码正确会返回Token信息

[root@master ~]# curl -X POST 'http://192.168.209.133:30048/nacos/v1/auth/login' -d 'username=nacos&password=nacos'
{"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTc0MDE3NTA0MX0.QRZy47JtBY_Z0LoSh5gRikfLPaFEnjzynrHPiSk1upc","tokenTtl":18000,"globalAdmin":true,"username":"nacos"}

Nacos 是一个轻量级的服务发现和配置管理平台,非常适用于微服务架构,能够帮助开发者更加高效地管理服务的注册、发现、配置和健康检查等。它支持集群、高可用,并提供丰富的管理功能和易用的 Web 控制台,非常适合云原生环境和 Kubernetes 等容器化平台。

如果你在搭建微服务、分布式系统时,需要集中管理服务、配置,或希望轻松实现服务发现和治理,Nacos 会是一个非常不错的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值