safety-eval-service/docs/GBS底座服务手册v2.md

450 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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
| 属性 | 值 |
|------|-----|
| **部署方式** | DockerMaster节点 |
| **版本** | 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
| 属性 | 值 |
|------|-----|
| **部署方式** | DockerMaster节点 |
| **版本** | 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对象存储
| 属性 | 值 |
|------|-----|
| **部署方式** | DockerMaster节点 |
| **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 Deploymentnamespace: 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`(集群内)
#### 原因3Dubbo 3.x需要gRPC端口9848
- Dubbo版本为 **3.0.7**(从服务日志确认)
- Dubbo 3.x注册到Nacos除了HTTP 8848还需要 **gRPC 9848** 端口
- 外部访问gRPC端口应使用NodePort **31290**但实际gRPC协议不走HTTPTCP可达即可
- 从微服务日志看,**集群内**的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 Deploymentnamespace: 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服务 CrashLoopBackOffFlyway迁移失败
**根因**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 <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'
```