BPF/eBPF 소개
7주차의 주제는 Cilium(Cilium은 eBPF (Berkeley Packet Filter)를 기반으로 Pod Network 환경을 제공하는 CNI Plugin 입니다)입니다. 저에게는 어려운 주제였으며, 사실.. 이해를 못하였습니다. 다만, bpf/ebpf에 대해서는 자세하게 설명 해주셔서 이해가 가능했습니다. 자료는 KANG에서 제공되는 내용을 정리 하였습니다.
Linux Network Stack : 리눅스 네트워크 스택의 단점은 복잡하고, 변경에 시간이 걸리고, 레이어를 건너뛰기 어렵습니다.
IPtables 단점
IPTables/Netfilter 방식과 eBPF 방식 비교를 잘 설명한 포스팅입니다.
BPF (Berkeley Packet Filter) kernel hooks : BPF 는 커널에 삽입하여 패킷을 통제(필터링) 할 수 있으며, 다양한 영역에서 Hook 을 통해서 접근 할 수 있습니다.
extended Berkeley Packet Filter - 링크
- BPF(1992년) 를 확장해서 eBPF가 (2014년, Alexei Starovoitov) 가 나왔고, eBPF 를 다양한 영역 (보안, 추적, 네트워킹, 모니터링)에서 활용하기 시작하였습니다.
- eBPF is a revolutionary technology that can run sandboxed programs in the Linux kernel without changing kernel source code or loading kernel modules.
- 커널 내에 마치 가상머신 처럼 자유롭게 프로그래밍하여 적용
BPF based tail calls (꼬리 물리) : Return 에서 함수 호출
(참고) XDP(eXpress Data Path) : eBPF based fast data-path
- Packet Path in Kernel
- TC Packet Path : Packet Scheduler(Qdisc) - QoS, Filter, NAT, 패킷 Mangle, 패킷 미러, 등
- 패킷 차단 - 테스트 환경 : pktgen - send UDP packet
- 패킷 차단 - 비교
(1) Userspace 패킷 차단
(2) Netfilter 패킷 차단
(3) TC Ingress 패킷 차단
(4) XDP 패킷 차단
- XDP Actions : XDP_DROP, XDP_ABORT, XDP_PASS, XDP_TX, XDP_REDIRECT
- XDP Mode : Generic(Linux Kernel Network Stack), Native(Network Driver, Intel 등), Offloaded(Network Hardware, Netronome)
https://www.netronome.com/blog/open-source-packet-filtering-bpf-fosdem19/
- 패킷 차단 비교
- Native XDP 지원 NIC, 아래 Netronome 는 XDP Offload 지원
마치며
이제 졸업 과제와 8주차 과제만을 남겨두고 있습니다. 졸업 과제는 좀 의미 있는 것을 해야 하는데, 무엇을 해야 할지 고민이 많이 되네요. 금주 안에 고민을 해서 졸업 과제를 시작해야겠습니다.