eBPF 在云原生环境中的应用

端午假期,我翻译了 O'Reilly 的报告《什么是 eBPF》,其中我觉得第五章「云原生环境中的 eBPF」解答了我心中的很多疑惑,比较不错,分享给大家。下面是第五章译文。

4d0049c5c448d876ee36038f99f71a85.png

《什么是 eBPF》中文版封面

近年来,云原生应用已呈指数级增长。在本章中,我将讨论为什么 eBPF 如此适合于云原生环境。为了更具象化,我将提到 Kubernetes,但同样适用于任何容器平台。

每台主机一个内核

要理解为什么 eBPF 在云原生世界中如此强大,你需要搞清楚一个概念:每台机器(或虚拟机)只有一个内核,所有运行在该机器上的容器都共享同一个内核 1 如 图 5-1 所示,内核了解主机上运行的所有应用代码。

43584d2a0efde9a0ca9073ae0efc19ca.png
图 5-1. 同一主机上的所有容器共享一个内核

通过对内核的检测,就像我们在使用 eBPF 时做的那样,我们可以同时检测在该机器上运行的所有应用程序代码。当我们将 eBPF 程序加载到内核并将其附加到事件上时,它就会被触发,而不考虑哪个进程与该事件有关。

eBPF 与 sidecar 模式的比较

在 eBPF 之前,Kubernetes 的可观测性和安全工具大多都采用了 sidecar 模式。这种模式允许你在与应用程序相同的 pod 中,单独部署一个工具容器。这种模式的发明是一个进步,因为这意味着不再需要直接在应用程序中编写工具代码。仅仅通过部署 sidecar,工具就获得了同一 pod 中的其他容器的可见性。注入 sidecar 的过程通常是自动化的,所以这提供了一种机制,以确保你的所有应用程序都被仪器化。

每个 sidecar 容器都会消耗资源,而这要乘以注入了 sidecar 的 pod 的数量。这可能是非常重要的 —— 例如,如果每个 sidecar 需要它自己的路由信息副本,或策略规则,这就是浪费(关于这一点,Thomas Graf 写了一篇 关于服务网格 sidecar 与 eBPF 的比较)。

Sidecar 的另一个问题是,你不能保证机器上的每一个应用程序都被正确检测。设想下有一个攻击者设法破坏了你的一台主机,并启动了一个单独的 pod 来运行,比如,加密货币挖矿程序。他们不可能对你有礼貌,用你的 sidecar 可观测或安全工具来检测他们的挖矿 pod。你需要一个单独的系统来了解这种活动。

但同样的加密货币矿工与运行在该主机上的合法 pod 共享内核。如果你使用基于 eBPF 的工具,如 图 5-2 所示,矿工会自动受到它的影响。

f5590df0c254a9c4b32cdbdee331cbc3.png
图 5-2. 旁观者只能观测到他们自己 pod 的活动,但 eBPF 程序可以观测到所有活动

eBPF 和进程隔离

我主张将功能整合到一个单一的、基于 eBPF 的代理中,而不是每个 pod 的 sidecar 中。如果该代理可以访问机器上运行的所有 pod,这不是一种安全风险吗?我们不是失去了应用程序之间的隔离,而这种隔离可以防止它们相互干扰吗?

作为一个容器安全领域的过来人,我可以体会到你对此的担忧,但重要的是要挖掘底层机制,以真正理解为什么它不是一开始可能出现的缺陷。

请注意,这些 pod 共享同一个内核,而内核原生不能感知 pod 或容器。相反,内核对进程进行操作,并使用 cgroup 和 namespace 来隔离进程。这些结构由内核监管,以隔离用户空间中的进程,防止它们互相干扰。只要数据在内核中处理(例如,从磁盘中读取或发送到网络中),你就依赖于内核的正确行为。只有内核代码控制文件权限。没有其他层面的东西可以阻止内核忽略文件权限的东西,内核可以从任何文件中读取数据 —— 只是内核本身不会这样做。

