BumbleBee - eBPF ํ”„๋กœ๊ทธ๋žจ ์ƒ์„ฑ ๋ฐ ๋ฐฐํฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ํˆดํ‚ท

ํด๋ผ์šฐ๋“œ ์‹œ์Šคํ…œ, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค, ๊ฒฉ๋ฆฌ๋œ ์ปจํ…Œ์ด๋„ˆ ๋ฐ ์„œ๋ฒ„๋ฆฌ์Šค ์ปดํ“จํŒ…์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ œํ’ˆ์„ ๊ฐœ๋ฐœํ•˜๋Š” ํšŒ์‚ฌ์ธ Solo.io๋Š” ๋‚ด๋ถ€ ํŠน์ˆ˜ ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ์‹คํ–‰๋˜๋Š” eBPF ํ”„๋กœ๊ทธ๋žจ์˜ ์ค€๋น„, ๋ฐฐํฌ ๋ฐ ์‹คํ–‰์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์˜คํ”ˆ ์†Œ์Šค ํˆดํ‚ท์ธ BumbleBee๋ฅผ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. Linux ์ปค๋„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ์ž‘์—… ์ฒ˜๋ฆฌ, ์•ก์„ธ์Šค ์ œ์–ด ๋ฐ ์‹œ์Šคํ…œ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” Go๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ Apache 2.0 ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

BumbleBee๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด eBPF ํ”„๋กœ๊ทธ๋žจ์„ OCI(Open Container Initiative) ํ˜•์‹์˜ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋กœ ํŒจํ‚ค์ง•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์žฌ์ปดํŒŒ์ผ์ด๋‚˜ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ์ถ”๊ฐ€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ๋ชจ๋“  ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. eBPF ํ•ธ๋“ค๋Ÿฌ์—์„œ ์˜ค๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ํฌํ•จํ•˜์—ฌ ์ฝ”์–ด์— ์žˆ๋Š” eBPF ์ฝ”๋“œ์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์€ BumbleBee์— ์˜ํ•ด ์ธ๊ณ„๋ฉ๋‹ˆ๋‹ค. BumbleBee๋Š” ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”ํŠธ๋ฆญ, ํžˆ์Šคํ† ๊ทธ๋žจ ๋˜๋Š” ๋กœ๊ทธ ํ˜•์‹์œผ๋กœ ์ž๋™์œผ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ปฌ ์œ ํ‹ธ๋ฆฌํ‹ฐ. ์ œ์•ˆ๋œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” eBPF ์ฝ”๋“œ ์ž‘์„ฑ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ์ด ์ฝ”๋“œ์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ, ์–ด์…ˆ๋ธ”๋ฆฌ ๋ฐ ์ปค๋„ ๋กœ๋”ฉ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

eBPF ํ”„๋กœ๊ทธ๋žจ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Docker ์Šคํƒ€์ผ์˜ "bee" ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ด ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์™ธ๋ถ€ ์ €์žฅ์†Œ์—์„œ ๊ด€์‹ฌ ์žˆ๋Š” eBPF ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ฆ‰์‹œ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ๋กœ์ปฌ ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํˆดํ‚ท์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ ํƒํ•œ ์ฃผ์ œ์˜ eBPF ํ•ธ๋“ค๋Ÿฌ์— ๋Œ€ํ•ด C์—์„œ ์ฝ”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํ˜„์žฌ๋Š” ๋„คํŠธ์›Œํฌ ์Šคํƒ ๋ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„๋Š” ๋„คํŠธ์›Œํฌ ๋ฐ ํŒŒ์ผ ์ž‘์—…์šฉ ํ•ธ๋“ค๋Ÿฌ๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค). ์ƒ์„ฑ๋œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ์ž๋Š” ๊ด€์‹ฌ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

BCC(BPF Compiler Collection)์™€ ๋‹ฌ๋ฆฌ BumbleBee๋Š” Linux ์ปค๋„์˜ ๊ฐ ๋ฒ„์ „์— ๋Œ€ํ•œ ํ•ธ๋“ค๋Ÿฌ ์ฝ”๋“œ๋ฅผ ์™„์ „ํžˆ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(BCC๋Š” eBPF ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋  ๋•Œ๋งˆ๋‹ค Clang์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฆ‰์‹œ ์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค). ์ด์‹์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด CO-RE ๋ฐ libbpf ๋„๊ตฌ๊ฐ€ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ๋งŒ ๋นŒ๋“œํ•˜๊ณ  ๋กœ๋“œ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ํ˜„์žฌ ์ปค๋„ ๋ฐ BTF ์œ ํ˜• ํ˜•์‹์— ๋งž๊ฒŒ ์กฐ์ •ํ•˜๋Š” ํŠน์ˆ˜ ๋ฒ”์šฉ ๋กœ๋”๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. BumbleBee๋Š” libbpf์˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด๋ฉฐ ํ‘œ์ค€ eBPF ๋งต ๊ตฌ์กฐ RingBuffer ๋ฐ HashMap์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ž๋™ ํ•ด์„ ๋ฐ ํ‘œ์‹œ๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€ ์œ ํ˜•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ตœ์ข… eBPF ํ”„๋กœ๊ทธ๋žจ์„ ๋นŒ๋“œํ•˜๊ณ  OCI ์ด๋ฏธ์ง€๋กœ ์ €์žฅํ•˜๋ ค๋ฉด "bee build file_with_code name:version" ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  "bee run name:version" ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•ธ๋“ค๋Ÿฌ์—์„œ ๋ฐ›์€ ์ด๋ฒคํŠธ๋Š” ํ„ฐ๋ฏธ๋„ ์ฐฝ์— ์ถœ๋ ฅ๋˜์ง€๋งŒ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ•ธ๋“ค๋Ÿฌ์— ๋ฐ”์ธ๋”ฉ๋œ ๋„คํŠธ์›Œํฌ ํฌํŠธ์— ์ปฌ ๋˜๋Š” wget ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ธ๋“ค๋Ÿฌ๋Š” OCI ํ˜ธํ™˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ghcr.io ๋ฆฌํฌ์ง€ํ† ๋ฆฌ(GitHub Container Registry)์—์„œ ์™ธ๋ถ€ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด "bee run ghcr.io/solo-io/bumblebee/tcpconnect:" ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. $(๋ฒŒ ๋ฒ„์ „)โ€. ์ €์žฅ์†Œ์— ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ฐฐ์น˜ํ•˜๋ ค๋ฉด "bee push" ๋ช…๋ น์„ ์ œ์•ˆํ•˜๊ณ , ๋ฒ„์ „์„ ๋ฐ”์ธ๋”ฉํ•˜๋ ค๋ฉด "bee tag"๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€