eBPF

eBPF 的核心能力是可编程性和内核态执行。它可以附加到内核中的数百个“钩子”(Hook
Points),实现传统方法难以实现或效率低下的复杂逻辑。是比iptables更强的工具

网络功能举例(Network Functions)

eBPF 在云原生网络中被广泛用于替代传统的 iptables 和用户空间代理。

  • 高性能负载均衡(Load Balancing):
    例子: Cilium 或 eBPF-based HAProxy。eBPF 可以在内核中实现 L4(TCP/UDP)和 L7(HTTP)负载均衡器。当一个数据包到达时,eBPF 程序直接决定将数据包转发到哪个后端服务器,无需将数据包在内核空间和用户空间之间来回传递,大大降低了延迟。
  • 透明代理(Transparent Proxy):
    例子: 在服务网格(Service Mesh)中,eBPF 用于实现比 TPROXY 更高效的流量拦截。它可以透明地将应用的流量重定向到本地的 Envoy 代理,同时保留原始的源 IP 和目标 IP,而不需要复杂的 iptables 规则和策略路由配置。
  • 网络策略和防火墙(Network Policy):
    例子: 使用 eBPF 实现的防火墙规则可以直接在数据包进入网络堆栈的最早阶段进行过滤。比如,只允许特定 Pod(在 Kubernetes 环境中)之间进行通信,其他流量直接在内核中丢弃。

可观测性举例(Observability & Monitoring)

eBPF 可以深入内核和应用内部,收集标准工具无法提供的数据。

  • 应用性能监控(APM):
    例子: 使用 eBPF 监控 Web 服务器(如 Nginx、Apache)的性能。eBPF 可以捕获 HTTP 请求的延迟、错误率,甚至不需要修改 Nginx 的配置或代码。
  • 系统调用跟踪(Syscall Tracing):
    例子: bpftrace 工具。您可以使用它编写脚本来监控系统上所有正在打开的文件。例如,追踪哪个进程在哪个时间点打开了哪个文件,用于安全审计或故障排查。
    bpftrace -e ‘tracepoint:syscalls:sys_enter_openat { printf(“%s opened %s\n”, comm, str:arg1); }’
  • CPU 使用率分析(Profiling):
    例子: 使用 perf 或其他 eBPF 工具分析 CPU 使用率,找出应用程序的哪个函数是性能瓶颈,甚至可以深入到内核函数级别。

安全功能举例(Security & Sandboxing)

eBPF 提供了强大的安全隔离和监控能力。

  • 运行时安全(Runtime Security):
    例子: 使用 Cilium Tetragon 或 Falco 等工具。eBPF 持续监控系统的行为,例如,如果一个 Web 服务器进程突然尝试打开 /etc/shadow 文件(一个存放密码哈希的文件),eBPF 程序可以立即检测到这个异常行为并终止该进程。
  • 文件完整性监控(File Integrity Monitoring):
    例子: 监控关键系统文件的修改。当有人尝试更改二进制文件或配置文件的权限时,eBPF 可以捕获内核事件并发出警报。