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