[k8s] CNI (Container Network Interface)

CNI๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ Pod ๊ฐ„ ํ†ต์‹ ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์„ ๋งํ•œ๋‹ค.
์„ฑ๋Šฅ, ๋ณด์•ˆ ์ˆ˜์ค€๊ณผ ๋ฐ€์ ‘ํ•œ ๊ด€๋ จ์ด ์žˆ๋‹ค.

CNI์— ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ๊ณ , ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ๋Œ€๋žต์ ์œผ๋กœ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.




CNI (Container Network Interface)

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ ์ปจํ…Œ์ด๋„ˆ(Pod)๋“ค๋ผ๋ฆฌ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋‚ด๋ถ€ ํ†ต์‹ ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
๊ฐ Pod์—๋Š” 10.244.2.8 ๊ฐ™์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ IP๊ฐ€ ํ• ๋‹น๋˜๋ฉฐ, POD๋“ค๋ผ๋ฆฌ๋Š” ๋‚ด๋ถ€ IP๋ฅผ ํ†ตํ•ด ์ง์ ‘ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

CNI๋Š” ์ด๋Ÿฐ Pod <> Pod๊ฐ„ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ๋” ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ CNI๋Š” ์ •ํ•ด์ ธ์žˆ๋Š” ๊ฒƒ์ด ์—†์œผ๋ฉฐ, ๊ตฌํ˜„์ฒด๊ฐ€ ์—ฌ๋Ÿฟ ์žˆ๊ณ  ์ƒ์„ธ ๋™์ž‘ ๋ฐฉ์‹๋„ ๊ฐ์ž ๋‹ค๋ฅด๋‹ค.
๋„๋ฆฌ ์“ฐ์ด๋Š” CNI ๊ตฌํ˜„์ฒด๋กœ๋Š” Calico์™€ Flannel, Cilium ๋“ฑ์ด ์žˆ๋‹ค.

Flannel์€ ๊ฐ„๋‹จํ•œ ๊ตฌ์„ฑ์— ์•ˆ์ •์ ์ธ ์„ฑ๋Šฅ์„ ๊ฐ€์ง„ ๊ฒฝ๋Ÿ‰ CNI๋กœ, ์ ๋‹นํ•œ ๊ทœ๋ชจ์—์„œ๋Š” ๋งค์šฐ ํ›Œ๋ฅญํ•œ ์„ ํƒ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ณต์žกํ•œ ๋„คํŠธ์›Œํฌ ์ •์ฑ… ๊ตฌ์„ฑ์ด๋‚˜ ๋†’์€ ์„ฑ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด Calico์™€ Cilium์„ ์„ ํƒํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค. ๋ณต์žกํ•˜์ง€๋งŒ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.




CNI: Flannel

Flannel์€ k3s์˜ ๊ธฐ๋ณธ CNI์ด๊ธฐ๋„ ํ•˜๋ฉฐ, ์ƒ๊ธฐํ–ˆ๋“  ๋‹จ์ˆœํ•จ์„ ์ตœ๋Œ€ ์žฅ์ ์œผ๋กœ ๋‚ด์„ธ์šฐ๋Š” ๊ตฌํ˜„์ฒด๋‹ค.
Flannel์€ Overlay ๋„คํŠธ์›Œํฌ ๋ฐฉ์‹์„ ํ†ตํ•ด Pod ๊ฐ„ ํ†ต์‹ ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•ด ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์— ๊ณต์œ ๋˜๋Š” ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ , ํ†ต์‹ ์ด ๋ฐœ์ƒํ• ๋•Œ๋งˆ๋‹ค Flannel์ด ๊ทธ๊ฑธ ๊ฐ€๋กœ์ฑ„์„œ Pod์— ๋ชฉ์ ์ง€์— ์ „์†กํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๊ฑธ VXLAN ๋ชจ๋“œ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

Flannel์€ ์ด ๊ณผ์ •์—์„œ ๊ฐ€๋กœ์ฑˆ ํŒจํ‚ท์„ ์ž์ฒด์ ์ธ UDP ๊ธฐ๋ฐ˜ ํŒจํ‚ท์œผ๋กœ ๊ฐ์‹ผ ๋‹ค์Œ์— ๋ชฉ์ ์ง€๋กœ ์ „์†กํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ˆ˜์‹ ์ž ์ž…์žฅ์—์„œ๋Š” ๋‹ค์‹œ ํŒจํ‚ท์„ ์ถ”์ถœํ•ด์„œ ์›๋ž˜์˜ ๋ฐ์ดํ„ฐ๋กœ ๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค.

์ด ๋ฐฉ์‹์€ ๋งŽ์€ ํ™˜๊ฒฝ์—์„œ ์•„์ฃผ ์•ˆ์ •์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ๋‹ค๋ฅธ CNI๋“ค์€ ์žฅ๋น„ ํ™˜๊ฒฝ์— ์ข…์†๋ผ์„œ ํด๋ผ์šฐ๋“œ๋ฉด ์ž˜ ์•ˆ๋ ์ˆ˜๋„ ์žˆ๊ณ  ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๊ฑด ์–ด์ง€๊ฐ„ํ•˜๋ฉด ๋ฌธ์ œ์—†์ด ๋™์ž‘ํ•  ๊ฒƒ์ด๋‹ค.

