1185 字
6 分钟
阅读量
Cloudflare Serverless 矩阵统一 Passkey 认证与物理机冷热备容灾实践
在全面将核心运维工具(探针看板 x.onepve.com、Webhook 消息网关 sms.onepve.com、GitHub 仓库监控 repo.onepve.com 以及 ssh.onepve.com 管理后台)迁移至 Cloudflare Worker + KV 的 100% Serverless 架构后,我们解决了服务器常驻进程与内存消耗的问题。
然而,在日常管理与高可用运维中,我们面临两个关键挑战:
- 安全与便利平衡:如何避免每次进入管理后台都翻找输入 22 位的复杂 Token,实现指纹 / Face ID / Bitwarden 一键硬件免密登录?
- 极端故障容灾 (Disaster Recovery):如果 Cloudflare 发生全球性网络中断、CDN 节点故障或 DNS 异常,如何确保物理机能够秒级接管所有业务?
本文分享我们落地的 「统一 Passkey 认证枢纽」 与 「每小时全量自动同步 + 物理机双轨容灾系统」 实战经验。
一、统一 Passkey 硬件认证枢纽 (auth.onepve.com)
利用 WebAuthn / FIDO2 标准中的顶级域名信任机制(rpId: "example.com"),我们构建了统一认证网关:
+-------------------------------------------+ | 用户 (手机指纹 / Bitwarden / Face ID) | +-------------------------------------------+ | (只需录入 1 次 Passkey 硬件密钥) v +-------------------------------------------+ | 统一认证与 Token 枢纽 (auth.example.com) | | - rpId: example.com (全子域共享密钥) | | - 可视化生成/撤销/管理各站 Token | +-------------------------------------------+ | [签发 .example.com 跨子域安全管理 Session] | +----------------------------+----------------------------+ | | | v v v+------------------+ +------------------+ +------------------+| 探针集群监控 | | 消息转发网关 | | GitHub 仓库监控 || (x.example.com) | | (sms.example.com)| | (repo.example.com|+------------------+ +------------------+ +------------------+| · 一键下线节点 | | · 在线测试/通道 | | · 手动触发检查 || · 硬件免密管理 | | · 实时推送日志 | | · 动态增删仓库 |+------------------+ +------------------+ +------------------+核心亮点:
- 全域免密通用:在主认证中心通过 Bitwarden 绑定 1 次通行密钥,全子域自动继承;
- 主动弹窗交互:各子网站前端均内置主动调起 Bitwarden 按钮,点击一键唤醒浏览器生物识别;
- Master 根凭据隔离:Master Token 仅作为进入认证凭据中心的 Root 钥匙(不可吊销,只可修改),严禁向下游子系统分发,杜绝单点泄露全局失陷;
- 子系统独立专用 Token:为集群探针、Webhook 网关、仓库巡检各自签发独立 Token,实现最小权限隔离,各节点故障/下线随时单点吊销;
- 全量备注/备忘管理:Passkey 设备与 Token 均支持随时在线编辑名称与详细备忘(记录部署位置与调用脚本)。
二、Cloudflare 极端故障容灾方案 (物理机热备)
为了防止「单点依赖 Cloudflare」的风险,我们在物理 VPS 节点上部署了一套独立的冷热备容灾架构。
【正常模式:Serverless 全球加速】用户流量 ──> Cloudflare Edge ──> CF Workers (auth / x / sms / repo) │ 【每小时自动镜像 (Cron)】 │ (List/Get 备份 KV 数据到本地) v [ /opt/fallback/data/ ] │【故障应急模式:物理机秒级接管 (DNS 灰云直连)】用户流量 ──> VPS OpenResty ──> 物理机单文件轻量服务 (内存 < 12MB)1. 每小时自动同步是否影响 Cloudflare 免费额度?
很多读者关心定时拉取 KV 备份是否会耗尽 Cloudflare 的免费配额。以下为精确额度核算:
| 指标 | Cloudflare 免费版每日额度 | 本方案每小时同步 1 次消耗 (24次/天) | 配额占用比例 |
|---|---|---|---|
| KV List 操作 | 1,000 次 / 天 | 3 个 KV × 24 = 72 次 / 天 | 7.2% (极其安全) |
| KV Read (读取) | 100,000 次 / 天 | ~20 Keys × 24 = 480 次 / 天 | 0.48% (微乎其微) |
| Worker 请求 | 100,000 次 / 天 | 探针心跳 + 监控 ~ 2,000 次 / 天 | < 3% |
结论:每小时执行一次全量数据备份,仅占用每日免费额度的 不到 5%,完全在安全线内,零额外成本!
三、物理机应急单文件容灾服务端
在物理机 VPS 上部署 /opt/onepve-fallback/fallback_server.py,采用 Python3 纯标准库实现多域名 Host 自动路由:
1. 启动物理机守护进程
# 注册并启动本地热备服务(内存占用仅 2MB)systemctl enable --now onepve-fallback.service2. 秒级故障切换操作
当 Cloudflare 出现异常时:
- 方案 A(最常见,CF 节点故障):进入 Cloudflare DNS,将相关域名的 橙色云朵(Proxied)切换为 灰色云朵(DNS Only),3~10 秒内流量直接穿透至物理机 OpenResty;
- 方案 B(CF 全球宕机):在备用 DNS 托管商一键切换 NameServer。
总结
通过 Cloudflare Serverless 矩阵 + 统一 Passkey 认证 + 物理机每小时数据镜像容灾,我们既享受了 Serverless 带来的 0 服务器常驻成本与高可用性,又拥有了 Bitwarden 硬件级免密登录的丝滑体验,同时保留了 100% 自主可控的物理机兜底方案!