eBPF(Extended Berkeley Packet Filter)
eBPF는 커널에서 애플리케이션을 효율적으로 관찰하며, 성능 및 보안 문제를 해결합니다.
개요
현대적이고 복잡한 애플리케이션을 관찰하는 경우 효율적으로 효과적으로 사용되는 방식으로, Kubernetes overlay network로 활용되는 Cilium 등에서 사용되는 eBPF의 개념에 대해 정리하였습니다.
eBPF
eBPF란?
eBPF(Extended Berkeley Packet Filter)는 커널 공간에서 애플리케이션을 관찰하는데 필요한 데이터를 수집하는 역할을 합니다. Linux 커널 소스 코드에 포함된 기술로 시스템 호출을 통해 네트워크 데이터, 애플리케이션 프로세스, 시스템 리소스 사용에 대한 정보를 효율적으로 수집할 수 있습니다.
이 기술의 가장 큰 특징은 커널 소스 코드를 직접 수정하거나 추가 모듈을 로드할 필요 없이, 프로그래밍 방식으로 커널 내 지점에서 커스텀 프로그램을 실행할 수 있다는 점입니다. OS 커널 공간에서 직접 실행되기 때문에 매우 효율적인 성능을 제공하며, 커널 내 메모리 공간에서 격리된 샌드박스 환경에서의 실행을 통해 보안 위험을 최소화합니다. 또한 커널 소스 코드에 내장되기 때문에 Linux 소스 코드를 직접 수정할 필요도 없으며 단지 eBPF와 상호 작용하기 위한 몇 가지 도구만 설치하면 됩니다.
동작 방식

전통적인 네트워크 통신 방식에서 리눅스 커널은 User-Space networking이라는 공간에서 컨테이너 네트워킹 같은 가상 네트워크 기능을 동작시켰습니다. 하지만 eBPF를 통해 오버헤드를 줄이고 eBPF 프로그램들이 각 레이어에 직접 후킹되어 동작하므로 더 효율적인 처리를 가능하게 하였습니다.
eBPF 사용 사례
일반적으로 사용되는 3가지 사례가 존재합니다.
1. 네트워킹
앞서 살펴본 동작 방식을 통해 iptables 로그에 의존하지 않고도 L3, L4과 L7까지 네트워크 트래픽을 모니터링하며 데이터를 수집할 수 있습니다. 이를 통해 애플리케이션의 성능이나 보안에 영향을 줄 수 있는 네트워크 이상을 식별할 수 있으며 네트워크 트래픽 모니터링을 통해 DDoS 같은 공격의 보안 위협에 대한 설정이 가능합니다.
특히 k8s의 통신에서 네트워크 트래픽 모니터링은 복잡한 관계를 파악하는 것과 성능 문제의 근원을 정확히 파악하기 위해 사용할 수 있으며 모든 노드의 파드에서 실행하는 애플리케이션 리소스 레벨까지 모니터링 가능하여 효율적으로 구성할 수 있습니다.
2. 보안
eBPF observability를 활용하여 보안 침해 신호를 감지하거나 네트워크 레벨의 이벤트 자체를 감지할 수 있으며 해당 네트워크의 연결을 평가할 수 있습니다.
3. 관찰 가능성(Observability)
eBPF 관찰 가능성은 기본적으로 후크 개념을 사용합니다.
eBPF 프로그램은 이벤트 중심으로 특정 이벤트가 발생할 때마다 트리거 되며 함수 호출이 이루어질 때마다 관찰 목적으로 일부 데이터를 캡쳐할 수 있으며 후크를 커널, User Space 혹은 둘 다 배치하여 이벤트를 모두 모니터링하며 마이크로서비스에서 리소스 병목 현상을 식별하는데 도움을 줄 수 있습니다.
이벤트 또한 동적으로 삽입하여 시스템 재시작 없이 실행할 수 있다는 것이 장점입니다.

- 커널 추적점 - 커널 개발자가 미리 정의한 이벤트에 연결하는 데 사용됩니다(TRACE_EVENT 매크로 사용).
- USDT - 개발자가 애플리케이션 코드에서 설정한 사전 정의된 추적점에 연결하는 데 사용됩니다.
- Kprobes (커널 프로브) - 런타임 시 커널 코드의 일부에 동적으로 연결하는 데 사용됩니다.
- Uprobes (사용자 프로브) - 런타임 시 사용자 공간 애플리케이션의 모든 부분에 동적으로 연결하는 데 사용됩니다.
uprobes를 사용하면 런타임에 애플리케이션의 코드를 수정하지 않고도 애플리케이션 내의 특정 기능에 연결할 수 있습니다. 함수가 실행될 때마다 eBPF 프로그램이 트리거되어 필요한 데이터를 캡처할 수 있습니다. 이를 통해 라이브 디버깅과 같은 흥미로운 가능성이 가능해졌습니다.
이러한 기능 자체를 eBPF를 사용하면 매우 적은 오버헤드로도 대용량 네트워크 이벤트와 패킷을 처리할 수 있게 됩니다.
eBPF와 기존 모니터링 방법론 대한 비교
모니터링을 위한 구조는 다양한 방식이 존재하며 각 방식의 장단점이 존재합니다.

eBPF의 경우 기존 모니터링 방식 대비 뛰어난 장점이 존재합니다.
eBPF observability Tool & Framework
- BCC: eBPF 프로그램 실행용 툴킷/라이브러리
- Bpftrace: eBPF 추적 전용 언어
- eCapture: SSL 패킷 캡처 도구
- Tracee: 보안 모니터링용 eBPF 툴킷
- Kubectl trace: k8s용 eBPF 프로그램 관리 도구
Reference
- https://hackernoon.com/lang/ko/ebpf%EA%B0%80-%EC%9A%B0%EB%A6%AC%EA%B0%80-%EC%95%8C%EA%B3%A0-%EC%9E%88%EB%8A%94-%EA%B4%80%EC%B8%A1-%EA%B0%80%EB%8A%A5%EC%84%B1%EC%9D%84-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%B3%80%ED%99%94%EC%8B%9C%ED%82%A4%EB%8A%94%EA%B0%80
- https://kim-dragon.tistory.com/274
- https://www.groundcover.com/ebpf/ebpf-observability
- https://www.groundcover.com/ebpf/ebpf-tracing
- https://www.groundcover.com/ebpf/opentelemetry-ebpf