专栏首页运维之美一文读懂 eBPF 对 Kubernetes 可观测的重要性

一文读懂 eBPF 对 Kubernetes 可观测的重要性

作者:Lavanya Chockalingam,New Relic 高级产品营销经理。最初发表在 New Relic 的博客[1]

在 Linux 内核中工作是实现安全性、网络和可观察性特性的理想选择。然而,这并不是没有挑战。无论是修改内核源代码,还是添加模块,开发人员传统上发现他们要与难以调试的复杂基础设施和抽象层作斗争。Extended BPF[2](eBPF)解决了这两个问题。

Extended Berkeley Packet Filter(eBPF)是一种内核技术(从 Linux 4.x 开始),它允许程序在无需更改内核源代码,或添加额外模块的情况下运行。你可以将其视为 Linux 内核中的轻量级沙箱虚拟机(VM),程序员可以在其中运行 BPF 字节码,从而利用特定的内核资源。

使用 eBPF 消除了更改内核源代码的需要,并简化了软件利用现有层的能力。因此,它是一项强大的技术,有可能从根本上改变网络、可观察性和安全性等服务的交付方式。

下面详细介绍一下它是什么,它是如何工作的,以及何时考虑实施它。

eBPF 是如何工作

eBPF 程序是事件驱动的,并附加到代码路径上。代码路径包含特定的触发器(称为钩子),这些触发器在传递附加的 eBPF 程序时执行它们。钩子的一些例子包括网络事件、系统调用、函数项和内核追踪点。

当触发时,代码首先被编译为 BPF 字节码。然后,字节码在运行之前会被验证,以确保它不会创建循环。这个步骤可以防止程序无意或故意损害 Linux 内核。

在钩子上触发程序之后,它就会进行助手调用。这些助手调用是为 eBPF 配备许多用于访问内存的特性的函数。助手调用需要由内核预先定义,但是存在的函数列表在不断增长[3]。

eBPF 最初被用作过滤网络数据包时,提高可观察性和安全性的一种方法。然而,随着时间的推移,它成为了一种使用户提供的代码实现更安全、更方便和性能更好的方法。

eBPF 的优点

eBPF 通常用于追踪[4]用户空间进程,它的优点在这里很明显。这是一个安全和有用的方法来确保:

  • 速度和性能。eBPF 可以将包处理从内核空间转移到用户空间。同样,eBPF 是即时(JIT)编译器。编译字节码后,将调用 eBPF,而不是为每个方法调用字节码的新解释。
  • 低侵入性。当作为调试器使用时,eBPF 不需要停止程序来观察其状态。
  • 安全。程序实际上是沙箱化的,这意味着内核源代码仍然受到保护并且没有改变。验证步骤确保资源不会被运行无限循环的程序堵塞。
  • 方便。创建钩子内核函数的代码比构建和维护内核模块的工作要少。
  • 统一的追踪。eBPF 为你提供了一个用于追踪流程的单一、强大且可访问的框架。这增加了可见性和安全性。
  • 可编程性。使用 eBPF 有助于增加环境的特性丰富度,而无需添加额外的层。同样,由于代码直接在内核中运行,因此可以在 eBPF 事件之间存储数据,而不像其他追踪程序那样转储数据。
  • 表达能力。eBPF 具有表达性,能够执行通常只能在高级语言中找到的功能。

eBPF 的最佳实践

由于 eBPF 是一项如此新的技术,许多东西仍未被探索。随着技术的发展,围绕 eBPF 的最佳实践仍在不断发展。虽然没有明确的最佳实践集存在,但你可以做一些事情来确保有效、高效的程序。

如果你正在为你的生态系统使用 eBPF,我们建议你:

  • 使用LLVM Clang[5]将 C 编译成字节码。当 eBPF 首次出现时,需要手工编写和组装程序。然后,开发人员使用内核的汇编程序生成字节码。幸运的是,现在不再需要这样做了。Clang 提供了 C 语言的前端基础设施和工具。
  • 编写 BPF 程序时请使用 BCC 工具包。BPF Compiler Collection[6](BCC)是一个工具包,可以帮助你创建高效的内核追踪和操作程序。它特别适合于性能分析和网络流量控制相关的任务。

eBPF 的缺点

