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的安全功能。

因此,我们可以肯定的是,在这一领域,未来将有更多令人兴奋的事情发生!

posted @ 2023-07-12 17:47  一烫杂货铺  阅读(72)  评论(0编辑  收藏  举报  来源