要实现一个基于 Caddy 的 PVE 高可用管理入口,核心思路是利用 Caddy 的 reverse_proxy 负载均衡与健康检查(Health Checks) 功能。
这样,当你访问同一个域名时,Caddy 会自动检测哪些 PVE 节点在线,并将请求转发给健康的节点。如果某个节点宕机,Caddy 会自动剔除它并跳转到下一个可用节点。
1. 核心 Caddyfile 配置
假设你有三个节点:Node A (1.1.1.1), Node B (2.2.2.2), Node C (3.3.3.3)。你可以这样配置:
Code snippet
pve.yourdomain.com {
# 开启负载均衡代理
reverse_proxy {
# 列出所有 PVE 节点的管理地址(必须带 https 和 8006)
to https://1.1.1.1:8006 https://2.2.2.2:8006 https://3.3.3.3:8006
# 负载均衡策略:建议使用 first (始终尝试第一个,挂了才换)
# 或者 round_robin (轮询)
lb_policy first
# 【关键】主动健康检查
# Caddy 会定期访问后端,确保节点活着
health_uri /
health_interval 10s
health_timeout 2s
health_status 2xx
# 【关键】TLS 配置
# 因为 PVE 节点自带自签名证书,Caddy 转发时需要跳过验证
transport http {
tls_insecure_skip_verify
}
}
}2. 配置详解
lb_policy first: 对于 PVE 管理后台,我强烈建议使用first而不是round_robin。因为 PVE 的 Web 登录会产生 Session,如果你频繁在节点间切换,可能会导致频繁掉线。使用first可以确保只要第一个节点没挂,你就一直待在第一个节点上。tls_insecure_skip_verify: PVE 默认使用自签名证书(HTTPS 8006),如果不加这一行,Caddy 会因为无法验证上游证书而报错。health_uri /: PVE 的根路径在存活时会返回 200 状态码,这足以作为健康检查的依据。
3. 进阶:解决 Caddy 自身的单点故障
虽然 Caddy 解决了 PVE 节点的跳转问题,但如果 运行 Caddy 的那台服务器 挂了怎么办?
由于你正在使用 Cloudflare,可以结合以下方案实现“全栈高可用”:
- 双 Caddy 节点: 在两台不同的 VPS 上运行相同的 Caddy 配置。
Cloudflare 负载均衡 (推荐):
- 在 Cloudflare 后台,为
pve.yourdomain.com设置多条 A 记录,分别指向你的多个 Caddy 服务器 IP。 - 开启 Cloudflare 的“小黄云”(Proxy 模式)。
- 即使其中一台 Caddy 挂了,Cloudflare 的边缘节点也会尝试重试另一条记录。
- 在 Cloudflare 后台,为
4. 注意事项
- MTU 问题: 考虑到你之前提到的跨地域 VPS 集群,如果网络延迟较高或有 VPN 隧道(如 WireGuard/Tailscale),请确保 Caddy 所在服务器的 MTU 设置正确,否则 Web 界面加载大文件(如 ISO 上传)时可能会卡死。
- WebSocket 支持: Caddy 默认支持 WebSocket 转发,这对于 PVE 的 noVNC 控制台 至关重要,上述配置无需额外修改即可直接支持控制台操作。