尽管 eBPF 功能强大,但它并不是适合每个项目或生态系统的灵丹妙药。eBPF 确实有一些明显的缺点,这可能会使它在某些实例中工作起来令人沮丧。一些开发人员可能会发现 eBPF 不适合使用,原因如下:

  • 它仅限于 Linux 和一个最新的内核。eBPF 是在 Linux 内核中开发的,并且是完全面向 Linux 内核的。这使得它比其他追踪器更难携带。此外,你需要一个相当新的内核。如果你运行的是比 v4.13 更老的版本,你将无法使用它。
  • 沙箱程序是有限的。eBPF 通过限制程序可以访问的资源来提高安全性。然而,通过限制程序可以访问的操作系统部分,功能也可能受到限制。

eBPF 的常用情况

eBPF 在云原生应用[7]中正迅速获得关注。因此,eBPF 最常用于两种情况:

  • 需要使用内核追踪实现可观察性。在这种情况下,eBPF 更快、更准确。这里不涉及上下文切换[8],而且 eBPF 程序是基于事件的,因此没有特定的触发器就不会运行任何程序——你不会错过任何事件。
  • 传统的安全监控不起作用。eBPF 在分布式和基于容器的环境中得到了广泛的应用,包括Kubernetes[9]。在这些环境中,eBPF 可以缩小可见性差距,因为它可以提供对 HTTP 通信的可见性。

你可能还会发现 eBPF 被部署用于其他安全措施,包括:

  • 防火墙
  • 设备驱动程序
  • 网络性能监控

New Relic 和 eBPF

Pixie[10](早前被 New Relic 收购了)是一个开源的 kubernetes-native-in-cluster 可观察平台,它提供了 Kubernetes 工作负载的即时可见性,无需手动检测。eBPF 提供了 Pixie 平台背后的大部分魔力。如前所述,eBPF 允许在触发事件时运行受限制的代码。这个事件可以是内核空间(kprobes)或用户空间(uprobes)中的函数调用。Pixie 同时使用 uprobes 和 kprobes 来支持跨服务和应用程序的可观察性。

Pixie 利用 eBPF 自动获取遥测数据,其边缘机制能将这些数据与 Kubernetes 元数据连接起来,在保持数据局部性的同时提供可见性。这种可见性补充了 New Relic 强大的 Kubernetes 可观测性解决方案。从 5 月底开始,你将能够将 Pixie 生成的遥测数据发送到 New Relic One,获得可扩展的留存率、强大的可视化、高级关联和智能警报功能。

eBPF 是有效的可观察性

eBPF 是一种新技术,它改进了 Linux 内核中的可观察性、联网和安全性。它消除了更改内核源代码或添加模块的需要,因此你可以创建更丰富的基础设施来支持你的系统,而不会使其过于复杂。

总结

我们了解了 eBPF 是什么,它是如何工作的,以及为什么它在分布式环境中如此有用。通过从内核层进行监控,许多与云中的可观测性相关的挑战都得到了解决。你可以在数据中享受更深入的可见性、更多的上下文和更准确的信息。

参考资料

  1. New Relic 的博客: https://newrelic.com/blog/best-practices/what-is-ebpf
  2. Extended BPF: https://www.kernel.org/doc/html/latest/bpf/index.html
  3. 不断增长: https://man7.org/linux/man-pages/man7/bpf-helpers.7.html
  4. 追踪: https://blog.pixielabs.ai/ebpf-function-tracing/post/
  5. LLVM Clang: https://clang.llvm.org/
  6. BPF Compiler Collection: https://github.com/iovisor/bcc
  7. 云原生应用: https://newrelic.com/solutions/cloud-native
  8. 上下文切换: https://www.quora.com/What-is-context-switching-in-Linux
  9. Kubernetes: https://kubernetes.io/blog/2017/12/using-ebpf-in-kubernetes/
  10. Pixie: http://pixielabs.ai/

本文转载自:「 CNCF 」,原文:https://tinyurl.com/ymz2kh4j ,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

