Nacos服务器端部署方案

Nacos服务器端部署方案

1. Nacos的基本情况

Nacos 在阿里巴巴起源于 2008 年开发的。2018年,阿里巴巴将该平台对外开源。如今,Nacos 已演变成一个活跃的社区项目是,并已成为 Spring Cloud Alibaba 生态的核心组件,在国内开发者中应用非常广泛,在一项开发者调研中,其服务注册中心的选用率达到了49%。

Nacos的命名就揭示了其核心功能:Naming(服务命名与发现)与 Configuration(配置管理)Service(服务)。其设计目标是作为构建以"服务"为中心的现代应用的基础设施。

近期,我们项目组经历的两个微服务架构合作项目,均指定使用Nacos作为微服务管理工具。

今天,将对Nacos的基本部署进行论述。

2. 两个密钥的支持

在Nacos服务端部署时,我们需要配置一组身份标识密钥和一个独立的JWT令牌密钥。

(1). 身份标识密钥 (Server Identity)

这组密钥由一个key和一个value构成,是Nacos集群内部的"暗号"。当Nacos开启鉴权后,集群内各节点间的通信需要验证对方身份。这组密钥就是验证凭证,所有集群节点必须配置完全相同的keyvalue ,否则会导致节点间无法通信、数据不一致等问题。从安全角度看,它替代了早期版本中过于简单的User-Agent判断机制。

(2). JWT令牌密钥 (Token Secret Key)

这个密钥的作用是对JWT令牌进行签名 。用户在控制台或用客户端SDK登录时,Nacos会使用此密钥生成一个加密的Access Token。后续所有请求都需携带此Token,服务端用同一密钥验证其真伪和是否过期。此密钥也必须在集群所有节点间保持一致,否则会导致Token无效。

总之,身份标识密钥 用于保障Nacos服务器集群内部通信的合法性,而JWT令牌密钥用于保障外部客户端访问的安全性。

如何配置与选择?

  • 对于身份标识密钥 :将 keyvalue 设置为自定义字符串即可,无需编码。
  • 对于JWT令牌密钥:建议使用一个高强度随机字符串(长度≥32),并转换为Base64编码格式进行配置。

我们可以使用如下命令,生成两个Base64随机密钥:

bash 复制代码
# 生成第一个密钥 (用于 NACOS_AUTH_TOKEN)
openssl rand -base64 32
# 会输出类似:puEF4r+TypDdHxTZxwkTlJKnobQk0yI7q9CvEsHcclk=

# 生成第二个密钥 (用于 NACOS_AUTH_IDENTITY_KEY)
openssl rand -base64 32
# 会输出类似:QG2G72UTnKP3D7TZ+SnRkrws+zfXQNrf+AzFDNUxzsY=

请将这两个输出结果分别记录下来,准备在下一步使用。

3. 使用Docker命令启动(完整配置)

使用如下Docker命令来启动。

bash 复制代码
docker run -d \
--name nacos-standalone \
-e MODE=standalone \
-e NACOS_AUTH_TOKEN=puEF4r+TypDdHxTZxwkTlJKnobQk0yI7q9CvEsHcclk= \
-e NACOS_AUTH_IDENTITY_KEY=QG2G72UTnKP3D7TZ+SnRkrws+zfXQNrf+AzFDNUxzsY= \
-e NACOS_AUTH_IDENTITY_VALUE=serverIdentityKey \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
nacos/nacos-server:latest

这个命令的含义如下:

