以 eBPF 構建⼀個更為
堅韌的 Kubernetes 叢集
邱宏瑋(HungWei Chiu)
什麼是 eBPF?
• Extended


• Berkeley


• Packet


• Filter


• 簡單來說就是加強版本的 BPF
什麼是 BPF?


Berkeley Packet Filter
先聊聊 tcpdump
tcpdump
• ⼀個常⾒⽤來抓取封包的⼯具


• 同時可以根據參數來過濾各式各樣的封包


• tcpdump … host 192.168.1.1


• tcpdump … tcp and port 80


• 實際上這些封包過濾規則都會轉換並且送到 Kernel
去,由 kernel 幫你過濾規則
tcpdump
tcpdump
BPF
• 1992 的論⽂,⽬的就是要創造⼀個快速過濾封包
的機制


• User:


• 撰寫過濾規則,將規則轉換送到 Kernel


• Kernel:


• 透過虛擬機去驗證該規則並且執⾏
所以 eBPF?
eBPF
• Extended BPF


• 加強版本的 BPF,使⽤範圍更廣,更像是⼀個通⽤情境的框架,
⽽非網路封包過濾專屬


• 概念雷同


• User space: 撰寫 eBPF 應⽤程式


• Kernel space: 載入,驗證並且執⾏ eBPF 應⽤程式


• 加入更多的 hook 點,讓你的 eBPF 應⽤程式可以於各種不同
的時機點被觸發。
https://ebpf.io/
為什麼 eBPF 熱⾨
Kernel 開發
• 直接修改 kernel code


• 要合併到上游同時正式釋出要等很長時間


• ⾃幹⾃⽤不合併


• 撰寫 Kernel Module


• 要注意使⽤環境的 Kernel 版本,不同版本可能會
導致功能失效
Why eBPF
• 開發流程


• 開發者可以於 userspace 去撰寫相關應⽤


• Kernel 維護框架


• 不修改 Kernel 就可以動態的撰寫應⽤程式來與
Kernel 互動
eBPF 流程
• 撰寫應⽤程式


• 轉換成 bytecode


• 載入到 Kernel


• Veri
fi
er: eBPF 應⽤程式夠安全


• JIT Compiler 將 bytecode 轉換成 machine code
並且執⾏
eBPF 流程
eBPF 執⾏時機點
• eBPF hook ⽀援各種不同
時機點,這些變化使得
eBPF 的應⽤非常豐富


• 網路封包


• 資安檢測


• 可觀測性與系統監控


• 系統追蹤與效能盤查
eBPF & Cloud Native
Networking
• Cilium 為⾸的 CNI,以 eBPF 為基礎提供各式各樣能⼒


• 以 eBPF 取代 kube-proxy (iptables/ipvs),提供更⾼效能的傳輸


• 以 eBPF 為基礎提供更細節的封包傳輸過程


• Service Mesh 之戰還未結束


• Cilium 提出的 sidecar less 與 istio 之間的比較沒有任何強⽽有⼒
的結案


• Merbridge 直接以 eBPF 取代 iptables 來提昇 mesh 之間的傳遞
效能
eBPF 網路議程
• 11:00 ~ 11:40


• AU 視聽館


• eBPF-based Container Networking


• JohnLin
Observability/Monitoring
• Hubble 與 Cilium 共⽣,以 UI 的⽅式呈現叢集中的
所有封包流量


• Pixie 則是強調不需要基於應⽤程式去修改,就可以
提供叢集內的各種細節資訊


• Cilium/pwru (packet, where are you?)


• 基於 kernel level 的封包消失檢測⼯具
Security
• Faclo 提供以 system call 為基礎的安全性檢測,直
接從底層杜絕掉任何非預期的操作


• Cilium 今年新推出的 Tetragon 專案則強化 Cilium
整個⽣態系


• Tetragon 主打 Security 與 Observability
Trace/Pro
fi
ling
• Bcc/bpftrace 提供眾多⼯具從不同⾯向去觀測
kernel,提供更底層的資訊幫忙除錯應⽤程式


• kubectl trace


• 基於 Kubectl plugin 的⼯具


• 將 bpftrace 眾多⼯具部署到 k8s 叢集中來進⾏除
錯
Kubectl Trace
https://github.com/iovisor/kubectl-trace#run-a-program-against-a-pod
結論
• eBPF 延伸並強化了 BPF 的概念,並將其應⽤從 packet
fi
lter
擴充到更多⾯向


• 開發與部署順暢 (相較 in-kernel code, kernel module)


• 豐富的 Hook 提供眾多可能性


• Cloud Native ⽣態中也有眾多基於 eBPF 的專案於各個⾯向努
⼒發展


• eBPF 提供維運⼈員以不同的視⾓去看待整個系統,提供更深
層且直接的⽅式來⾯對⽇常除錯

以 eBPF 構建一個更為堅韌的 Kubernetes 叢集