阶段十二:102 节点纳管一次性最终验收
状态:已完成并归档
计划 ID:phase-12-pcdell-102-final-acceptance
📌 结论摘要
P12 已完成并归档,102 节点纳管正式关闭。 P12 已完成唯一工作包 P12-0,102 节点纳管的 8 项验收全部通过,并已按用户授权关闭“102 节点纳管”。最终受控重启后,102 的身份、双网地址、SSH、Tailscale、Docker、Nomad Client、官方 node_exporter、RR 遥测、RR/101/Home 三管理入口、UFW 来源边界和系统卫生均具备现场回读证据。依据是 P12 详情、docs/plans/state.json 和本页记录;影响是 P13 可以直接复用已经验收的节点能力,但 OmniRoute 安装、数据恢复和生产切换仍需独立授权。
🗂️ 目录
🧾 验收结果
| 编号 | 验收项 | 结果 | 关键证据 |
|---|---|---|---|
| 1 | 主机名、有线地址、WiFi 地址、Tailnet 地址和别名一致 | ✅ 通过 | 最终启动回读 pcdell-102、192.168.50.102、192.168.50.202、100.64.0.4;与 docs/node-aliases.md 和 360T7 预留一致 |
| 2 | SSH 10222、公钥登录、root 自动化身份和 hhtbing 本地应急身份一致 |
✅ 通过 | sshd -T 返回 port 10222、公钥启用、密码关闭;root 自动化登录和 hhtbing 本地登录均成功,hhtbing 具备 sudo |
| 3 | Tailscale、Docker、Nomad Client、node_exporter 均为 enabled、active、healthy |
✅ 通过 | 四项服务均 active;Nomad 在 RR 端为 ready/eligible,Docker/exec 驱动为 Healthy;官方容器运行且重启策略为 always |
| 4 | RR 能正常采集 102 的 9100/metrics |
✅ 通过 | RR 读取 HTTP 200、87,619 bytes,并返回 node_uname_info{nodename="pcdell-102"} |
| 5 | RR、101、Home 三个管理入口均能管理 102 | ✅ 通过 | 三个入口使用登记身份直连 100.64.0.4:10222,均回读同一 boot_id、主机名、root 用户和 Tailnet 地址 |
| 6 | 无 failed unit、无重复 exporter、无错误 UFW 来源规则 | ✅ 通过 | systemctl --failed 为空;exporter 容器、进程、9100 监听各 1 个;raw 前置守卫阻止非 RR 来源 |
| 7 | 窗口允许时完成一次重启持久性复核 | ✅ 通过 | 最终 boot_id=bd3d4e88-5118-4805-b1d6-f8766c8a4a6b;重启后身份、SSH、四项服务、遥测、三入口和 UFW 均恢复 |
| 8 | 不要求把 OmniRoute 迁移进 102,迁移仍是独立事项 | ✅ 通过 | 102 未安装 omniroute,服务不存在;本轮未恢复 RR 数据、未切换 MM 回源、未迁移生产 |
🔧 根因修复
最终重启没有只做表面复测,而是暴露并修正了两个会影响验收口径的启动问题。
| 问题 | 根因 | 修复结果 |
|---|---|---|
openipmi.service 启动后为 failed |
Dell OptiPlex 7050 的 SMBIOS 没有 IPMI Management Controller,openipmi 包仍将该无硬件消费者的 SysV 服务设为开机启动 |
记录原状态后执行 disable、mask 和 reset-failed;最终启动为 inactive/dead/masked,failed unit 为空,回退命令为 systemctl unmask openipmi.service && systemctl enable openipmi.service |
101 可绕过 UFW 读取 102 的 9100 |
旧 v0.2.2 守卫只插入 filter INPUT,Tailscale 随后把 ts-input 放回链首并接受其他 Tailnet 来源 |
仓库脚本升级为 v0.2.3,守卫前置到 raw PREROUTING;102 安装文件 SHA-256 为 13c702a781f7e424350c1ddb02bf11b14101458fecdf24bac40debcf13366f5c,101 负向访问超时、RR 正向访问 HTTP 200 |
上述修复保留了原 UFW 允许规则和 filter 层规则,新增 raw 层守卫的原因不是替换原有边界,而是保证限制在 Tailscale 链接管前执行。v0.2.3 已写回仓库部署脚本,后续 Linux 节点部署会使用同一修复;本次没有据此修改 d02 或其他节点的运行状态。
🧪 服务与观测基线
| 对象 | 最终状态 | 证据 |
|---|---|---|
| Tailscale | 1.102.4,enabled/active,BackendState=Running,Health=[] |
tailscale status --json;RouteAll=false、ExitNodeID=""、CorpDNS=false |
| Docker | enabled/active,NRestarts=0 |
systemd 回读;唯一容器为 agentmeshos-node-metrics |
| Nomad Client | enabled/active,HTTP/RPC/Serf 监听 100.64.0.4:39046-39048 |
RR 端 Nomad ACL 上下文回读 ready/eligible,Docker/exec 驱动 Healthy |
node_exporter |
v1.9.1,running,restart=always |
进程和 100.64.0.4:9100 监听各 1 个;RR 正向采集成功 |
| 来源守卫 | v0.2.3,enabled/active |
raw PREROUTING 规则为仅 RR 接受、其他 Tailnet 来源丢弃 |
| 系统卫生 | failed unit 为空 | 最终启动 systemctl --failed --no-legend --plain 无输出 |
🔁 回退与重开
102 节点纳管本身不部署业务数据,回退范围是节点验收状态和本轮两项启动修复。openipmi 可按归档命令恢复;来源守卫可将 v0.2.3 替换为备份文件后重启服务,但恢复旧守卫会重新引入来源旁路风险。任何回退都必须先保留故障证据,再验证 RR 正向采集、101 负向阻断、failed unit 和三管理入口。
P12 关闭后不再拆出 P12-1、P12-2 等零散任务。若后续发生地址、SSH、Tailscale、Docker、Nomad、遥测、管理入口或防火墙漂移,应作为新的运维事件处理,不能重新打开已经关闭的 P12 工作包。
⚠️ 残余风险与未决项
| 事项 | 当前事实 | 下一步 |
|---|---|---|
| P13 执行授权 | P13 已进入等待实施,但没有安装、恢复或切换授权 | 用户明确授权后再进入 P13-0;不得从 P12 归档自动派生迁移动作 |
101 known_hosts |
存在旧 100.64.0.4 普通主机记录,当前 10222 Tailnet 管理正常且指纹一致 |
如需清理,单独授权并先备份 |
| exporter 启动重试 | Tailnet 地址尚未就绪时容器会短暂重启,最终由 restart=always 恢复 |
当前不影响 9100 健康、RR 采集和重启验收;后续如调整启动依赖需单独验证 |
| d02 同类守卫 | 仓库脚本已修复,但本次 P12 未修改 d02 运行状态 | 未来 d02 维护窗口按 v0.2.3 重新部署并做正负向回归 |
截至 2026-10-01,P12 没有阻塞关闭的未决项。
🧾 后续状态更正(2026-10-01,不改变 P12 归档事实)
后续授权已进入并完成 P13。102 已一次性安装 Node 22.23.0 与 OmniRoute 3.8.51,并完成隔离数据恢复、最终快照恢复、生产切换、全链路验收、真实回退和再次切换;MM 公网入口已直连 102,RR omni 数据、包、service、回退备份和网关 vhost 已删除。P13 已完成并归档,完整记录见 P13 完成归档。本节只更新 P13 状态,不改写 P12 验收时“102 尚未安装 OmniRoute”的历史事实,也不从 P12 自动派生新的迁移动作。