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

相关推荐
CodeCaptain1 小时前
nacos-2.3.2-OEM与nacos3.1.x的差异分析
java·经验分享·nacos·springcloud
像少年啦飞驰点、11 小时前
从零开始学 RabbitMQ:小白也能懂的消息队列实战指南
java·spring boot·微服务·消息队列·rabbitmq·异步编程
深圳行云创新12 小时前
微服务架构引入 AI 后,怎么统一研发和运维的标准规范?
人工智能·微服务·架构
是阿楷啊12 小时前
Java大厂面试场景:音视频场景中的Spring Boot与微服务实战
spring boot·redis·spring cloud·微服务·grafana·prometheus·java面试
天才奇男子20 小时前
HAProxy高级功能全解析
linux·运维·服务器·微服务·云原生
凯子坚持 c1 天前
C++基于微服务脚手架的视频点播系统---客户端(4)
数据库·c++·微服务
老百姓懂点AI1 天前
[微服务] Istio流量治理:智能体来了(西南总部)AI调度官的熔断策略与AI agent指挥官的混沌工程
人工智能·微服务·istio
JZC_xiaozhong1 天前
多系统权限标准不统一?企业如何实现跨平台统一权限管控
java·大数据·微服务·数据集成与应用集成·iam系统·权限治理·统一权限管理
岁岁种桃花儿1 天前
SpringCloud从入门到上天:Nacos做微服务注册中心
java·spring cloud·微服务
天远云服1 天前
天远车辆过户查询API微服务实战:用Go语言构建高性能车况溯源系统
大数据·微服务·架构·golang