存在于 Linux 系统中的安全控制措施假定内核本身是可以信任的。它们的存在是为了防止在用户空间运行的代码产生不良行为。

我们在 第二章 中看到,eBPF 检查器确保 eBPF 程序只能访问它有权限的内存。检查器检查程序时不可能超出其职权范围,包括确保内存为当前进程所拥有或为当前网络包的一部分。这意味着 eBPF 代码比它周围的内核代码受到更严格的控制,内核代码不需要通过任何类型的检查器。

如果攻击者逃脱了容器化的应用程序而到了节点上,而且还能够提升权限,那么该攻击者就可以危害到同一节点上的其他应用程序。由于这些逃逸是未知的,作为一个容器安全专家,我不建议在没有额外安全工具的情况下,在共享机器上与不受信任的应用程序或用户一起运行敏感的应用程序。对于高度敏感的数据,你甚至可能不希望在虚拟机中与不受信任的用户在同一裸机上运行。但是,如果你准备在同一台虚拟机上并行运行应用程序(这在许多不是特别敏感的应用程序中是完全合理的),那么 eBPF 就不会在共享内核已经存在的风险之上增加额外的风险。

当然,恶意的 eBPF 程序可能造成各种破坏,当然也很容易写出劣迹的 eBPF 代码 —— 例如,复制每个网络数据包并将其发送给窃听者。默认情况下,非 root 用户没有加载 eBPF 程序 2 的权限, 只有当你真正信任他们时,你才应该授予用户或软件系统这种权限,就像 root 权限一样。因此,必须小心你所运行的代码的出处(有一个倡议正在进行中,以支持 eBPF 程序的签名检查来帮助解决这个问题)。你也可以使用 eBPF 程序来监视其他的 eBPF 程序!现在你已经对为什么 eBPF 是云原生工具的强大基础有了一个概念,下一章给你举一些来自云原生生态系统中的 eBPF 工具的具体例子。

参考


  1. 1. 这基本正确,除非你使用的是虚拟化技术,像 KataContainer、Firecracker 或 unikernels 这样的方法,每个 “容器” 在自己的虚拟机中运行。 ↩︎

  2. 2. Linux CAP_BPF 授予加载 BPF 程序的权限。 ↩︎

  1. 点击阅读原文跳转到网页阅读本书。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用HtmlAgilityPack抓取网页数据

XPath路径表达式,主要是对XML文档中的节点进行搜索,通过XPath表达式可以对XML文档中的节点位置进行快速定位和访问,html也是也是一种类似于xml的标记语言,但是语法没有那么严谨,在codeplex里有一个开源项目HtmlAgility…

C语言试题六之使字符串的前导*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做。字符串中间和尾部的*号不删除。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写函数…

QT坑爹的事..

昨晚用QT写了个网络小程序,布局怎么都出不来add->widge()无效,原来因为在QMainWindow的基类下 需要人工添加一个 widge new QWidge() this->setCentralWidget(widget);最后在 widget->setLayout(mainLayout);才行 dialog和widge的基类 则没有任…

企业有了程序员为什么还要用 低代码/无代码

一、备受“争议”的无代码/低代码开发 在看这篇内容时,我们要知道,技术无时无刻不在进行发展,IT技术更是如此,快速的技术更新使得程序员在进行应用开发时效率更高;我记得在十多年前,开发一个普通的 HTML 页…

【三维激光扫描技术】原理、方法及实验图文教程目录

《三维激光扫描技术》专栏讲述目前最先进、最流行的三维激光技术,包括三维激光扫描技术原理,三维测距原理,国内外三维扫描设备,点云特点,三维建模,三维激光优势、应用领域,应用技术案例等。 文章…

std::thread 不 join

std::thread 构造之后 使用 detach。就可以了

