# 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`。 ```bash # 连接命令 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 | ```bash # 连接命令 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)。 ```bash # 内网访问(在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:30290` **HTTP超时** ❌ - 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状态的服务有注册记录) **解决方案**: ```bash # 方案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被防火墙拦截** | ```bash # 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节点执行): ```bash # 当前使用的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节点一次性执行): ```bash # 开放所有需要外部访问的端口 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执行): ```sql 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服务**: ```bash kubectl rollout restart deployment jjb-saas-auth-deploy -n jjb-dragon ``` ### 6.3 Nacos配置中心 Redis密码配置 检查Nacos `jjb-dragon` 命名空间的 `config-redis.yml`,确保: ```yaml 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中) ```yaml 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 ``` ### 外部开发环境(开放防火墙后) ```yaml spring: cloud: nacos: discovery: server-addr: 192.168.20.100:30290 # 使用NodePort config: server-addr: 192.168.20.100:30290 ``` --- ## 十、常用运维命令 ```bash # 查看所有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 -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' ```