1. 内网环境下的Nacos集群部署挑战在企业级微服务架构中Nacos作为注册中心和配置中心的双重角色越来越重要。但很多企业出于安全考虑会将生产环境部署在内网隔离区域这就带来了特殊的部署挑战。上周我刚帮一家金融客户在华为云CCE上完成了内网Nacos集群部署整个过程踩了不少坑也积累了一些实用经验。内网环境最大的特点是无法直接拉取公有镜像所有依赖都需要自给自足。这就像在孤岛上建房子所有建材都得提前准备好。我们采用的方案是通过私有镜像仓库SWR来托管自定义的Nacos镜像再结合CCE的有状态负载(StatefulSet)实现集群部署。与常见的Helm部署方式不同这种纯页面化操作更适合对Kubernetes命令不熟悉的运维团队。2. 私有镜像准备与上传2.1 镜像本地处理首先需要在内网机器上准备好基础镜像。我推荐使用Nacos官方镜像作为基础这样可以减少兼容性问题。下载完成后建议用docker inspect检查镜像的ENTRYPOINT和ENV配置docker pull nacos/nacos-server:latest docker inspect nacos/nacos-server:latest关键是要确认镜像中是否包含必要的启动脚本。曾经遇到过客户自己打包的镜像缺少启动脚本导致容器不断重启的情况。如果需要对镜像进行定制化修改建议使用多阶段构建FROM nacos/nacos-server:latest AS builder # 添加自定义配置文件 COPY custom.properties /home/nacos/conf/ FROM nacos/nacos-server:latest COPY --frombuilder /home/nacos/conf/custom.properties /home/nacos/conf/2.2 推送到SWR仓库华为云SWR镜像仓库的使用有几个关键点需要注意组织名称建议采用项目代号而非个人名称镜像标签尽量包含版本号和构建日期上传前必须完成docker login认证具体操作时我发现很多人会在镜像重命名环节出错。正确的tag命令格式应该是docker tag nacos/nacos-server:latest \ swr.region.myhuaweicloud.com/组织名称/项目名称/nacos-server:v2.2.3上传完成后一定要在SWR控制台检查镜像的安全扫描结果。有次部署后出现莫名崩溃后来发现是基础镜像存在高危漏洞导致的。3. 有状态负载配置详解3.1 工作负载基础配置在CCE控制台创建有状态负载时这几个参数需要特别注意实例数量初始建议设为1验证通过后再扩容容器规格Nacos对内存要求较高建议4GB起步数据卷一定要挂载持久化卷到/home/nacos/data目录配置容器时最关键的还是环境变量设置。以下是必须配置的核心参数PREFER_HOST_MODEhostname SPRING_DATASOURCE_PLATFORMmysql MYSQL_SERVICE_HOST数据库内网IP MYSQL_SERVICE_DB_NAMEnacos MYSQL_SERVICE_USERnacos MYSQL_SERVICE_PASSWORD加密后的密码3.2 实例间服务发现这是集群部署最关键的环节。在工作负载访问设置中服务名称建议用nacos-hs这样的有意义的名称必须添加8848主端口、7848集群RPC端口、9848gRPC端口就绪探针建议使用TCP检查而非HTTP配置完成后可以先启动单个实例测试连通性。常见问题包括端口映射错误导致无法访问网络策略未放行相应端口安全组规则限制4. 集群化配置实战4.1 节点扩容操作当单节点验证通过后在工作负载页面直接修改实例数量为3。CCE会自动创建新的Pod但此时它们还不会自动组成集群。需要观察Pod的启动顺序确保nacos-cluster-0最先启动成功因为它会作为集群的初始节点。扩容过程中常见的问题有新Pod因资源不足处于Pending状态存储卷声明(PVC)创建失败节点间网络不通4.2 集群成员列表配置这是最容易被忽视的关键步骤。需要通过环境变量NACOS_SERVERS显式指定集群节点列表。格式要求非常严格nacos-cluster-0.nacos-hs.default.svc.cluster.local:8848, nacos-cluster-1.nacos-hs.default.svc.cluster.local:8848, nacos-cluster-2.nacos-hs.default.svc.cluster.local:8848注意点必须使用完整的FQDN格式端口不能省略逗号分隔且不能有空格建议先在单个节点的nacos控制台检查集群配置5. 访问与验证5.1 服务暴露方式根据不同的使用场景通常需要配置两种ServiceClusterIP用于集群内部服务注册发现NodePort用于管理控制台访问在配置NodePort时建议使用30000以上的端口号同时开放8848和9848端口配置负载均衡器时开启健康检查5.2 集群健康检查部署完成后可以通过以下几种方式验证登录控制台查看节点列表检查日志是否有Cluster is healthy输出通过API接口获取集群状态curl -X GET http://节点IP:8848/nacos/v1/core/cluster/health常见异常情况处理节点显示UP但无法同步配置检查7848端口通信新配置无法推送检查gRPC端口9848频繁leader切换调整JVM内存参数6. 运维优化建议在实际运行中我总结了几个提升稳定性的技巧资源限制一定要设置CPU和内存的limits避免节点OOM日志收集建议将/home/nacos/logs挂载到持久卷定期备份对config和naming数据做定时备份监控告警配置Prometheus监控关键指标对于生产环境还需要考虑数据库主从配置Nacos节点跨可用区部署安全加固TLS加密、ACL控制整个部署过程虽然步骤较多但按照这个流程操作基本可以避开90%的常见问题。记得第一次部署时因为漏掉gRPC端口配置折腾了大半天才找到原因。现在回头看这些经验都是宝贵的财富。