[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