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

450 lines
16 KiB
Markdown
Raw Normal View History

# 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'
```