eBPF — 了解云原生workload的下一代网络、安全性和可观察性
最近,我看到InfoQ的一次现场会议上了解了到eBPF。这是一场由Liz Rice介绍的eBPF session, 我惊讶地发现,在网络、安全和可观察性方面,eBPF具有超强的能力。
在本文中,我将探讨eBPF以及构建在eBPF之上的工具,并看看它们在云原生的世界里如何帮助我们管理网络。
什么是eBPF
Linux内核由两部分组成:
- User Space
- Kernel Space
图片来源 — What is eBPF? An Introduction and Deep Dive into the eBPF Technology
User Space是一般应用程序运行的地方,而Kernel Space是大多数操作系统相关进程以及驱动程序运行的地方。内核空间可以直接完全访问硬件。每次User Space的应用程序需要连接到硬件时,它都会通过调用Kernel Space的API来实现。将这两者分离具有安全优势,在大多数应用程序中,这已经足够好了。
eBPF(extended Berkeley Packet Filter)为程序员提供了一种机制,使他们可以在Kernel Space执行自定义代码,从而可以用来构建更好的调试、跟踪、防火墙等工具。
eBPF允许User Space应用程序将逻辑打包到内核空间执行,而无需更改内核代码,甚至无需重新加载。
用Brendon Gregg的话说就是
eBPF对Linux的作用就像JavaScript对HTML的作用一样。因此,与静态的HTML网站不同,JavaScript可以让你定义在鼠标点击等事件上运行的小型程序,这些程序在浏览器的沙盒中运行。有了eBPF,你就可以编写根据磁盘I/O等事件运行的程序,这些程序在内核中的安全沙盒中运行,而不是一个固定的内核。
下图展示了eBPF的演进
图片源自 eBPF - The Future of Networking & Security
开发者可以使用BCC工具包编写eBPF程序。另一些像Verifiers这样的程序可以检查程序是否合法以及有效,并且不会让内核crash或锁定。
由于eBPF程序运行在Kernel Space,它们可以看到所有进程和应用程序。因此,它们可以用于很多方面:例如高性能网络、安全、trace和firewall。
如何开始使用eBPF
对于初学者来说,有很多已经构建好的工具可以帮助我们入门。有一些BCC工具,如
- execsnoop
- opensnoop
- ext4slower
- biolatency
- biosnoop
- cachestat
- tcpconnect
- tcpaccept
- tcpretrans
- runqlat
- profile
您可以在此阅读有关这些工具的更多信息。下图显示了BCC/BPF跟踪工具的完整列表。
图片源自 https://github.com/iovisor/bcc/blob/master/images/bcc_tracing_tools_2019.png
基于eBPF的项目
现在您已经了解了eBPF的超强功能,是时候了解它在哪些场景中派上用场了。
上一节介绍了eBPF工具的跟踪功能,但还不止这些。很多项目都将这一功能提升到了新的水平。让我们来了解一下这些项目。
Cilium
Cilium 是一个用于连接应用和容器(例如Docker或Kubernetes)的安全网络连接服务组件。
由于Cilium基于运行内核的eBPF构建,因此无需更改任何应用程序代码。
这里有一篇相当不错的文章,详细描述了Cilium的功能。结合Hubble,Cilium可帮助轻松保护基于Kubernetes的workload。
图片源自 GitHub - cilium/hubble: Hubble - Network, Service & Security Observability for Kubernetes using eBPF
您也可以参考这篇文章
关于使用Cilium设置K8网络策略 — Luc Juggery
Falco
Falco是一款行为分析工具,用于检测应用程序中的异常情况。它使用eBPF
- 转译为系统调用
- 根据定义的规则验证行为
- 在违反规则时发出告警
Falco带有预定义规则,有助于分析异常行为, 您可以在这里查看一些规则和示例。
Teleport
Teleport是证书颁发机构和基础架构的控制平面。它允许用户在一个地方设置单点登录,并访问SSH服务器、K8S和Web应用程序。Teleport的一个重要功能是共享交互会话。
Teleport 4.2版本开始使用一些eBPF程序来捕获SSH会话并将其转换为事件流。
图片源自 What is eBPF? | How eBPF works
Katran
Katran是一个开源的eBPF项目,用于构建高性能的第四层负载均衡转发平面。Katran于2018年5月由Facebook开源。
你可以在这里找到更多关于Katran的信息。
如何进阶
eBPF无疑给网络、负载均衡和安全领域带来了革命性的变化。我相信很多人都在关注这项技术,并将利用它做更多有趣的事情。
到目前为止,eBPF仅局限于Linux上。微软最近宣布了一个开源项目,可以在Windows中启用eBPF。
谷歌同样也宣布,他们将在谷歌Kubernetes引擎中提供Cilium和eBPF的功能,以增强基于K8S workload的安全功能。
因此,我们可以肯定的是,在这一领域,未来将有更多令人兴奋的事情发生!