RMDC系统设计文档 整体转换为SKILL
This commit is contained in:
56
1-AgentSkills/developing-watchdog/reference/api-endpoints.md
Normal file
56
1-AgentSkills/developing-watchdog/reference/api-endpoints.md
Normal 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"`
|
||||
}
|
||||
```
|
||||
50
1-AgentSkills/developing-watchdog/reference/mqtt-topics.md
Normal file
50
1-AgentSkills/developing-watchdog/reference/mqtt-topics.md
Normal 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"`
|
||||
}
|
||||
```
|
||||
@@ -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校验,写审计日志 |
|
||||
45
1-AgentSkills/developing-watchdog/reference/state-machine.md
Normal file
45
1-AgentSkills/developing-watchdog/reference/state-machine.md
Normal 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指令
|
||||
- 动作:清除本地授权存储
|
||||
Reference in New Issue
Block a user