Vault 线上部署与硬化
位置:腾讯云 VPS,与 Pangolin 三件套同机(实测 4C/3.7G——性能审查纠正了 1C2G 的假设)。入口 https://vault.<域名>,traefik 终结 TLS(泛证书),容器不发布任何主机端口。部署资产在 docker-deploy 仓 vault/ 目录。
关键设计
- 认证选 AppRole 而非 kubernetes auth,是反向可达性决定的:kubernetes auth 需要 Vault 回连集群 apiserver,内网集群公网够不着;AppRole 纯出站,方向与 newt 隧道一致
- raft 单节点 + KV v2;策略
eso-read只读(secret/data/*与secret/metadata/*——KV v2 写成secret/*会 403) - 测试级取舍:单 unseal key 与 root token 同机存放(0600,不入库);VPS 或容器重启后回到 sealed,需手动 unseal
硬化(2026-08-17 审查后当日落地,均行为验证)
| 项 | 验证 |
|---|---|
| 专网 vault_backend 10.66.0.0/24,退出 pangolin_frontend(可达邻居 15 → 1) | frontend 网络容器访问 vault:8200 结果 BLOCKED |
审计 vault audit enable file | audit.log 落盘,开启状态持久于 storage,重启后自动恢复 |
listener 加 x_forwarded_for_authorized_addrs | 审计里 remote_address 为真实公网 IP,而非 traefik 内网 IP |
| 容器级禁 swap(memswap_limit = memory limit) | 配合 disable_mlock=true,防明文密钥页落入未加密 swap |
| raft snapshot | 明文迁移前后各一份,异地存放 |
踩坑速记
- vault 官方镜像 entrypoint 只 chown 自带的
/vault/file,自定义 raft data 目录要在宿主机侧chown 100:1000 vault status在 sealed 时退出码为 2,set -o pipefail下接管道会把||兜底值拼进捕获结果- jq 的
//把 false 当「空」,判断 sealed 布尔值要tostring docker exec要吃 heredoc(如policy write -)必须带-i- 选专网子网前先查全机:172.16–31 的 /16 可能已被各 compose 网络占满,还要避开云厂商 VPC 网段
相关:L3 密钥管理 · ESO 接线 · Pangolin内网穿透实战