1185 字
6 分钟
阅读量
Cloudflare Serverless 矩阵统一 Passkey 认证与物理机冷热备容灾实践

在全面将核心运维工具(探针看板 x.onepve.com、Webhook 消息网关 sms.onepve.com、GitHub 仓库监控 repo.onepve.com 以及 ssh.onepve.com 管理后台)迁移至 Cloudflare Worker + KV 的 100% Serverless 架构后,我们解决了服务器常驻进程与内存消耗的问题。

然而,在日常管理与高可用运维中,我们面临两个关键挑战:

  1. 安全与便利平衡:如何避免每次进入管理后台都翻找输入 22 位的复杂 Token,实现指纹 / Face ID / Bitwarden 一键硬件免密登录?
  2. 极端故障容灾 (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. 启动物理机守护进程#

Terminal window
# 注册并启动本地热备服务(内存占用仅 2MB)
systemctl enable --now onepve-fallback.service

2. 秒级故障切换操作#

当 Cloudflare 出现异常时:

  1. 方案 A(最常见,CF 节点故障):进入 Cloudflare DNS,将相关域名的 橙色云朵(Proxied)切换为 灰色云朵(DNS Only),3~10 秒内流量直接穿透至物理机 OpenResty;
  2. 方案 B(CF 全球宕机):在备用 DNS 托管商一键切换 NameServer。

总结#

通过 Cloudflare Serverless 矩阵 + 统一 Passkey 认证 + 物理机每小时数据镜像容灾,我们既享受了 Serverless 带来的 0 服务器常驻成本与高可用性,又拥有了 Bitwarden 硬件级免密登录的丝滑体验,同时保留了 100% 自主可控的物理机兜底方案!