RMDC系统设计文档 整体转换为SKILL

This commit is contained in:
zeaslity
2026-01-21 16:15:49 +08:00
parent fc72a7312e
commit 631cce9e1e
163 changed files with 37099 additions and 114 deletions

View File

@@ -0,0 +1,56 @@
# Watchdog API 端点
## Watchdog HTTP API (Port: 8990)
| 路径 | 方法 | 说明 | 认证 |
|------|------|------|------|
| `/api/heartbeat` | POST | Agent心跳接口 | Tier-Two TOTP |
| `/api/heartbeat/hosts` | GET | 获取所有心跳主机 | 内部调用 |
| `/api/node/info` | POST | Node信息上报接口 | Tier-Two TOTP |
| `/api/node/list` | GET | 获取所有Node列表 | 内部调用 |
| `/api/node/metrics/:node_id` | GET | 获取指定Node运行指标 | 内部调用 |
| `/api/authorization/generate` | GET | 生成授权文件 | 内部调用 |
| `/api/authorization/auth` | POST | 接收授权码 | Tier-One TOTP |
| `/api/authorization/hosts` | GET | 获取所有已授权主机 | 内部调用 |
## Node HTTP API (Port: 8081)
| 路径 | 方法 | 说明 | 认证 |
|------|------|------|------|
| `/api/exec` | POST | 执行命令 | Tier-Two TOTP |
| `/api/info` | GET | 获取主机信息 | Tier-Two TOTP |
| `/api/metrics` | GET | 获取运行指标 | Tier-Two TOTP |
| `/api/dltu` | POST | 镜像操作(Download-Load-Tag-Upload) | Tier-Two TOTP |
## 请求/响应结构
### HeartbeatRequest
```go
type HeartbeatRequest struct {
HostInfo HostInfo `json:"host_info"`
EnvInfo EnvInfo `json:"env_info"`
Timestamp int64 `json:"timestamp"`
TOTPCode string `json:"totp_code"`
}
```
### HeartbeatResponse
```go
type HeartbeatResponse struct {
Authorized bool `json:"authorized"`
TOTPCode string `json:"totp_code"`
Timestamp int64 `json:"timestamp"`
SecondTOTPSecret string `json:"second_totp_secret,omitempty"`
}
```
### NodeInfoRequest
```go
type NodeInfoRequest struct {
NodeID string `json:"node_id"`
HostInfo HostInfo `json:"host_info"`
Metrics NodeRuntimeMetrics `json:"metrics"`
Timestamp int64 `json:"timestamp"`
TOTPCode string `json:"totp_code"`
}
```

View File

@@ -0,0 +1,50 @@
# MQTT Topic 定义
## 上行Watchdog → Exchange-Hub
| Topic | 消息类型 | 说明 |
|-------|----------|------|
| `wdd/RDMC/command/up` | register | 项目注册 |
| `wdd/RDMC/command/up` | auth_request | 授权申请 |
| `wdd/RDMC/message/up` | register_complete | 注册完成确认 |
| `wdd/RDMC/message/up` | heartbeat | 心跳数据 |
| `wdd/RDMC/message/up` | monitor | 监控数据上报 |
| `wdd/RDMC/message/up` | exec_result | 指令执行结果 |
| `wdd/RDMC/message/up` | log_result | 日志查询结果 |
| `wdd/RDMC/message/up` | alert | 告警信息 |
## 下行Exchange-Hub → Watchdog
| Topic | 消息类型 | 说明 |
|-------|----------|------|
| `wdd/RDMC/command/down/{project_id}` | auth_response | 授权响应 |
| `wdd/RDMC/command/down/{project_id}` | auth_revoke | 授权撤销 |
| `wdd/RDMC/command/down/{project_id}` | log_query | 日志查询指令 |
| `wdd/RDMC/command/down/{project_id}` | host_exec | 主机执行指令 |
| `wdd/RDMC/command/down/{project_id}` | k8s_exec | K8S执行指令 |
| `wdd/RDMC/command/down/{project_id}` | update | 业务更新指令 |
| `wdd/RDMC/message/down/{project_id}` | register_ack | 注册确认消息 |
## Topic命名规范
- 前缀:`wdd/RDMC/`
- 类型:`command`(指令)或 `message`(消息)
- 方向:`up`(上行)或 `down`(下行)
- 项目ID下行Topic需包含 `{project_id}` 用于路由
## 消息结构
```go
type BaseMessage struct {
MessageID string `json:"message_id"`
Type string `json:"type"` // command | message
ProjectID string `json:"project_id"`
Timestamp int64 `json:"timestamp"`
}
type DataMessage struct {
BaseMessage
DataType string `json:"data_type"` // 具体消息类型
Payload interface{} `json:"payload"`
}
```

