2.2.1通过Golang+eBPF实现无侵入应用可观测observability, tracing, and security. • 稳定 • 高性能 • 安全(内核verifier机制) • 动态可编程(无需重启) eBPF程序加载和校验 02. eBPF程序加载和校验 eBPF事件驱动 Kprobe/Kretprobe Uprobe/Uretprobe XDP Tracepoint Perf 01. eBPF事件驱动 eBPF在云原生场景下的应用 io/latest/zh/blog/2022/merbridge/ eBPF 的可编程能力使其能够内核中完成包的处理和转发,而且可以添加额外扩展能力。 观测和跟踪 将 eBPF 程序附加到跟踪点以及内核和用户应用探针点的能力,使得应用程序和系统本身的 运行时行为具有前所未有的可见性 From:https://juejin.cn/post/7280746515525156918 安全 看到和理解所有系 编译过程中资源用量大,对Cpu、Mem有要求 依赖内核的头包 bpf 程序跟其他的用户空间的程序没有太大区别 编译成二进制文件,可以适应不同运行环境 libbpf 扮演bpf程序装载机角色 开发人员只需要关注bpf程序的正确性和性能,不 需要关注其他依赖关系 通过Golang加载eBPF程序 01. 副标题 func loadSync() error { //0 码力 | 29 页 | 3.83 MB | 1 年前3
Cilium的网络加速秘诀eBPF 程序编程,编译 后,动态加载到内核指定的 hook 点上,以 VM 方式安全运行,其能过通过 map 存储结 构存储数据,能通过 map 同用户态程序交互, 最终实现内核数据进行修改,或者影响内核处 理请求的结果,或者改变内核处理请求的流程。 极大提升了内核处理事件的效率。 截止 linux 5.14 版本,eBPF 有32种类型程序。而 cilium 主要使用了如下类型程序: • sched_cls cgroup 中实现对service解析 • sock_ops + sk_msg。记录本地应用之间通信的socket,实现本地数据包的加速转发 加速同节点pod间通信 cilium 使用 eBPF 程序,借助 bpf_redirect() 或 bpf_redirect_peer() 等 helper 函数,快速帮助同宿主机间 的流量转发,节省了大量的内核协议栈 处理流程 pod 1 process cgroup ebpf service DNAT connect sendmsg recvmsg getpeername bind cilium的Host-Reachable 技术,利 用eBPF程序,拦截应用在内核connect 、 sendmsg、 recvmsg 、getpeername 、 bind等系统调用,实现 service 的地址解 析,并且伪装通信目的地址,让上层应用 无感知 DNAT0 码力 | 14 页 | 11.97 MB | 1 年前3
共 2 条
- 1













