현재, 내가 만든 Kubernetes 클러스터의 한 워커에서 140개의 eBPF 프로그램이 리눅스 커널 안에서 실행 중입니다 — 모든 패킷을 라우팅하고, 장치 접근을 제어하며, 메트릭을 수집합니다. 커널을 재컴파일한 사람은 없습니다. 모듈을 로드한 사람도 없습니다.
그 문장이 바로 내가 eBPF From Scratch을 쓴 전체 이유입니다: 무료의, 22장 시리즈로, 당신을"eBPF 가상 머신이란 무엇인가요" 모든 것을자신의 eBPF 프로그램을 작성하고 로드하는 것까지 — C 언어로 libbpf + CO-RE와 함께, 그리고 Go로 cilium/ebpf와 함께.
👉 무료로 읽으세요 (영어): https://kkloudtarus.net/en/blog/series/ebpf-from-scratch
💻 소스 코드: https://github.com/nghiadaulau/ebpf-from-scratch
무엇이 그것을 다르게 만듭니다
- 모든 것이 실제 하드웨어에서 테스트됩니다 — kernel 6.17과 Cilium 1.19 (kube-proxy 없음, 수백 개의 BPF 프로그램이 살아있음)을 실행하는 Kubernetes 클러스터는 전체 연구실입니다. 어지러운 다이어그램은 없습니다; 실제로 실행 중인 프로그램을 분석합니다.
- 공식 문서에 근거합니다 — ebpf.io, kernel.org, libbpf, cilium. 주장은 검증되지만, 감성이 아닙니다.
- 심층 분석이 아닌 표면적인 것 — 우리는 레지스터까지 내려가며, 검증기의 안전 증명, JIT, 맵, 그리고 프로그램이 거치는 정확한 생애주기에 대해 다룹니다.
- 또한 완전히 이중 언어(영어 + 베트남어)입니다.
빠른 맛보기 — 모든 eBPF 개념은 당신이 보실 수 있는 것입니다는 실제 노드에서:
sudo bpftool prog show id 2871
2871: sched_cls name tail_no_service_ipv4 tag fe7bcb57c001d434 gpl
xlated 4920B jited 2778B memlock 8192B map_ids 171,631
btf_id 758
xlated = 검증기가 수락한 후의 바이트코드. jited = 네이티브 머신 코드. map_ids = 그는 어떻게 상태를 유지하는지. 그것은 eBPF이고 슬라이드에 없음 — 실행 중.
배울 내용 (7 부분, 22 장)
제1부 — 기초
- eBPF 가상 머신: 레지스터, 명령어 세트, 바이트코드
- 검증기: 왜 eBPF가 커널을 멈추지 않는가
- 맵: 메모리와 유저스페이스로의 다리
- 프로그램 유형과 훅: 어디에 연결하고, 무엇을 볼 수 있는가
- BTF와 CO-RE: 한 번 컴파일하고 모든 커널에서 실행
제2부 — 추적
- bpftrace 한 줄로부터 맵, 카운팅 및 히스토그램으로
- uprobe, USDT, 그리고 호스트에서 파드 검사로
Part III — 실제 도구 작성
- libbpf + CO-RE: C로 eBPF 도구 직접 작성하기
- cilium/ebpf: Go에서 eBPF 로드하기
Part IV — 네트워킹
- XDP: 가장 일찍 패킷 처리하기 — 방화벽 작성
- tc/sched_cls와 실시간 Cilium 데이터패스 분석
- tc 프로그램을 직접 작성하는 방법:
__sk_buff와 tcx 체인
제 5 부 — 보안
- LSM BPF: 커널 내에서 보안을 강제 적용
- seccomp-bpf: 모든 컨테이너에서 시스템 콜 필터링
- Tetragon 방식:
bpf_send_signal
를 통해 관찰에서 강제 적용__JHSNS_SEG_b7f9df4b_60__제 6 부 — 관찰 가능성
- perf_event를 이용한 CPU 프로파일링 (파이롤 그래프의 기초)
- CPU 외부 작업 및 스케줄러 지연
- Hubble 내부: eBPF 이벤트에서 클러스터 전체 네트워크 흐름까지
VII 부분 — 모두 합치기
- 사례 연구: Cilium의 eBPF 데이터 경로를 통과하는 패킷
- 결론:
connmon작성, 노드 전체 TCP 연결 모니터
누구에게 적합한가요
백엔드 / 플랫폼 / SRE / 보안 전문가들이 "Cilium이 eBPF로 그것을 한다"는 말을 계속 듣고 실제로 이해하고 싶으며 — 그리고 작성하고 싶은 경우. Linux 명령줄에서 편안하게 작업할 수 있어야 합니다; 나머지 모든 것은 0부터 구축됩니다.
이 중 하나를 읽었다면, 진심으로 피드백을 원합니다 — 무엇이 명확했고, 무엇이 아니었는지. 그리고 유용하다면, ⭐를repo는 많은 도움이 됩니다.
여기서 시작하세요→ https://kkloudtarus.net/en/blog/series/ebpf-from-scratch












