应用里不放真实 API Key,只放一串 kloak:MPZVR3GHWT4E6YBCA01JQXK5N8。等请求要离开 Pod、发往外部 HTTPS 服务时,Kloak 再用 eBPF 把占位符替换成真正的 Bearer sk-live-...

这个设计最反常的地方,不是“又来了一个 Secret Manager”。而是它把密钥出现的位置往后推了:不在应用启动时,不在环境变量里,不在文件挂载里,也不靠 SDK 调用。密钥直到网络出口才出现。

这一步很聪明。但也很重。

Kloak 做的事:把密钥从应用进程里拿走

Kloak 是一个 Kubernetes Native 的开源项目,许可证是 AGPL-3.0。它使用标准 Kubernetes Secrets,通过 label 启用,不要求 sidecar,也不要求应用接 SDK。

它的工作流很短:

环节Kloak 的做法直接影响
Secret 来源使用标准 Kubernetes Secrets不另建一套密钥仓库
启用方式给 Secret 加 getkloak.io/enabled=true贴近 K8s 运维习惯
应用配置写入 kloak:ULID 占位符应用进程拿不到明文凭证
请求出站用纯 eBPF 在请求离开 Pod 前替换密钥在网络边界出现
使用范围支持按 host 限制降低凭证被挪用到其他目的地的风险

它要解决的不是玄学安全,而是几个很具体的脏问题:日志误打、崩溃 dump、配置泄露、进程内存被读、workload 被攻陷后直接拿凭证。

如果应用从来没见过真实密钥,很多低级但高发的泄密路径会少一截。开发者不能随手 print 出来,异常栈里也不该躺着完整 token。攻击者进了 workload,也未必能从进程环境里顺手把钥匙带走。

这对 Kubernetes 平台工程师很有吸引力。因为它不要求每个业务团队改代码,也不要求每个语言栈都接一套 SDK。安全能力下沉到平台层,推广成本会低很多。

对云原生安全负责人,吸引力在治理口径。你可以更集中地回答:哪些 Secret 能被哪个 workload 用,能发往哪些 host,谁改了配置,哪些访问越界。

但这里有个前提:这些控制真的可见、可审计、可回滚。

它和现有方案的差别:少改代码,多信节点

Kubernetes 里管 Secret 的路线已经很多。Vault、External Secrets、CSI Driver、sidecar、SDK,都有自己的位置。Kloak 的新意在于,它不急着把密钥交给应用,而是在流量出口做替换。

横向看,差别大概是这样:

路线密钥通常在哪里出现优点主要代价
环境变量 / 文件挂载应用进程、容器文件系统简单,K8s 原生容易进日志、dump、内存和误配置
SDK / Vault 调用应用代码或运行时内存权限控制细,生态成熟要改代码,要管语言栈和接入规范
sidecar / agentPod 内代理层对应用侵入较低部署复杂,资源和故障面增加
Kloak / eBPF 替换节点侧网络路径应用少碰密钥,无 SDK、无 sidecar节点信任、内核权限、流量处理边界更关键

所以 Kloak 不是把 Vault 这类系统简单换个壳。它改的是密钥穿过系统的路线。

传统方案像把钥匙发给柜台员工,再要求员工别乱放。Kloak 更像把钥匙收回金库,只在门口开锁那一刻拿出来。这个比喻不完美,但能说明问题:柜台干净了,金库守卫就成了核心风险。

这里必须谨慎说一句:项目页面宣称 eBPF 开销可忽略,但这还只是项目方说法。没有看到生产规模、第三方审计、长时间压测之前,不能把它当成已验证结论。

HTTPS 也不是一句“拦截替换”就能带过。真实边界取决于它在加密前后哪一层完成替换,如何处理 TLS、证书、内核权限和进程边界。纯 eBPF、无 sidecar、无 SDK 的路线很干净,但也意味着实现细节更值得被盯紧。

平台工程师如果要试,动作应该很保守:先放非核心 workload,先绑定固定 host,先确认失败时请求怎么处理,先看审计日志够不够用。不要一上来把生产核心凭证全交给它。

安全负责人更该延后采购式判断。看清四件事再说:权限模型、审计记录、节点被攻陷后的影响半径、多租户隔离。少一个,都不适合大范围铺开。

我的判断:边界迁移是好方向,但新王座必须上锁

我认可 Kloak 的方向。

云原生里太多 Secret 泄露,不是因为攻击链多高级,而是因为钥匙到处躺。环境变量里一份,配置文件里一份,日志里又滚出去一份。业务系统越多,靠开发者自觉越不现实。

把密钥从应用层拿走,是一次有效的边界迁移。它让平台团队有机会统一收口,也让业务团队少背一部分安全债。

但我不买账的是把它讲成“应用看不到密钥,所以系统就安全了”。安全从来不是风险消失,只是风险换了位置。

Kloak 把风险搬到了节点侧拦截层。这个层级权限高、位置隐蔽、影响半径大。它能识别占位符,能映射 Secret,能在出站路径替换内容,还能决定凭证发往哪里。

这不是小权力。

“利之所在,天下趋之。”放到基础设施里,就是权限总会向最省事的位置聚集。SDK 麻烦,sidecar 重,改代码慢,于是透明、无感、零改造的方案天然受欢迎。越是无感,越要把它摊开审。

我会看几个变量:

  • Secret 到 host 的绑定是否足够细,能不能默认拒绝未知目的地。
  • eBPF 程序谁能下发,变更是否有审批和记录。
  • 替换行为是否可观测,出错时是 fail-close 还是继续放行。
  • 节点被攻陷后,攻击者能拿到多少 Secret,能不能横向扩大。
  • 多租户集群里,不同团队的边界能不能真的切开。

这些不是边角料。它们决定 Kloak 是安全基础设施,还是一个更靠近内核的高权限中间人。

对平台工程师,我的建议是:可以做 PoC,但别急着迁移核心凭证。先把它当成减少应用侧泄露的工具,而不是替代完整 Secret 治理的系统。

对安全负责人,我的建议更硬一点:如果看不到审计、回滚、隔离、故障策略,就先观望。AGPL-3.0 和开源代码有助于审查,但开源不等于经过审计,更不等于默认可托管生产风险。

Kloak 这类方案真正的价值,不在 demo 里替换成功那一下。价值在脏活里:故障时不乱放,越权时能拦住,审计时说得清,回滚时不拖垮业务。

应用干净了,是进步。节点变重了,是账单。

这笔账不算清,安全感就是幻觉。