📖
Blog
  • 👋Welcome!
  • 👾Golang
    • Golang编程模式:错误处理
  • 🛳️K8S
    • 源码分析:kubelet启动流程
    • 源码分析:kubelet PLEG实现分析
    • 源码分析:kubelet syncLoop实现分析
    • 源码分析:crane主要组件及优秀代码总结
    • 源码分析:Cilium Network Policy实现
    • k8s实践:Cilium集群下线节点导致其它节点容器网络不通
    • k8s实践:Cilium集群IPAM实现
    • k8s实践:扩展 Kubernetes 调度器(一)
    • k8s实践:扩展 Kubernetes 调度器(二)
    • k8s实践:快速开发自己的 K8S Adminssion Webhook
    • k8s实践:使用 kwok 本地调试 kube-scheduler WebAssembly 插件及踩坑指南
    • k8s实践:karmada证书过期手动更新步骤
  • 🐝 eBPF
    • eBPF入门系列:学习资料及概念
    • eBPF入门系列:工具及重点项目
    • eBPF入门系列:Cilium ebpf本地开发环境配置
    • eBPF入门系列:实现快速响应Ping包
    • [译] tcpdump在内核中的工作原理
  • 🎢LIFE
    • 中级项目集成管理知识点
    • 中级软件设计师知识点
Powered by GitBook
On this page
  • 一、环境搭建与 ebpf 示例代码调试
  • 二、创建自己的 eBPF 项目
  1. eBPF

eBPF入门系列:Cilium ebpf本地开发环境配置

一、环境搭建与 ebpf 示例代码调试

本地环境

  • Golang 1.20.8

  • Ubuntu 22.04 (5.15.0-84-generic)

1、安装依赖

# llvm版本不低于11
$ apt install clang llvm

2、配置环境变量

$ export BPF_CLANG=clang

3、将 Cilium ebpf 项目克隆到本地

$ git clone https://github.com/cilium/ebpf.git

4、测试

进入 examples/kprobe 目录,删除已经生成的大小端文件

$ cd examples/kprobe
$ rm bpf_bpf*

执行 go generate 生成大小端依赖文件

执行 go build 生成二进制文件,执行二进制文件:

$ sudo ./kprobe
2023/11/16 06:06:04 Waiting for events..
2023/11/16 06:06:05 sys_execve called 0 times
2023/11/16 06:06:06 sys_execve called 0 times
2023/11/16 06:06:07 sys_execve called 0 times
2023/11/16 06:06:08 sys_execve called 0 times

打印的结果为执行 sys_execve 的次数,若正确输出则说明环境搭建成功。

二、创建自己的 eBPF 项目

建立自己项目文件夹并进入

$ mkdir YOUR_PATH && cd YOUR_PATH

将 cilium/ebpf 项目 examples 目录相关文件复制过来

$ cd CILIUM_EBPF_PATH/examples   # 替换为自己的Cilium eBPF路径
$ cp -r headers/ YOUR_PATH       # 头文件目录
$ cp kprobe/main.go YOUR_PATH    # Go主程序
$ cp kprobe/kprobe.c YOUR_PATH   # eBPF C程序

初始化 go 项目

$ go mod init ebpf-test && go mod tidy

生成 eBPF C 程序对应的 go 数据结构,每次 C 程序有更新时需要重新执行。go generate 执行有报错时优先检查 C 程序头文件路径是否正确

$ go generate
Compiled /home/mars/devSpace/ebpf/bpf_bpfel.o
Stripped /home/mars/devSpace/ebpf/bpf_bpfel.o
Wrote /home/mars/devSpace/ebpf/bpf_bpfel.go
Compiled /home/mars/devSpace/ebpf/bpf_bpfeb.o
Stripped /home/mars/tmp/devSpace/ebpf/bpf_bpfeb.o
Wrote /home/mars/devSpace/ebpf/bpf_bpfeb.go

go build 执行完成则证明配置成功。

参考

PreviouseBPF入门系列:工具及重点项目NexteBPF入门系列:实现快速响应Ping包

Last updated 1 year ago

🐝
Cilium-eBPF-搭建与使用
Getting Started with eBPF in Go