《云原生网络数据面可观测性最佳实践》—— 一、容器网络内核原理——4.eBPF技术

简介: 《云原生网络数据面可观测性最佳实践》—— 一、容器网络内核原理——4.eBPF技术

eBPF是Linux内核提供可以在不借助内核模块的场景下,对内核进行观测,注入来实现高阶功能的机制。

 

eBPF技术作为内核当前最为突破性的技术,具有轻量级,无侵入的特性,在排查网络问题上可以提供很多帮助,在当前的eBPF生态中,bpftrace和bcc都提供了很多出色的功能协助我们进行观测,本章节会简单介绍eBPF的实现原理以及eBPF在云原生场景下的应用的简单介绍。

 

eBPF能够在实现接近内核模块的功能的基础上,具备上述的有点,得益于内核为eBPF提供的多个改变:

 

提供了高效jit,eBPF代码在内核中会被编译为机器码从而向真正内核代码一样被执行

bpf()系统调用和map机制以及bpf helper辅助函数提供,让内核操作更加便捷

内核在高频通用代码中提供了安全注入点,让eBPF程序只需要关注于代码逻辑

 

下图是eBPF程序的生命流程概述。

 image.png

 

对于一个eBPF程序来说,他的完整的生命流程包括:

 

使用eBPF兼容C语言子集进行代码开发,然后通过clang进行编译

通过各种开发框架进行初步检查,然后通过bpf()系统调用进行加载,在这个过程中会完成map创建和替换以及符号重定位

加载到内核过程中,内核verifier会对程序进行校验,如果通过了校验,则可以被JIT编译为字节码然后被添加到指定位置

当内核代码执行到某个位置,内核会自动执行已经完成加载和attacheBPF程序,例如socket读取和写入会触发sockops这个执行点eBPF程序执行,完成流量统计或者劫持动作

 

eBPF在在安全,网络和可观测行上都有很广泛的应用,也诞生了许多影响力较大的开源项目。

 image.png

 

Linux内核为提升可观测性而提供了多个可执行的点,我们常用的包括:

kprobe,kretprobe,fentry,fexit 通过执行到某个函数是,触发INT3中断,使得eBPF程序可以在进程现场状态下观测到信息

tracepoint 内核debugfs子系统提供可供执行点,内核在固定tracepoint会执行注册eBPF程序

 

我们可以通过一些开源的项目很快体验到eBPF的价值,例如通过bpftrace,我们能够很快看到所有经过内核的数据报文在netfilter中的返回值:

bpftrace -e 'kretprobe:nf_hook_slow {printf("%d %s\n",retval,comm)}'

 

此外,eBPF在容器网络中也扮演着越来越关键的角色,包括cilium,terway,calico等多个知名的网络插件都开始使用eBPF来取代传统的netfilter框架等机制的作用,达到更加高效的抽象。

相关文章
|
1月前
|
监控 安全 Cloud Native
阿里云容器服务&云安全中心团队荣获信通院“云原生安全标杆案例”奖
2024年12月24日,阿里云容器服务团队与云安全中心团队获得中国信息通信研究院「云原生安全标杆案例」奖。
|
2月前
|
存储 人工智能 调度
容器服务:智算时代云原生操作系统及月之暗面Kimi、深势科技实践分享
容器技术已经发展成为云计算操作系统的关键组成部分,向下高效调度多样化异构算力,向上提供统一编程接口,支持多样化工作负载。阿里云容器服务在2024年巴黎奥运会中提供了稳定高效的云上支持,实现了子弹时间特效等创新应用。此外,容器技术还带来了弹性、普惠的计算能力升级,如每分钟创建1万Pod和秒级CPU资源热变配,以及针对大数据与AI应用的弹性临时盘和跨可用区云盘等高性能存储解决方案。智能运维方面,推出了即时弹性节点池、智能应用弹性策略和可信赖集群托管运维等功能,进一步简化了集群管理和优化了资源利用率。
|
2月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
177 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
2月前
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
2月前
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
本文基于2024云栖大会演讲,探讨了软件供应链攻击的快速增长趋势及对企业安全的挑战。文中介绍了如何利用阿里云容器服务ACK、ACR和ASM构建云原生软件供应链安全,涵盖容器镜像的可信生产、管理和分发,以及服务网格ASM实现应用无感的零信任安全,确保企业在软件开发和部署过程中的安全性。
|
2月前
|
人工智能 Kubernetes Cloud Native
阿里云容器服务,智算时代云原生操作系统
2024云栖大会,阿里巴巴研究员易立分享了阿里云容器服务的最新进展。容器技术已成为云原生操作系统的基石,支持多样化的应用场景,如自动驾驶、AI训练等。阿里云容器服务覆盖公共云、边缘云、IDC,提供统一的基础设施,助力客户实现数字化转型和技术创新。今年,阿里云在弹性计算、网络优化、存储解决方案等方面进行了多项重要升级,进一步提升了性能和可靠性。
|
2月前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
2月前
|
Kubernetes Cloud Native Docker
云原生之旅:从容器化到微服务
本文将带领读者踏上云原生的旅程,深入探讨容器化和微服务架构的概念、优势以及它们如何共同推动现代软件的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务应用,并解释相关的配置和操作。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供有价值的见解和实操指南。
|
3月前
|
Kubernetes Cloud Native 开发者
云原生入门:从容器到微服务
本文将带你走进云原生的世界,从容器技术开始,逐步深入到微服务架构。我们将通过实际代码示例,展示如何利用云原生技术构建和部署应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和启示。
|
3月前
|
Kubernetes Cloud Native 云计算
云原生入门:Kubernetes 和容器化基础
在这篇文章中,我们将一起揭开云原生技术的神秘面纱。通过简单易懂的语言,我们将探索如何利用Kubernetes和容器化技术简化应用的部署和管理。无论你是初学者还是有一定经验的开发者,本文都将为你提供一条清晰的道路,帮助你理解和运用这些强大的工具。让我们从基础开始,逐步深入了解,最终能够自信地使用这些技术来优化我们的工作流程。

热门文章

最新文章