求最长回文串

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 转载于:https://www.cnblogs.com/yangscode/p/5017527.html

C语言试题七之将函数字符串中的前导*号全部删除,中间和尾部的*号不删除。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 规定输入字…

Dapr 1.7 之 Unix Domain socket 他来了

Unix Domain socketA UNIX socket is an inter-process communication mechanism that allows bidirectional data exchange between processes running on the same machine.Unix Domain Socket(后面统一简称 UDS)是在socket的框架上发展出一种IPC&…

实训三(cocos2dx 3.x 打包apk)

上一篇文章《实训二(cocos2dx 2.x 打包apk)》简单的讲述的利用cocos2dx 2.x引擎在windows平台上打包apk的方法与过程,本文将介绍3.x版本引擎,如何打包apk的问题。 首先,Cygwin在3.x版本引擎上已经用不到了,…

学习SQL数据查询,这一篇就够了!

【任务概述】 建立数据库的目的主要是为了对数据库进行操作,以便能够从中提取有用的信息,而数据查询则是数据库操作的核心。 扩展阅读:《学习SQL数据更新,这一篇就够了!》 文章目录 一、SQL简单查询1. Select查询语句2. 无条件查询3. 单条件查询4. 多条件查询5. 分组查询6…

网页精美动效/动画制作 按钮鼠标悬浮动效基础 01《炫彩网页 iVX 无代码动效/动画制作》

编辑器地址:https://editor.ivx.cn/ 一、准备工作 进入编辑页后,选择其中一种应用类型创建应用,在此以相对应用作为示例: 创建好应用后在此选择对应的屏幕作为示例演示,在此选择电脑屏幕作为对应的大小&#xff1a…

Java并发编程 - Executor,Executors,ExecutorService, CompletionServie,Future,Callable

一、Exectuor框架简介 Java从1.5版本开始,为简化多线程并发编程,引入全新的并发编程包:java.util.concurrent及其并发编程框架(Executor框架)。 Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类&a…

C语言试题八之计算下列级数和,和值由函数值返回 S=1+x+x^2/2! + x^3/3!+…x^n/n!

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 计算下列级…

with管理文件操作

为了避免打开文件后忘记关闭,可以通过管理上下文,即: with open(log,r) as f: f.write(xxxxxx)f.readlines()...................如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。以往我们打开…

学习SQL数据更新,这一篇就够了!

【任务描述】 数据查询不能改变数据库中的数据,仅仅是把数据库中符号条件的某些信息反馈给用户。一个数据库若要保持数据的正确性、及时性、则要依赖于数据库的更新功能。数据更新主要包括插入数据、修改数据和删除数据。 扩展阅读:《学习SQL数据查询,这一篇就够了!》 文章…

网页精美动效/动画制作 按钮鼠标悬浮动效的注意点 02《炫彩网页 iVX 无代码动效/动画制作》

一、按钮动效的使用 在上一节中,我们创建了一个动效,但是并没有使用,在此我们给按钮设置一个悬浮事件,当鼠标悬浮在按钮之上后就调用该动效,点击按钮添加事件: 点击按钮添加事件后将会出现一个事件编辑框…

WPF 实现带明细的环形图表

本文经原作者授权以原创方式二次分享,欢迎转载、分享。原文作者:普通的地球人原文地址:https://www.cnblogs.com/tsliwei/p/7155616.htmlGithub地址:https://github.com/WPFDevelopersOrg/WPFDevelopers.Charts大体思路图表使用Ar…

SQL Server 2008 R2 安装时提示“Reporting Services目录数据库文件存在”

打开MSSQL数据库管理系统的安装目录,例如: X:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA。 其中 X:\是你安装MS SQL数据库管理系统实例所在的盘符. 删除 X:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DA…

C语言试题九之s=(ln(1)+ln(2)+ln(3)+…+ln(m))^0.5,s作为函数值返回

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、 题目 计算:s=…