View File

@@ -0,0 +1,43 @@
# 安全机制汇总
## 通信安全
| 场景 | 安全机制 | 参数 |
|------|----------|------|
| Center ↔ Watchdog | Tier-One TOTP + AES-GCM | 8位码, 30分钟有效期, SHA256 |
| Watchdog ↔ Agent | Tier-Two TOTP | 6位码, 30秒有效期, SHA1 |
| Watchdog ↔ Node | Tier-Two TOTP复用 | 内网HTTP + TOTP认证 |
| HTTP备用接口 | 复用Tier-Two TOTP密钥 | 需要TOTP认证 |
| 消息传输 | TLS加密 | MQTT over TLS |
| 敏感数据 | AES-256-GCM加密 | 授权码、密钥等 |
## 身份认证
| 机制 | 说明 |
|------|------|
| 主机信息 | 硬件指纹绑定: MachineID+CPU+Memory+Serial |
| 双向TOTP验证 | 请求方发送TOTP响应方返回新TOTP |
| 挑战应答 | 32位随机挑战码确保通信双方身份 |
## 授权保护
| 机制 | 说明 |
|------|------|
| 死手系统 | 心跳失败自毁连续12次失败触发SIGTERM |
| 授权时间校验 | 检测时间篡改timeOffset异常触发降级 |
| 授权撤销 | 支持远程撤销项目授权 |
## 密钥传输原则
- tier_one_secret 和 tier_two_secret 在 project-management 创建项目时生成
- 密钥通过项目配置文件离线部署到 Watchdog
- **禁止通过公网MQTT传输密钥**
## 操作审计
| 操作类型 | 审计要求 |
|----------|----------|
| K8S操作 | 记录command_id, action, 执行结果 |
| 主机命令 | 记录script, args, exit_code |
| 授权变更 | 记录授权/撤销时间、操作人 |
| 数据导出 | 需签名+TOTP校验写审计日志 |

View File

@@ -0,0 +1,45 @@
# Watchdog 状态机
## 连接状态机
```
状态流转offline -> connecting -> verifying -> online -> disconnecting -> offline
```
| 状态 | 触发条件 | 下一状态 |
|------|----------|----------|
| offline | 初始/心跳超时30秒 | connecting |
| connecting | 尝试MQTT连接 | verifying |
| verifying | TOTP双向验证 | online/offline |
| online | 验证成功 | disconnecting |
| disconnecting | 主动断开/网络异常 | offline |
## 授权状态机
```
未初始化 -> 收集主机信息 -> 等待授权 -> 已授权
授权过期/撤销 -> 未授权 -> 等待授权(重新申请)
```
## 状态转换详情
### 未初始化 → 收集主机信息
- 触发Node/Agent首次连接
- 动作AddHostInfo()
### 收集主机信息 → 等待授权
- 触发GenerateAuthorizationFile()
- 动作发布授权申请Command到MQTT
### 等待授权 → 已授权
- 触发:收到有效授权码
- 动作:解密并持久化授权信息
### 已授权 → 授权过期
- 触发:时间篡改检测
- 动作设置initialized=false
### 已授权 → 未授权
- 触发收到auth_revoke指令
- 动作:清除本地授权存储