์ด๋ ‡๊ฒŒ ๋ณด๋ฉด ์ง๊ด€์ ์ด๊ณ  ๊ฐ„ํŽธํ•ด๋ณด์ด์ง€๋งŒ, ๋‹น์—ฐํžˆ ๋‹จ์ ๋„ ์žˆ๋‹ค.
์•„๋ฌดํŠผ Flannel์ด ํŒจํ‚ท์„ ๋‹ค์‹œ ๊ฐ์‹ธ๊ณ  ํ‘ธ๋Š” ๊ณผ์ •์ด ์ถ”๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์•ฝ๊ฐ„์˜ ์„ฑ๋Šฅ ์†์‹ค์€ ๋ฐœ์ƒํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฌด์—‡๋ณด๋‹ค ํฐ ๋‹จ์ ์€ ๋ณด์•ˆ ์ˆ˜์ค€ ๊ธฐ๋Šฅ์ด๋‹ค.
Network Policy๊ฐ€ ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค. ๋‹ค์‹œ ๋งํ•ด Pod๋“ค๋ผ๋ฆฌ ํ†ต์‹ ์„ ์ž์œ ๋กญ๊ฒŒ ์—ด ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ๋ฐฉํ™”๋ฒฝ์„ ์›ํ•˜๋Š”๋Œ€๋กœ ๊ฑธ ์ˆ˜๋Š” ์—†๋‹ค. ๊ทธ๋ž˜์„œ ๋ณด์•ˆ ์ •์ฑ…์„ ์—„๊ฒฉํ•˜๊ฒŒ ์ง€์ผœ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
๋‚ด๋ถ€ ํŠธ๋ž˜ํ”ฝ์— ๋Œ€ํ•œ ์•”ํ˜ธํ™” ๋“ฑ๋„ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.




CNI: Calico

calico๋Š” ์—ฐ์‹์ด ์ข€ ๋œ CNI ๊ตฌํ˜„์ฒด ์ค‘ ํ•˜๋‚˜๋‹ค. ์˜ˆ์ „์—๋Š” ๋งŽ์ด ์ผ๋Š”๋ฐ ์š”์ฆ˜์€ ํŠธ๋ Œ๋“œ์—์„œ ์•ฝ๊ฐ„ ๋ฐ€๋ฆฐ ๊ฒƒ ๊ฐ™๋‹ค.
๊ทธ๋ž˜๋„ ์—ฌ์ „ํžˆ ๋Œ€๊ทœ๋ชจ์˜ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ฐ€์žฅ ์ ํ•ฉํ•˜๋‹ค๊ณ  ์ด์•ผ๊ธฐํ•œ๋‹ค. ์„ค์ •๊ณผ ๊ด€๋ฆฌ๊ฐ€ ๋งค์šฐ ๊นŒ๋‹ค๋กœ์šด ๋Œ€์‹ , ๋†’์€ ์„ฑ๋Šฅ, ๋ณด์•ˆ ์ˆ˜์ค€์„ ์ „๋ถ€ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด๊ฑด ๋งค์šฐ ๊ทผ๋ณธ์ ์ธ ๋ฐฉ์‹์œผ๋กœ Pod ๊ฐ„์˜ ํ†ต์‹ ๊ตฌ์กฐ๋ฅผ ์ž‡๋Š”๋‹ค. ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ๊ทธ๋Ÿฐ๊ฑธ ๋”ฐ๋กœ ๊ตฌ์„ฑํ•˜์ง„ ์•Š๊ณ , ์ „๋ถ€ ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์— ๋“ฑ๋กํ•œ ๋‹ค์Œ์— ๊ณ„์ธต ์—†์ด ์ง์ ‘ ํ†ต์‹ ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด, ๊ฐ™์€ ๋…ธ๋“œ ์•ˆ์— ์žˆ๋Š” Pod๋“ค์˜ ๊ฒฝ์šฐ์—๋Š” ์ปค๋„ ๊ธฐ๋Šฅ๋งŒ์„ ์‚ฌ์šฉํ•ด์„œ veth pair ๊ธฐ๋ฐ˜์˜ ๋‚ด๋ถ€ ํ†ต์‹ ์„ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ๋…ธ๋“œ ์•ˆ์— ์žˆ๋Š” Pod๋“ค๋ผ๋ฆฌ ํ†ต์‹ ํ•  ๊ฒฝ์šฐ์—๋Š” BGP (Border Gateway Protocol)์ด๋ž€ ๊ฒƒ์„ ํ†ตํ•ด ์ƒํ˜ธ๊ฐ„ ํ†ต์‹ ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋ฌผ๋ฆฌ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ฑฐ์น˜๋˜ ์›๋ณธ ํŒจํ‚ท์„ ์ง์ ‘ forwardingํ•ด๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋กœ ํŒจํ‚ท์„ ๊ฐ€๊ณตํ•˜๋Š” ๊ณผ์ •์ด ์—†์–ด์„œ ๋น ๋ฅด๋‹ค.
BGP ํ†ต์‹ ์—๋Š” TCP 179 ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๋‚ด๊ณ  ๋ณด์•ˆ ์ •์ฑ…์„ ๊ตฌ์„ฑํ•˜๊ธฐ๋„ ์ข‹์ง€๋งŒ, ๊ตฌ์„ฑ์ด ์“ธ๋ฐ์—†์ด ๋ณต์žกํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
์ด๊ฑธ ์ œ๋Œ€๋กœ ์“ฐ๋ ค๋ฉด ๋ถ€๊ฐ€์ ์ธ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์„ ๋•์ง€๋•์ง€ ๋ฐœ๋ผ์•ผ ํ•œ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ ํ•˜๋“œ์›จ์–ด ์ œ์•ฝ๋„ ์žˆ๋‹ค. BGP๋Š” ์‚ฌ์‹ค ๋ชจ๋“  ํ™˜๊ฒฝ์—์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” ํ†ต์‹  ๊ทœ๊ฒฉ์ด ์•„๋‹ˆ๋‹ค. AWS/GCP/Azure ๊ฐ™์€ ๊ฐ€์ƒํ™” ๊ธฐ๋ฐ˜์˜ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋“ค์€ ๋Œ€๋ถ€๋ถ„ BGP ์‚ฌ์šฉ ์ž์ฒด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.




