第 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。Helmdriver.kind∈{auto, modern_ebpf, kmod}(官方 chart values / README)。least-privileged 能力集以官方 Kernel Events 的 modern eBPF 段为准。legacyebpf/ gVisor 不得写成当前选项。 无真实节点则不粘贴伪造 Driver 行。
一、Helm / 主机安装形态
Kubernetes 上典型形态是
DaemonSet:每节点一个 Falco 进程,由 chart
注入 engine.kind(或由 falcoctl driver loader
在启动前写出配置)。主机安装则走包管理器 / 二进制 +
falcoctl driver,再由本机
falco.yaml 钉死引擎。
两条形态共享同一约束:
| 形态 | 谁选定引擎 | 证据落点 |
|---|---|---|
| Helm DaemonSet | driver.kind;auto 时由
falcoctl loader 按节点探测写配置 |
节点级实际 engine.kind / Driver 行 |
| 主机 / 容器直跑 | 安装时加载驱动 + engine.kind= |
同上;无集群抽象层 |
chart README 写明:默认偏好 Modern
eBPF;driver.kind=auto 时 loader 先试
modern_ebpf,BPF 特性不足再回退
kmod。强制某一引擎时显式设
modern_ebpf 或
kmod,不要依赖口头「集群都是新内核」。
本篇不写各云一键市场截图,也不展开每个 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:
- Kernel module:需要完整特权,不能用 Linux capabilities 做 least-privileged。
- Modern eBPF:最小能力集为
CAP_SYS_BPF、CAP_SYS_PERFMON、CAP_SYS_RESOURCE、CAP_SYS_PTRACE(在支持细粒度 BPF/PERFMON 能力的内核上,可替代粗粒度CAP_SYS_ADMIN)。
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 Events 的 CAP_SYS_*
列表为准。发行版若把 kernel.perf_event_paranoid
抬得过高,即便有能力集仍可能在 attach 阶段失败——那是轴 1
权限/策略问题,不是规则写错。
四、异构节点回退
集群里混有「有 BTF + ringbuf」与「无足够 BPF
特性」的节点时,auto
会让不同节点落在不同引擎。这是预期运维行为,不是「半个集群坏了」。
排障纪律:
- 按节点核对实际引擎,不要用一份全局 values 推断全部 Pod。
- 回退到 kmod 的节点改走完整特权 / 驱动加载证据包,不要继续查 least-privileged 缺哪条 CAP。
- 强制全集群单一引擎时,显式
modern_ebpf或kmod,并接受不兼容节点会启动失败——失败可见,往往优于静默分叉。
开放问题(系列后文回收):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)
- Falco Kernel Events(modern eBPF least-privileged 能力集;kmod 不可 least-privileged)
- falcosecurity/charts
falco:driver.kind∈{auto, modern_ebpf, kmod};driver.modernEbpf.leastPrivileged - Falco 0.44.1 / 驱动
10.2.0+driver;0.44.0 删除 legacy eBPF
本系列
- 第 2 篇 · 双引擎对照
- 第 1 篇 · 五轴;PLAN.md §八、§九·10
上一篇:Plugin 框架
下一篇:观测税与误报面
读完这篇,下一步读什么
优先读同系列或同问题的下一篇,把单篇消费变成主题集群。
【Falco】双引擎对照:modern_ebpf 与 kmod 等级路径
钉清 Falco 0.44.1 仅保留的两条等级内核路径:modern_ebpf 的嵌入、CO-RE 与能力集,以及 kmod 的独立 .ko、签名与完整特权;说明何时不能互换,并把 auto 回退收束为运维门。
【Falco】运行时检测全景:缺口、五轴坐标系与 16 篇路线
相对 Tetragon 排除树、可观测对照与 linux/ebpf-security 快速启用清单,钉清 Falco 0.44.1 检测内核缺口;定义 Driver、libscap、libsinsp、规则引擎、输出与丢事件五条轴,并强调 modern_ebpf 与 kmod 分列证据包。
Falco / 运行时检测:从双引擎驱动到规则引擎
补齐站内 Tetragon 排除树与产品对照之上的 Falco 检测内核:modern_ebpf 与 kmod 双引擎、libscap/libsinsp、规则引擎与输出,并以排障与相对 Tetragon/auditd/seccomp 的选型收束。
【Falco】丢事件与缓冲:drop 归因与 BPF iterators 门
区分驱动/用户态缓冲丢事件与规则未命中:钉清 buf_size_preset 与缓冲维度、drop 指标语义、0.44 BPF iterators 愈合路径,以及 0.44.1 可禁用 iterators 的容器门与双引擎证据包差。