土法炼钢 · 系统与基础设施

【Falco】部署与 driver.kind:Helm、auto 回退与 least-privileged

文章导航

分类入口
kubernetessecurity
标签入口
#falco#helm#driver-kind#modern-ebpf#kmod#least-privileged#auto#v0.44.1

目录

第 9 篇 把 plugin 与 syscall 主路径分开。第 2 篇 已钉 modern_ebpf ∥ kmod 为等级内核路径。本篇落到部署面:DaemonSet / 主机安装如何选定引擎、auto 回退掩盖了什么、least-privileged 能力集为何不能抄到 kmod。

常见误区有三:把 driver.kind=auto 当成「只有一种真内核」;把 least-privileged 当全引擎通用;异构节点静默回退后仍按 modern_ebpf 排障。排障口诀仍是第 1 篇先点名轴——本篇主轴是 Driver 加载

本篇在系列中的位置

篇目 核心内容
第 9 篇 · Plugin 框架 container / k8smeta 与主路径分工
第 10 篇 · 部署与 driver.kind Helm、auto 回退、least-privileged
第 11 篇 · 观测税 成本与噪声归因到五轴
系列目录 全部篇目

版本锚定:Falco 0.44.1;驱动 10.2.0+driver。Helm driver.kind{auto, modern_ebpf, kmod}(官方 chart values / README)。least-privileged 能力集以官方 Kernel Events 的 modern eBPF 段为准。legacy ebpf / gVisor 不得写成当前选项。 无真实节点则不粘贴伪造 Driver 行。


一、Helm / 主机安装形态

Kubernetes 上典型形态是 DaemonSet:每节点一个 Falco 进程,由 chart 注入 engine.kind(或由 falcoctl driver loader 在启动前写出配置)。主机安装则走包管理器 / 二进制 + falcoctl driver,再由本机 falco.yaml 钉死引擎。

两条形态共享同一约束:

形态 谁选定引擎 证据落点
Helm DaemonSet driver.kindauto 时由 falcoctl loader 按节点探测写配置 节点级实际 engine.kind / Driver 行
主机 / 容器直跑 安装时加载驱动 + engine.kind= 同上;无集群抽象层

chart README 写明:默认偏好 Modern eBPF;driver.kind=auto 时 loader 先试 modern_ebpf,BPF 特性不足再回退 kmod。强制某一引擎时显式设 modern_ebpfkmod,不要依赖口头「集群都是新内核」。

本篇不写各云一键市场截图,也不展开每个 values 键。只钉:部署选择器写在 chart/主机配置上,真正生效的引擎写在进程侧 Driver 证据上——两者不一致时,以进程侧为准,回到轴 1。


二、modern_ebpf / kmod / auto

driver.kind 含义 不是什么
modern_ebpf 强制 Modern eBPF probe(嵌入 binary,CO-RE) 「无特权就能到处跑」——仍要能力集与 BTF/ringbuf
kmod 强制内核模块 .ko 「遗留弃子」——0.44.1 仍是等级路径
auto falcoctl / Helm 运维选择器:先 modern_ebpf,再 kmod 第三条内核路径
flowchart TD
  start["driver.kind"]
  start --> auto{"kind equals auto?"}
  auto -->|"no"| forced["Use forced modern_ebpf or kmod"]
  auto -->|"yes"| probe["Try modern_ebpf features"]
  probe -->|"BTF and ringbuf OK"| mebpf["engine.kind modern_ebpf"]
  probe -->|"features missing"| kmod["Fall back to kmod"]
  forced --> run["Falco userspace starts"]
  mebpf --> run
  kmod --> run

图:auto 决策(英文节点)。回退发生在驱动加载门,进入 libscap 之后仍是两条引擎之一。

auto 的价值是异构节点少操心;代价是静默换引擎时,若未核对 Driver 行,排障会用错权限模型与失败表象。展开失败模式见第 13 篇


三、least-privileged 只适用于 modern_ebpf

官方 Kernel Events

Helm driver.modernEbpf.leastPrivileged 仅在强制 / 实际跑 modern_ebpf 时有意义。把同一 securityContext 抄到 kmod 路径,属于配置谎言:要么装不上模块,要么容器仍 privileged。

路径 特权模型 部署后果
modern_ebpf + least-privileged 上列四能力(文档口径) 可约束容器;仍依赖 sysfs/tracefs 挂载与内核特性
kmod 完整特权加载 .ko init/loader 与签名/DKMS 现实;不可假装 least-privileged

能力名在 chart values 注释里常写作 CAP_BPF / CAP_PERFMON(容器 capability 短名);机制钉以 Kernel EventsCAP_SYS_* 列表为准。发行版若把 kernel.perf_event_paranoid 抬得过高,即便有能力集仍可能在 attach 阶段失败——那是轴 1 权限/策略问题,不是规则写错。


四、异构节点回退

集群里混有「有 BTF + ringbuf」与「无足够 BPF 特性」的节点时,auto 会让不同节点落在不同引擎。这是预期运维行为,不是「半个集群坏了」。

排障纪律:

  1. 按节点核对实际引擎,不要用一份全局 values 推断全部 Pod。
  2. 回退到 kmod 的节点改走完整特权 / 驱动加载证据包,不要继续查 least-privileged 缺哪条 CAP。
  3. 强制全集群单一引擎时,显式 modern_ebpfkmod,并接受不兼容节点会启动失败——失败可见,往往优于静默分叉。

开放问题(系列后文回收):auto 回退是否应成为一等公民 status/指标。当前值班最低标准是:事故节点上能读到实际 engine.kind,并写入证据包标题。


五、与轴 1 排障衔接

本篇把部署旋钮钉在轴 1。进入第 13 篇前,先用下表分流:

表象 先查 不要先做
Pod Ready,但引擎不是预期 driver.kind、loader 生成配置、节点 Driver 行 改规则 YAML
modern_ebpf 起不来,auto 后变 kmod BPF 特性 / BTF;回退后特权模型 仍按 CAP 列表排 kmod
least-privileged 容器 attach 失败 能力集是否对 modern_ebpf;paranoid / 挂载 把 kmod 也改成同一 securityContext
只有部分节点无事件 异构回退分列证据包 认定「规则集坏了」

下一篇把权限与部署差写成观测税(机制成本,不是 CPU% 榜);升级成对换驱动见第 12 篇


参考资料

规范 / 官方文档(A)

本系列


上一篇Plugin 框架

下一篇观测税与误报面

读完这篇,下一步读什么

优先读同系列或同问题的下一篇,把单篇消费变成主题集群。

2026-08-21 · kubernetes / security

【Falco】双引擎对照:modern_ebpf 与 kmod 等级路径

钉清 Falco 0.44.1 仅保留的两条等级内核路径:modern_ebpf 的嵌入、CO-RE 与能力集,以及 kmod 的独立 .ko、签名与完整特权;说明何时不能互换,并把 auto 回退收束为运维门。

2026-08-21 · kubernetes / security

Falco / 运行时检测:从双引擎驱动到规则引擎

补齐站内 Tetragon 排除树与产品对照之上的 Falco 检测内核:modern_ebpf 与 kmod 双引擎、libscap/libsinsp、规则引擎与输出,并以排障与相对 Tetragon/auditd/seccomp 的选型收束。

2026-08-21 · kubernetes / security

【Falco】丢事件与缓冲:drop 归因与 BPF iterators 门

区分驱动/用户态缓冲丢事件与规则未命中:钉清 buf_size_preset 与缓冲维度、drop 指标语义、0.44 BPF iterators 愈合路径,以及 0.44.1 可禁用 iterators 的容器门与双引擎证据包差。


By .