CNI: Cilium

cilium์€ ์ตœ๊ทผ ๋ถ€์ƒํ•˜๊ณ  ์žˆ๋Š” CNI ๊ตฌํ˜„์ฒด๋‹ค. ์ „๋ฐ˜์ ์ธ ์ ‘๊ทผ๋ฒ•์€ Flannel๊ณผ ๋น„์Šทํ•˜๋‹ค.

๋†’์€ ์„ฑ๋Šฅ๊ณผ ๊ด€์ธก์„ฑ, ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ์žฅ์ ์œผ๋กœ ๋‚ด์„ธ์šด๋‹ค. ๊ฐ€์žฅ ํŠน๋ณ„ํ•œ ๋ถ€๋ถ„์€ L7 NetworkPolicy ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. HTTP ์ˆ˜์ค€์˜ ํ•„ํ„ฐ๋ง ์ œ์•ฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๊ฑด eBPF์ด๋ผ๋Š” ํŒจํ‚ท ์ „์†ก์šฉ ์ปค๋„ ๊ธฐ๋Šฅ์œผ๋กœ ๋„คํŠธ์›Œํ‚น์„ ๊ตฌํ˜„ํ•˜๋ฉฐ, ๊ทธ ๋•๋ถ„์— ๋†’์€ ์ˆ˜์ค€์˜ ์„ฑ๋Šฅ๊ณผ ๊ด€์ธก์„ฑ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์žฅ์ ์ด๋‹ค.

๊ฐ™์€ ๋…ธ๋“œ์—์„œ ํ†ต์‹ ํ•  ๊ฒฝ์šฐ์—๋Š” eBPF๋ฅผ ํ†ตํ•ด์„œ ํŒจํ‚ท์„ ์ „๋‹ฌํ•œ๋‹ค.
๋‹ค๋ฅธ ๋…ธ๋“œ์—์„œ ํ†ต์‹ ํ•  ๊ฒฝ์šฐ์—๋Š” eBPF VXLAN๋ผ๋Š” eBPF ๊ธฐ๋ฐ˜์˜ ์˜ค๋ฒ„๋ ˆ์ด ๋„คํŠธ์›Œํฌ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•œ๋‹ค. Flannel๋ณด๋‹ค ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€, iptables์˜ ์—ญํ• ์„ ๋น ๋ฅธ eBPF๊ฐ€ ๊ฐ€์ ธ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋‹จ์ ์€ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ๋ณต์žก๋„๊ฐ€ ๋งค์šฐ ๋†’๊ณ , ๊ธฐ์ˆ  ์ž์ฒด์˜ ์ „๋ฐ˜์ ์ธ ์„ฑ์ˆ™๋„๊ฐ€ ๋‚ฎ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทผ๋ฐ ์„ฑ๋Šฅ์ด ๊ฐ€์žฅ ์••๋„์ ์ด๋ผ๋Š” ํ™๋ณด์„ฑ ๊ธ€๋“ค์ด ๋งŽ์ด ๋ณด์ด๋Š”๋ฐ, ์‹ค์ œ๋กœ๋Š” calico ๋“ฑ๊ณผ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ์˜๋ฏธ์žˆ๊ฒŒ ๋‚˜์ง€ ์•Š๋Š”๋‹ค. calico๋ผ๊ณ  eBPF๋ฅผ ์“ฐ์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค... ๋ฐ”์ด๋Ÿด์ด ์‹ฌํ•œ ํŽธ์ด๋‹ค.





์ฐธ์กฐ
https://kubernetes.io/ko/docs/concepts/cluster-administration/networking/
https://daily.dev/blog/kubernetes-cni-comparison-flannel-vs-calico-vs-canal
https://github.com/containernetworking/cni