16 KiB
GBS 底座服务完整手册 v2.0
更新时间:2026-06-22
验证状态:已通过实际连通性测试和账号密码验证
集群运行时长:6天+
一、服务器信息
| 角色 | 主机名 | IP | OS | SSH账号 | SSH密码 | 验证状态 |
|---|---|---|---|---|---|---|
| Master | k8s-master | 192.168.20.100 | CentOS 7 | root | Zcloud@zcloud100 |
✅ |
| Worker01 | k8s-work01 | 192.168.20.110 | CentOS 7 | root | Zcloud@zcloud110 |
✅ |
| Worker02 | k8s-work02 | 192.168.20.120 | CentOS 7 | root | Zcloud@zcloud120 |
✅ |
K8s版本:v1.27.6 | 容器运行时:Docker 26.1.4 + cri-dockerd
网络插件:Calico v3.26.1 | Pod网段:10.244.0.0/16 | Service网段:10.96.0.0/12
二、中间件服务(Docker直接部署在Master节点)
2.1 MySQL
| 属性 | 值 |
|---|---|
| 部署方式 | Docker(Master节点) |
| 版本 | mysql:8.0.35 |
| 外部访问地址 | 192.168.20.100:33080 |
| 账号 | root |
| 密码 | Mysql@zcloud33080 |
| 验证状态 | ✅ 连通,共35个库(28个jjb业务库) |
⚠️ 注意:Docker环境变量中
MYSQL_ROOT_PASSWORD=Zcloud@zcloud2026是容器初始密码,已被修改。请务必使用Mysql@zcloud33080。
# 连接命令
mysql -h 192.168.20.100 -P 33080 -uroot -p'Mysql@zcloud33080'
# 查看所有JJB业务库
mysql -h 192.168.20.100 -P 33080 -uroot -p'Mysql@zcloud33080' -e "SHOW DATABASES LIKE 'jjb%';"
业务数据库列表(28个):
| 数据库名 | 用途 | 表数量 |
|---|---|---|
jjb-saas-auth |
认证服务 | 37 |
jjb-saas-system |
系统服务 | 111 |
jjb-saas-data-center |
数据中心 | 87 |
jjb-saas-bpm |
流程引擎 | 82 |
jjb-saas-facade |
门面服务 | 40 |
jjb-saas-user |
用户服务 | 20 |
jjb-saas-message |
消息服务 | 33 |
jjb-saas-attachment |
附件服务 | 13 |
jjb-saas-gateway |
网关 | 13 |
jjb-saas-security |
安全服务 | 21 |
jjb-saas-login |
登录服务 | 0(线上也为空) |
jjb-saas-risk |
风控服务 | 0(需重新导入) |
nacos_config |
Nacos配置存储 | 12 |
| 其余业务库 | ... | 待确认 |
2.2 Redis
| 属性 | 值 |
|---|---|
| 部署方式 | Docker(Master节点) |
| 版本 | redis:7.2-alpine(实际7.2.14) |
| 外部访问地址 | 192.168.20.100:6379 |
| 密码 | Zcloud@zcloud2026 |
| 模式 | 单机 standalone |
| 验证状态 | ✅ 连通,PING=PONG |
# 连接命令
redis-cli -h 192.168.20.100 -p 6379 -a 'Zcloud@zcloud2026'
# Spring Boot配置
spring:
redis:
host: 192.168.20.100
port: 6379
password: Zcloud@zcloud2026
2.3 MinIO(对象存储)
| 属性 | 值 |
|---|---|
| 部署方式 | Docker(Master节点) |
| API地址 | http://192.168.20.100:9000 |
| Web控制台 | http://192.168.20.100:9001 |
| 账号 | admin |
| 密码 | Zcloud@zcloud2026 |
| 验证状态 | ✅ 服务Running,内网HTTP 200,外网需防火墙开放 |
⚠️ 外网访问说明:MinIO端口9000/9001在iptables中有DNAT规则,但firewalld可能未开放这些端口导致外部TCP连接超时。服务本身正常运行(内网curl返回HTTP 200)。
# 内网访问(在Master节点上)
curl http://127.0.0.1:9001 # 返回 MinIO Console HTML
# 如需从外网访问,在Master节点执行:
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=9001/tcp
firewall-cmd --reload
三、K8s集群服务
3.1 Nacos(注册中心 & 配置中心)
| 属性 | 值 |
|---|---|
| 部署方式 | K8s Deployment(namespace: jjb-dragon) |
| 版本 | nacos-server:2.0.3 |
| Web控制台(NodePort) | http://192.168.20.100:30290/nacos |
| 账号 | nacos |
| 密码 | nacos |
| ClusterIP | 10.110.103.126 |
| 验证状态 | ✅ 内网正常,外网HTTP超时(防火墙未开放30290) |
端口映射:
| 服务端口 | NodePort | 用途 |
|---|---|---|
| 8848 | 30290 | HTTP控制台 & API |
| 9848 | 31290 | gRPC客户端(Dubbo 3.x使用) |
| 9849 | 31291 | gRPC Raft |
| 7848 | 30740 | Jraft |
命名空间:
| 命名空间ID | 显示名称 | 用途 |
|---|---|---|
| (空) | public | 公共 |
jjb-dragon |
jjb-dragon | 配置中心(51项配置) |
jjb-dragon-facade |
jjb-dragon-facade | Dubbo注册中心(537项) |
已注册Dubbo服务:gateway、login、user、system(共41个provider接口)
⚠️ Nacos 8848 外部连接失败根因分析
问题现象:从外部(本机或客户端)配置 nacos.server-addr=192.168.20.100:8848 连接失败。
根因(三层):
原因1:防火墙未开放30290/8848端口
- 内部验证:在Master节点上
curl http://127.0.0.1:30290/nacos/返回 HTTP 200 ✅ - 外部验证:从本机Python脚本访问
192.168.20.100:30290HTTP超时 ❌ - firewalld处于 active(运行中) 状态,但未开放30290端口
- 端口TCP层可达(SYN握手成功),但HTTP层被防火墙拦截
原因2:端口号配置错误(8848 vs 30290)
- 8848 是Pod内部端口(ClusterIP端口),集群外不可直连
- 30290 是NodePort,才是集群外部访问的端口
- 如果在Spring Boot里写
server-addr=192.168.20.100:8848,是错误的! - 正确配置:
server-addr=192.168.20.100:30290(外网)或prod-nacos:8848(集群内)
原因3:Dubbo 3.x需要gRPC端口9848
- Dubbo版本为 3.0.7(从服务日志确认)
- Dubbo 3.x注册到Nacos除了HTTP 8848,还需要 gRPC 9848 端口
- 外部访问gRPC端口应使用NodePort 31290,但实际gRPC协议不走HTTP,TCP可达即可
- 从微服务日志看,集群内的Dubbo服务注册完全正常(只有Running状态的服务有注册记录)
解决方案:
# 方案1:开放防火墙端口(推荐用于开发调试)
# 在Master节点执行:
firewall-cmd --permanent --add-port=30290/tcp # Nacos HTTP
firewall-cmd --permanent --add-port=31290/tcp # Nacos gRPC
firewall-cmd --permanent --add-port=9000/tcp # MinIO API
firewall-cmd --permanent --add-port=9001/tcp # MinIO Console
firewall-cmd --permanent --add-port=30300/tcp # RocketMQ Console
firewall-cmd --permanent --add-port=30180/tcp # K8s Dashboard
firewall-cmd --reload
# 方案2:临时关闭防火墙(仅测试环境)
systemctl stop firewalld
# 外网连接Nacos时,使用NodePort而非内部端口
# Spring Boot外部开发环境配置:
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.20.100:30290 # 外部用NodePort
config:
server-addr: 192.168.20.100:30290
3.2 RocketMQ(消息队列)
| 属性 | 值 |
|---|---|
| 部署方式 | K8s Deployment(namespace: jjb-dragon) |
| 版本 | rocketmq:4.4.0 |
| Web控制台 | http://192.168.20.100:30300 |
| 集群内NameServer | rocketmq:9876 |
| 集群名 | JjbMqCluster |
| 认证 | 无(未开启ACL) |
| 验证状态 | ✅ 内网HTTP 200,外网30300被防火墙拦截 |
# Spring Boot配置(集群内)
rocketmq:
name-server: rocketmq:9876
producer:
group: jjb-producer-group
3.3 Kubernetes Dashboard
| 属性 | 值 |
|---|---|
| 版本 | v2.7.0 |
| 访问地址 | https://192.168.20.100:30180 |
| 认证方式 | Bearer Token |
| ServiceAccount | admin-user(namespace: kubernetes-dashboard) |
| Token有效期 | 10年(2036年到期) |
| 验证状态 | ✅ Token有效,外网需开放30180防火墙 |
当前有效Token(2026-06-22生成,有效期至2036年):
eyJhbGciOiJSUzI1NiIsImtpZCI6IllOa21sRlpTMXdNVzFEaXdEY3I4b3NFSEdiUk1FeWg3QXZXaXRDeHJHbmcifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoyMDk3NDc1NTY4LCJpYXQiOjE3ODIxMTU1NjgsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiYWVmMTRkMGEtNTQ0Ni00MWUzLTk2NDQtNDRjZjViYTFiYTVlIn19LCJuYmYiOjE3ODIxMTU1NjgsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.hEsB5mahzDq5b52P-gKeq2kVlN7GAwJj-C4utO7UdbrUn_jqi5caGLeQugmCGdgnsksMzTCjctLXOQwcE76lnb5xvn1EZJExWFngBYGHeq8jg5chA8N-LCNOL4Zre9gQRtX8Fqb67gSDBk3hPMXir_KmoYlOijvegBIGKT5a_R3A8YsW9Zm3WxtVZ9xgPu7gUwCNfvdc57voRF0zDEpXbQSneGnxD2rNX06tGz6JuOkQQiM4Mlu3omBoi4B9vnYuUUalpvbXMq4v-x0Wkm45Hzrtf3SmgISsYSzd5-BUB88IavShWWgi8Id8QGcXWVETXkD-W7H8O5Hj0MK0gml7Ww
使用方式:浏览器打开
https://192.168.20.100:30180,选择 Token 登录,粘贴上述Token。
重新生成Token(在Master节点执行):
# 当前使用的ServiceAccount: admin-user (kubernetes-dashboard namespace)
kubectl -n kubernetes-dashboard create token admin-user --duration=87600h
四、镜像仓库凭证
| Secret名 | 仓库地址 | 用户名 | 密码 | 用途 |
|---|---|---|---|---|
image-pull-secret |
jjb-registry-registry.cn-hangzhou.cr.aliyuncs.com |
10952138@qq.com |
idurCT!rIq9EzISD |
底座镜像 |
image-pull-secret1 |
registry.cn-zhangjiakou.aliyuncs.com |
kilaa |
Kilaa@6666 |
应用镜像 |
五、业务微服务状态(当前 2026-06-22)
所有服务部署在 jjb-dragon namespace,入口:http://192.168.20.100:30140
| 服务名 | Deployment | 状态 | 运行节点 | 备注 |
|---|---|---|---|---|
| 网关 | jjb-saas-gateway-deploy | ✅ Running | k8s-work01 | NodePort 30140 |
| 登录 | jjb-saas-login-deploy | ✅ Running | k8s-work02 | Dubbo Provider |
| 安全 | jjb-saas-security-deploy | ✅ Running | k8s-work02 | Dubbo Provider |
| 系统 | jjb-saas-system-deploy | ✅ Running | k8s-work02 | Dubbo Provider |
| 用户 | jjb-saas-user-deploy | ✅ Running | k8s-work02 | Dubbo Consumer |
| 认证 | jjb-saas-auth-deploy | ❌ CrashLoopBackOff | k8s-work02 | Flyway版本问题 |
auth服务修复方案见第六章。
六、已知问题 & 修复方案
6.1 外网无法访问Web控制台(防火墙拦截)
根因:firewalld运行中,只开放了22/6379/33080端口,NodePort等未开放。
表现:端口TCP可达(三次握手成功)但HTTP请求超时。
修复(在Master节点一次性执行):
# 开放所有需要外部访问的端口
firewall-cmd --permanent --add-port=30290/tcp # Nacos
firewall-cmd --permanent --add-port=31290/tcp # Nacos gRPC
firewall-cmd --permanent --add-port=9000/tcp # MinIO API
firewall-cmd --permanent --add-port=9001/tcp # MinIO Console
firewall-cmd --permanent --add-port=30300/tcp # RocketMQ Console
firewall-cmd --permanent --add-port=30180/tcp # K8s Dashboard
firewall-cmd --permanent --add-port=30140/tcp # GBS业务网关
firewall-cmd --reload
# 验证
firewall-cmd --list-ports
6.2 auth服务 CrashLoopBackOff(Flyway迁移失败)
根因:Flyway校验版本2.0.7.2失败,需手动创建基线记录。
修复SQL(在MySQL执行):
USE `jjb-saas-auth`;
CREATE TABLE IF NOT EXISTS flyway_schema_history (
installed_rank INT NOT NULL,
version VARCHAR(50),
description VARCHAR(200) NOT NULL,
type VARCHAR(20) NOT NULL,
script VARCHAR(1000) NOT NULL,
checksum INT,
installed_by VARCHAR(100) NOT NULL,
installed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
execution_time INT NOT NULL,
success BOOLEAN NOT NULL,
PRIMARY KEY (installed_rank)
);
INSERT IGNORE INTO flyway_schema_history
(installed_rank, version, description, type, script, checksum, installed_by, execution_time, success)
VALUES (1, '2.0.7.2', 'baseline', 'SQL', 'V2.0.7.2__baseline.sql', 0, 'admin', 0, TRUE);
然后重启auth服务:
kubectl rollout restart deployment jjb-saas-auth-deploy -n jjb-dragon
6.3 Nacos配置中心 Redis密码配置
检查Nacos jjb-dragon 命名空间的 config-redis.yml,确保:
spring:
redis:
password: Zcloud@zcloud2026 # 确保与实际Redis密码一致
6.4 xxl-job数据库未导入
xxl_job SQL文件约1GB,暂未导入。security服务日志有xxl-job连接失败错误(非致命)。
七、账号密码速查表
| 服务 | 访问地址 | 账号 | 密码 | 验证状态 |
|---|---|---|---|---|
| SSH Master | 192.168.20.100:22 | root | Zcloud@zcloud100 |
✅ |
| SSH Worker01 | 192.168.20.110:22 | root | Zcloud@zcloud110 |
✅ |
| SSH Worker02 | 192.168.20.120:22 | root | Zcloud@zcloud120 |
✅ |
| MySQL | 192.168.20.100:33080 | root | Mysql@zcloud33080 |
✅ |
| Redis | 192.168.20.100:6379 | (无用户名) | Zcloud@zcloud2026 |
✅ |
| MinIO API | 192.168.20.100:9000 | admin | Zcloud@zcloud2026 |
⚠️ 需开防火墙 |
| MinIO Console | http://192.168.20.100:9001 | admin | Zcloud@zcloud2026 |
⚠️ 需开防火墙 |
| Nacos | http://192.168.20.100:30290/nacos | nacos | nacos |
⚠️ 需开防火墙 |
| RocketMQ Console | http://192.168.20.100:30300 | (无需登录) | - | ⚠️ 需开防火墙 |
| K8s Dashboard | https://192.168.20.100:30180 | (Token登录) | 见3.3节 | ⚠️ 需开防火墙 |
| GBS业务网关 | http://192.168.20.100:30140 | - | - | ⚠️ 需开防火墙 |
| 镜像仓库(底座) | jjb-registry-registry.cn-hangzhou.cr.aliyuncs.com | 10952138@qq.com | idurCT!rIq9EzISD |
- |
| 镜像仓库(应用) | registry.cn-zhangjiakou.aliyuncs.com | kilaa | Kilaa@6666 |
- |
八、端口速查表
| 端口 | 服务 | 外部可达 | 说明 |
|---|---|---|---|
| 22 | SSH | ✅ | 所有节点 |
| 6379 | Redis | ✅ | 直接暴露 |
| 33080 | MySQL | ✅ | 直接暴露 |
| 9000 | MinIO API | ⚠️ | 需开防火墙 |
| 9001 | MinIO Console | ⚠️ | 需开防火墙 |
| 30140 | GBS业务网关 | ⚠️ | 需开防火墙 |
| 30180 | K8s Dashboard (HTTPS) | ⚠️ | 需开防火墙 |
| 30290 | Nacos HTTP | ⚠️ | 需开防火墙 |
| 31290 | Nacos gRPC | ⚠️ | 需开防火墙 |
| 30300 | RocketMQ Console | ⚠️ | 需开防火墙 |
| 30658 | RocketMQ NameServer | ⚠️ | 需开防火墙 |
九、微服务Nacos接入配置
集群内部(Pod中)
spring:
cloud:
nacos:
discovery:
server-addr: prod-nacos:8848
namespace: jjb-dragon
config:
server-addr: prod-nacos:8848
namespace: jjb-dragon
file-extension: yml
datasource:
url: jdbc:mysql://192.168.20.100:33080/jjb-saas-xxx?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: Mysql@zcloud33080
redis:
host: 192.168.20.100
port: 6379
password: Zcloud@zcloud2026
外部开发环境(开放防火墙后)
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.20.100:30290 # 使用NodePort
config:
server-addr: 192.168.20.100:30290
十、常用运维命令
# 查看所有Pod状态
kubectl get pods -n jjb-dragon -o wide
# 查看各服务日志
kubectl logs -n jjb-dragon deploy/jjb-saas-gateway-deploy --tail=100 -f
kubectl logs -n jjb-dragon deploy/jjb-saas-login-deploy --tail=100 -f
kubectl logs -n jjb-dragon deploy/jjb-saas-auth-deploy --tail=100 -f
kubectl logs -n jjb-dragon deploy/jjb-saas-user-deploy --tail=100 -f
kubectl logs -n jjb-dragon deploy/jjb-saas-system-deploy --tail=100 -f
kubectl logs -n jjb-dragon deploy/jjb-saas-security-deploy --tail=100 -f
# 重启服务
kubectl rollout restart deployment <name> -n jjb-dragon
# 查看Docker中间件
docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'
# MySQL快速连接
mysql -h 192.168.20.100 -P 33080 -uroot -p'Mysql@zcloud33080'
# Redis快速连接
redis-cli -h 192.168.20.100 -p 6379 -a 'Zcloud@zcloud2026'