运行 Kubernetes 释放了容器的强大功能,但看到更多功能岂不更好?eBPF(扩展 Berkeley 数据包过滤器)是一种…
译自 Harnessing eBPF for Enhanced Kubernetes Operations,作者 Renjith Pillai。
运行 Kubernetes 可以释放容器的强大功能,但如果能看到更多,岂不是更好?eBPF(扩展 Berkeley 数据包过滤器)是 Kubernetes 的游戏规则改变者。它让你可以窥探内部,并微调集群以提高安全性、性能和故障排除能力。本博客系列将探讨 eBPF 如何改变 Kubernetes,深入了解让这一切成为可能的酷炫项目。
每个 Linux 操作系统的核心都是内核,它就像一个协调系统组件的乐团指挥。它在硬件和软件之间进行接口,管理资源,促进通信,并提供安全和进程管理等核心服务。
虽然常规编程通常会避免深入研究内核,因为其复杂性和风险,但在某些情况下,这种深度是必要的。内核编程可以执行诸如为新硬件创建设备驱动程序、优化系统性能和增强安全措施等任务。
eBPF,即扩展 Berkeley 数据包过滤器,作为在 Linux 内核中安全运行自定义程序的强大解决方案而出现。它促进了诸如数据包过滤、网络监控、安全强制和性能分析等任务,所有这些都在沙盒环境中进行。
下图提供了 eBPF 架构的简化描述。
在合并到内核之前,eBPF 程序必须经过一系列特定的验证。此验证过程需要在虚拟机中运行 eBPF 程序,使验证程序能够进行一系列评估。验证程序仔细检查 eBPF 程序在内核中的潜在执行路径,确保不间断执行且不会遇到任何可能导致内核锁定的循环。
在成功完成所有检查后,eBPF 程序将加载并编译到内核中,位于代码路径中的指定位置,等待适当的信号。在收到信号(通常以事件的形式)后,eBPF 程序将部署在代码路径中。随后,字节码将根据其指令收集和执行信息。
从本质上讲,eBPF 的基本功能是为程序员提供一种在 Linux 内核中执行自定义字节码的安全方法,而无需修改内核源代码。
传统的监控工具通常依赖于日志记录或基于代理的检测,这会增加开销并限制可见性。eBPF 在 Kubernetes 环境中表现出色,原因有以下几个:
让我们探讨一些引人注目的用例,展示 eBPF 在 Kubernetes 中的强大功能:
Cilium — 基于 eBPF 的网络、安全性和可观测性
Cilium 是一个开源项目,提供基于 eBPF 的网络、安全性和可观测性能力。它专门从头开始设计,旨在将 eBPF 的优势引入 Kubernetes 世界,并解决容器工作负载的新的可扩展性、安全性和可见性需求。
Calico — 适用于容器和 Kubernetes 的可插拔 eBPF 网络和安全性
Calico 开源版旨在简化、扩展和保护容器和 Kubernetes 网络。Calico 的 eBPF 数据平面利用 eBPF 程序的强大、高速和高效,为您的环境提供网络、负载平衡和内核安全执行。
Falco — 云原生运行时安全
Falco 是一种行为活动监控器,旨在检测应用程序中的异常活动。Falco 使用 eBPF 在 Linux 内核层审计系统。它通过其他输入流(如容器运行时指标和 Kubernetes 指标)来丰富收集的数据,并允许持续监控和检测容器、应用程序、主机和网络活动。
Pixie — 可编写的 Kubernetes 可观测性
Pixie 是一种用于 Kubernetes 应用程序的开源可观测性工具。Pixie 使用 eBPF 自动捕获遥测数据,无需手动检测。开发人员可以使用 Pixie 查看集群的高级状态(服务映射、集群资源、应用程序流量),也可以深入查看更详细的视图(Pod 状态、火焰图、单个完整应用程序请求)。
Hubble — 使用 eBPF 的 Kubernetes 网络、服务和安全可观测性
Hubble 是一个完全分布式的云原生工作负载网络和安全可观测性平台。它构建于 Cilium 和 eBPF 之上,以完全透明的方式深入了解服务通信和行为以及网络基础设施。
Grafana Pyroscope — 持续性能分析平台
Grafana Pyroscope 是一个开源软件项目,用于聚合持续性能分析数据。持续性能分析是一种可观测性信号,允许您深入到行号级别了解工作负载的资源(CPU、内存等)使用情况。Grafana Pyroscope 与 Grafana 完全集成,允许您将性能分析数据与其他可观测性信号(如指标、日志和跟踪)关联。
Caretta — 基于 eBPF 的 Kubernetes 服务映射
Caretta 是一个使用 eBPF 跟踪 Pod 之间网络流量的 Kubernetes 服务映射。它可用于可视化 Kubernetes 集群中服务之间的网络流量,并深入了解网络流量和服务之间的关系。
KubeArmor — 容器感知的运行时安全执行系统
KubeArmor 是一个容器感知的运行时安全执行系统,使用 LSM 和 eBPF 在系统级别限制容器的行为(如进程执行、文件访问、网络操作和资源利用)。
总之,Kubernetes 中的 eBPF 生态系统提供了一套强大的工具,用于深入了解和控制容器化环境。从 Cilium 的安全性重点到 Hubble 的可观测性优势,这些项目展示了 eBPF 在优化和故障排除 Kubernetes 集群方面的通用性。但这只是冰山一角!在未来的文章中,我们将更深入地探讨这些工具的具体功能,并提供将它们应用于您的 Kubernetes 生态系统的实际指导。敬请期待对 Kubernetes 中 eBPF 令人兴奋世界的更深入了解!