命令部分 含义与作用
docker run -d 在后台 (-d ) 运行一个容器。
--name nacos-standalone 将容器命名为 nacos-standalone,便于后续管理。
-e MODE=standalone 核心配置 :设置Nacos的运行模式为单机模式 (standalone)。集群模式通常为 cluster
-e NACOS_AUTH_TOKEN=... 安全核心 :设置JWT令牌的签名密钥。所有生成和验证登录Token都会用到它,必须保密且应在生产环境中更换。
-e NACOS_AUTH_IDENTITY_KEY=... -e NACOS_AUTH_IDENTITY_VALUE=... 安全核心 :设置服务端身份标识keyvalue。用于集群内部通信时验证请求来源的合法性,以防止非法节点接入。
-p 8848:8848 主要访问端口 :将容器内Nacos的控制台/API默认端口(8848) 映射到宿主机。您将通过 http://宿主机IP:8848/nacos 访问控制台。
-p 9848:9848 -p 9849:9849 客户端gRPC端口 :从Nacos 2.0版本开始,新增了基于gRPC的通信接口。9848用于客户端与服务端通信,9849用于集群节点间通信(单机模式下也必须开放)。
nacos/nacos-server:latest 指定使用的镜像,这里是官方最新的Nacos服务器镜像。

4. 个人遇到的问题

之前,我在配置Nacos时遇到了两个问题。

(1)第一个问题,latest的版本问题。我对Docker的理解还是浅了,以为latest就永远是最新的,结果发现,给我下载下的版本才是v2.0.3版本。经过查证才知道,这个是Docker使用中一个常见的"陷阱"。这并非 latest 标签"错误",而可能是镜像仓库同步延迟导致的。由于Docker的镜像仓库拉取速度很慢,所以我就配置了国内镜像加速,结果国内镜像服务器更新严重滞后,导致我拉取的版本是一个早起版本。latest 只是一个"指针"或"别名",它指向哪个具体版本,完全由镜像仓库决定。

(2)第二个问题,Nacos对于内存与CPU的消耗都非常大。我之前在双核的云服务器上部署,怎么都成功不了。

bash 复制代码
CONTAINER ID   IMAGE                       COMMAND                  CREATED              STATUS                            PORTS     NAMES
4a6414061eec   nacos/nacos-server:v3.1.0   "sh bin/docker-start..."   About a minute ago   Exited (137) About a minute ago             nacos-standalone

Exited (137) 差不多应该是资源(尤其是内存)不足导致的强制终止。Nacos 3.x版本对资源要求更高,这个双核的云服务器没有这么多的内存,导致这个服务布不上去。大家后续部署时,注意不要因为这个问题导致无法运行。

5. 服务界面

Nacos提供了Web管理结果,默认地址为http://ip:8848/nacos,就可以访问了。默认用户名与密码都是nacos。

结语

总而言之,Nacos 以其强大的服务发现与配置管理能力,已成为构建现代微服务架构的重要基石。通过理解其安全模型、掌握清晰的部署步骤并规避常见的"陷阱",我们能够为其稳定运行打下坚实基础。当服务成功启动,登录至简洁的管理界面时,这不仅是部署工作的终点,更是高效微服务运维与治理的起点。希望本文的论述能助您顺利搭建这一核心基础设施,使其在您的架构中可靠地发挥纽带与枢纽的作用。

相关推荐
fanly111 天前
Surging AI Agent 完整产品介绍
微服务·microservice
蝎子莱莱爱打怪8 天前
XZLL-IM干货系列 04|Netty 长连接实战:Pipeline 怎么排、心跳怎么跳、连接怎么管
后端·微服务·面试
SamDeepThinking9 天前
Java微服务练习方式
java·后端·微服务
米丘12 天前
微前端之 Web Components 完全指南
微服务·html
霸道流氓气质15 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
霸道流氓气质15 天前
Spring Boot 微服务性能优化完全指南
spring boot·微服务·性能优化
地瓜伯伯15 天前
从MESI缓存一致性协议讲透synchronized的底层
java·spring boot·spring·spring cloud·微服务·springcloud
Devin~Y15 天前
大厂 Java 面试实录:从音视频内容社区到 AI RAG 的全链路技术设计
java·spring boot·redis·spring cloud·微服务·kafka·音视频
递归尽头是星辰15 天前
AI 访问数据仓库:从直连到微服务化
数据仓库·人工智能·微服务·dataagent·ai数据治理
就改了15 天前
Windows 环境 SkyWalking 完整实操教程
windows·微服务·skywalking