本文分享自微信公众号 - 运维之美(Hi-Linux),作者:CNCF

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-06-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 大规模微服务利器:eBPF + Kubernetes 介绍

    本文翻译自 2020 年 Daniel Borkmann 在 KubeCon 的一篇分享: eBPF and Kubernetes: Little Helper...

    CNCF
  • 为容器时代设计的高级 eBPF 内核特性(FOSDEM, 2021)

    本文翻译自 2021 年 Daniel Borkmann 在 FOSDEM 的一篇分享:Advanced eBPF kernel features for th...

    米开朗基杨
  • GKE使用eBPF提高容器安全性和可视性

    Kubernetes 真正的超级功能之一是其开发者优先的网络模式,它提供了易于使用的功能,如 L3/L4 服务和 L7 入口,将流量引入集群,以及用于隔离多租户...

    CNCF
  • 绕过conntrack,使用eBPF增强 IPVS优化K8s网络性能

    作者范建明、洪志国、张浩,均为腾讯云容器产品中心高级工程师,负责容器网络和Service Mesh,容器Runtime,调度等相关研发工作。

    腾讯云原生
  • 最强 CNI 基准测试:Cilium 网络性能分析

    原文链接:https://cilium.io/blog/2021/05/11/cni-benchmark

    Jintao Zhang
  • K8S 生态周报| Google 选择 Cilium 作为 GKE 下一代数据面

    Google 声明[2]将选择 Cilium[3] 作为 GKE 网络的数据面 V2 以便增加其容器安全性和可观测性。

    Jintao Zhang
  • 拥抱云原生,基于 eBPF 技术实现 Serverless 节点访问 K8S Service

    2020 年 9 月,UCloud 上线了 Serverless 容器产品 Cube,它具备了虚拟机级别的安全隔离、轻量化的系统占用、秒级的启动速度,高度自动化...

    米开朗基杨
  • Linux超能力BPF技术介绍及学习分享(技术创作101训练营)

    近两年BPF技术跃然成为了一项热门技术,在刚刚结束的KubeCon 2020 Europe会议上有7个关于BPF的技术分享, 而在KubeCon 2020 Ch...

    nevermosby
  • 首届eBPF.io Summit 2020见闻

    第一次在Thomas的Twitter上看到要办eBPF技术大会的时候,兴奋不已,作为一个已经学习BPF技术大半年并且还在持续学习中的爱好者,就像粉丝看到偶像要办...

    nevermosby
  • 【云原生技术研究】Cilium网络概述

    Cilium[1]是一种开源网络实现方案,与其他网络方案不同的是,Cilium着重强调了其在网络安全上的优势,可以透明的对Kubernetes等容器管理平台上的...

    绿盟科技研究通讯
  • CNCF CTO对2021云原生最新趋势解读

    近日,CNCF发布了2020年云原生领域所有工作的年度总结[1],在疫情流行的形势下,我们仍然度过了坚实的一年,希望读者朋友们阅读该报告。

    CNCF
  • 腾讯云TKE-基于 Cilium 统一混合云容器网络(上)

    魏后民,腾讯云后台开发工程师,关注容器、Kubernetes、Cilium等开源社区,负责腾讯云 TKE 混合云容器网络等相关工作。 赵奇圆,腾讯云高级工程师...

    腾讯云原生
  • eBPF 在网易轻舟云原生的应用实践

    eBPF 是 Linux Kernel 3.15 中引入的全新设计,将原先的 BPF 发展成一个指令集更复杂、应用范围更广的“内核虚拟机”。

    深度学习与Python
  • 开工必备!50+篇超实用云原生技术干货合集

    kai 开 gong 工 da 大 ji 吉 新年新气象,更要1G棒 2020年没写完的代码,现在还有思路吗? 2021年开始使用云原生技术了吗? 一开工就遇...

    腾讯云原生
  • QPS 最高提升 91% | 腾讯云 TKE 基于 Cilium eBPF 提升 k8s Service 性能

    朱瑜坚,腾讯云后台工程师,主要负责腾讯云 TKE 容器网络的构建和相关网络组件的设计、开发和维护工作。 张浩,腾讯云高级工程师,主要负责容器网络多个组件的开发...

    腾讯云原生
  • eBPF技术简介

    “eBPF 是我见过的 Linux 中最神奇的技术,没有之一,已成为 Linux 内核中顶级子模块,从 tcpdump 中用作网络包过滤的经典 cbpf,到成为...

    CNCF
  • 转发有礼 | 50篇+云原生系列干货文章汇总,请查收!

    云原生技术干货文章合集,来咯~ ? 2020 年,要说咱们技术圈子里什么最火? 云原生肯定是那 NO.1 ? 截止目前,我们不难看出,K8s 容器、服务...

    腾讯云原生
  • 基于eBPF的微服务网络安全(Cilium 1)

    翻译自:Network security for microservices with eBPF

    charlieroro
  • 被 Google 选择的下一代数据面 Cilium 是什么 - 上手实践

    在我之前的文章 K8S 生态周报| Google 选择 Cilium 作为 GKE 下一代数据面[1] 一文中,我介绍了 Google 宣布使用 Cilium ...

    Jintao Zhang

扫码关注云+社区

领取腾讯云代金券