์ฐ๊ฒฐ ์ถ์ (โconntrackโ)์ Linux ์ปค๋ ๋คํธ์ํน ์คํ์ ํต์ฌ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ปค๋์ ๋ชจ๋ ๋ ผ๋ฆฌ์ ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋๋ ํ๋ฆ์ ์ถ์ ํ๊ณ ๊ฐ ํ๋ฆ์ ๊ตฌ์ฑํ๋ ๋ชจ๋ ํจํท์ ์๋ณํ์ฌ ์์ฐจ์ ์ผ๋ก ํจ๊ป ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
Conntrack์ ๋ช ๊ฐ์ง ๊ธฐ๋ณธ์ ์ธ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ ์ค์ํ ์ปค๋ ๊ธฐ๋ฅ์ ๋๋ค.
- NAT๋ conntrack์ ์ ๋ณด์ ์์กดํ๋ฏ๋ก ๋์ผํ ์คํธ๋ฆผ์ ๋ชจ๋ ํจํท์ ๋์ผํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํฌ๋๊ฐ Kubernetes ์๋น์ค์ ์ก์ธ์คํ๋ฉด kube-proxy ๋ก๋ ๋ฐธ๋ฐ์๋ NAT๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ ๋ด์ ํน์ ํฌ๋๋ก ํธ๋ํฝ์ ์ ๋ฌํฉ๋๋ค. Conntrack์ ํน์ ์ฐ๊ฒฐ์ ๋ํด IP ์๋น์ค์ ๋ํ ๋ชจ๋ ํจํท์ด ๋์ผํ ํฌ๋๋ก ์ ์ก๋์ด์ผ ํ๋ฉฐ ๋ฐฑ์๋ ํฌ๋์์ ๋ฐํ๋ ํจํท์ ์์ฒญ์ด ๋ฐ์ํ ํฌ๋๋ก ๋ค์ NAT ์ฒ๋ฆฌ๋์ด์ผ ํ๋ค๊ณ ๊ธฐ๋กํฉ๋๋ค.
- Calico์ ๊ฐ์ ์ํ ์ ์ฅ ๋ฐฉํ๋ฒฝ์ connecttrack์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ "์๋ต" ํธ๋ํฝ์ ํ์ดํธ๋ฆฌ์คํธ์ ์ถ๊ฐํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ช ์์ ์ผ๋ก ์๋ต ํธ๋ํฝ์ ํ์ฉํ๋ ์ ์ฑ ์ ์์ฑํ์ง ์๊ณ ๋ "๋ด ํฌ๋๊ฐ ๋ชจ๋ ์๊ฒฉ IP ์ฃผ์์ ์ฐ๊ฒฐํ๋๋ก ํ์ฉ"ํ๋ ๋คํธ์ํฌ ์ ์ฑ ์ ์์ฑํ ์ ์์ต๋๋ค. (์ด๊ฒ์ด ์์ผ๋ฉด ํจ์ฌ ๋ ์์ ํ "๋ชจ๋ IP์์ ๋ด ํฌ๋๋ก์ ํจํท ํ์ฉ" ๊ท์น์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.)
๋ํ conntrack์ ์ผ๋ฐ์ ์ผ๋ก ์คํธ๋ฆผ์ ์ฒซ ๋ฒ์งธ ํจํท๋ง ์ ์กํ๋ฏ๋ก ์์คํ
์ฑ๋ฅ์ ํฅ์์ํต๋๋ค(CPU ์๋น ๋ฐ ํจํท ๋๊ธฐ ์๊ฐ ๊ฐ์).
์ ์ฒด ๋คํธ์ํฌ ์คํ์ ์ดํด๋ณด๊ณ ์ด๋ป๊ฒ ํด์ผ ํ ์ง ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. ๊ฒ์๋ฌผ์ ์ฐธ์กฐํ์ญ์์ค "
๊ทธ๋ฌ๋ conntrack์๋ ํ๊ณ๊ฐ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ชจ๋ ๊ฒ์ด ์ด๋์ ์๋ชป ๋์์ต๋๊น?
conntrack ํ ์ด๋ธ์๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ ์ต๋ ํฌ๊ธฐ๊ฐ ์์ผ๋ฉฐ, ํ ์ด๋ธ์ด ๊ฐ๋ ์ฐจ๋ฉด ์ผ๋ฐ์ ์ผ๋ก ์ฐ๊ฒฐ์ด ๊ฑฐ๋ถ๋๊ฑฐ๋ ์ญ์ ๋๊ธฐ ์์ํฉ๋๋ค. ํ ์ด๋ธ์๋ ๋๋ถ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ ์ ์๋ ์ถฉ๋ถํ ์ฌ์ ๊ณต๊ฐ์ด ์์ผ๋ฉฐ ์ด๋ ๊ฒฐ์ฝ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ conntrack ํ ์ด๋ธ ์ฌ์ฉ์ ๊ณ ๋ คํ ์ ์๋ ๋ช ๊ฐ์ง ์๋๋ฆฌ์ค๊ฐ ์์ต๋๋ค.
- ๊ฐ์ฅ ํ์คํ ๊ฒฝ์ฐ๋ ์๋ฒ๊ฐ ๋งค์ฐ ๋ง์ ์์ ๋์ ํ์ฑ ์ฐ๊ฒฐ์ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ์ ๋๋ค. ์๋ฅผ ๋ค์ด, conntrack ํ ์ด๋ธ์ด 128๊ฐ ํญ๋ชฉ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ง๋ง ๋์ ์ฐ๊ฒฐ์ด 128๊ฐ๋ฅผ ์ด๊ณผํ๋ค๋ฉด ๋ถ๋ช ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ ๋๋ค!
- ์ฝ๊ฐ ๋ ๋ถ๋ช ํ ๊ฒฝ์ฐ: ์๋ฒ๊ฐ ์ด๋น ๋งค์ฐ ๋ง์ ์์ ์ฐ๊ฒฐ์ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ์ ๋๋ค. ์ฐ๊ฒฐ์ด ์ผ์์ ์ด๋๋ผ๋ ์ผ์ ๊ธฐ๊ฐ(๊ธฐ๋ณธ์ ์ผ๋ก 120์ด) ๋์ Linux์์ ๊ณ์ ๋ชจ๋ํฐ๋ง๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, conntrack ํ ์ด๋ธ์ด 128๊ฐ ํญ๋ชฉ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๊ณ ์ด๋น 1100๊ฐ์ ์ฐ๊ฒฐ์ ์ฒ๋ฆฌํ๋ ค๊ณ ํ๋ฉด ์ฐ๊ฒฐ์ด ๋งค์ฐ ์งง์ ๊ฒฝ์ฐ์๋(128k/120s = 1092๊ฐ ์ฐ๊ฒฐ/) conntrack ํ ์ด๋ธ์ ํฌ๊ธฐ๋ฅผ ์ด๊ณผํ๊ฒ ๋ฉ๋๋ค. ์์ค).
์ด๋ฌํ ์นดํ ๊ณ ๋ฆฌ์ ์ํ๋ ๋ช ๊ฐ์ง ํ์ ์ ํ์ ์ฑ์ด ์์ต๋๋ค. ๋ํ ์ ์์ ์ธ ํ์์๊ฐ ๋ง์ ๊ฒฝ์ฐ ์๋ฒ์ conntrack ํ ์ด๋ธ์ ๋ฐ์ฏค ์ด๋ฆฐ ์ฐ๊ฒฐ๋ก ์ฑ์ฐ๋ ๊ฒ์ ์๋น์ค ๊ฑฐ๋ถ(DOS) ๊ณต๊ฒฉ์ ์ผ๋ถ๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ๋ ๊ฒฝ์ฐ ๋ชจ๋ conntrack์ ์์คํ ์ ์ ํ์ ์ธ ๋ณ๋ชฉ ํ์์ด ๋ ์ ์์ต๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๊ฑฐ๋ conntrack ์๊ฐ ์ด๊ณผ๋ฅผ ์ค์์ผ๋ก์จ conntrack ํ ์ด๋ธ ๋งค๊ฐ ๋ณ์๋ฅผ ์กฐ์ ํ๋ ๊ฒ๋ง์ผ๋ก๋ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๊ธฐ์ ์ถฉ๋ถํ ์ ์์ต๋๋ค(๊ทธ๋ฌ๋ ์๋ชปํ๋ฉด ๋ง์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค). ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ๊ณต๊ฒฉ์ ์ธ ํธ๋ํฝ์ ๋ํด conntrack์ ์ฐํํด์ผ ํฉ๋๋ค.
์ค์ ์
๊ตฌ์ฒด์ ์ธ ์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ํ๋ ฅํ ํ ๋ํ SaaS ์ ๊ณต์ ์ฒด๋ ํธ์คํธ(๊ฐ์ ๋จธ์ ์๋)์ ๋ค์์ memcached ์๋ฒ๋ฅผ ๋ณด์ ํ๊ณ ์์์ผ๋ฉฐ ๊ฐ ์๋ฒ๋ ์ด๋น 50๊ฐ ์ด์์ ๋จ๊ธฐ ์ฐ๊ฒฐ์ ์ฒ๋ฆฌํ์ต๋๋ค.
๊ทธ๋ค์ conntrack ๊ตฌ์ฑ์ ์คํํ์ฌ ํ ์ด๋ธ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๊ณ ์ถ์ ์๊ฐ์ ์ค์์ง๋ง ๊ตฌ์ฑ์ด ์ ๋ขฐํ ์ ์์๊ณ RAM ์๋น๊ฐ ํฌ๊ฒ ์ฆ๊ฐํ์ฌ ๋ฌธ์ ๊ฐ ๋์์ผ๋ฉฐ(GBytes ์ ๋!) ์ฐ๊ฒฐ์ด ๋๋ฌด ์งง์์ conntrack์ด ์๋ํ์ง ์์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ์ฑ๋ฅ ์ด์ (CPU ์๋น ๋๋ ํจํท ๋๊ธฐ ์๊ฐ ๊ฐ์)์ ๋ง๋ญ๋๋ค.
๊ทธ๋ค์ ๋์์ผ๋ก Calico๋ฅผ ์ ํํ์ต๋๋ค. Calico ๋คํธ์ํฌ ์ ์ฑ ์ ์ฌ์ฉํ๋ฉด ํน์ ์ ํ์ ํธ๋ํฝ์ ๋ํด conntrack์ ์ฌ์ฉํ์ง ์์ ์ ์์ต๋๋ค(doNotTrack ์ ์ฑ ์ต์ ์ฌ์ฉ). ์ด๋ฅผ ํตํด ํ์ํ ์ฑ๋ฅ ์์ค๊ณผ Calico๊ฐ ์ ๊ณตํ๋ ์ถ๊ฐ ๋ณด์ ์์ค์ด ์ ๊ณต๋์์ต๋๋ค.
conntrack์ ์ฐํํ๋ ค๋ฉด ์ด๋ ์ ๋๊น์ง ๊ฐ์ผ ํฉ๋๊น?
- ์ถ์ ๊ธ์ง ๋คํธ์ํฌ ์ ์ฑ ์ ์ผ๋ฐ์ ์ผ๋ก ๋์นญ์ ์ด์ด์ผ ํฉ๋๋ค. SaaS ์ ๊ณต์ ์ฒด์ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ณดํธ ์์ญ ๋ด์์ ์คํ๋์์ผ๋ฏ๋ก ๋คํธ์ํฌ ์ ์ฑ ์ ์ฌ์ฉํ์ฌ memcached์ ๋ํ ์ก์ธ์ค๊ฐ ํ์ฉ๋ ๋ค๋ฅธ ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํธ๋ํฝ์ ํ์ดํธ๋ฆฌ์คํธ์ ์ถ๊ฐํ ์ ์์์ต๋๋ค.
- ์ถ์ ๊ธ์ง ์ ์ฑ ์ ์ฐ๊ฒฐ ๋ฐฉํฅ์ ๊ณ ๋ คํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ memcached ์๋ฒ๊ฐ ํดํน๋ ๊ฒฝ์ฐ ์ด๋ก ์ ์ผ๋ก ์ฌ๋ฐ๋ฅธ ์์ค ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ํ ๋ชจ๋ memcached ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ์ ์๋ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ memcached ํด๋ผ์ด์ธํธ์ ๋ํ ๋คํธ์ํฌ ์ ์ฑ ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ํ ๊ฒฝ์ฐ ์ด๋ฌํ ์ฐ๊ฒฐ ์๋๋ ํด๋ผ์ด์ธํธ ์ธก์์ ๊ณ์ ๊ฑฐ๋ถ๋ฉ๋๋ค.
- ์ถ์ ๊ธ์ง ์ ์ฑ ์ ํ๋ฆ์ ์ฒซ ๋ฒ์งธ ํจํท์๋ง ์ ์ฉ๋๋ ์ผ๋ฐ ์ ์ฑ ๊ณผ ๋ฌ๋ฆฌ ๋ชจ๋ ํจํท์ ์ ์ฉ๋ฉ๋๋ค. ์ ์ฑ ์ด ๊ฐ ํจํท์ ์ ์ฉ๋์ด์ผ ํ๋ฏ๋ก ํจํท๋น CPU ์ฌ์ฉ๋์ด ์ฆ๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๋ช ์ด ์งง์ ์ฐ๊ฒฐ์ ๊ฒฝ์ฐ ์ด ๋น์ฉ์ conntrack ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ฆฌ์์ค ์๋น ๊ฐ์๋ก ๊ท ํ์ ์ด๋ฃน๋๋ค. ์๋ฅผ ๋ค์ด SaaS ๊ณต๊ธ์์ ๊ฒฝ์ฐ ์ฐ๊ฒฐ๋น ํจํท ์๊ฐ ๋งค์ฐ ์ ๊ธฐ ๋๋ฌธ์ ๊ฐ ํจํท์ ์ ์ฑ ์ ์ ์ฉํ ๋ ์ถ๊ฐ CPU ์๋น๊ฐ ์ ๋นํ๋์์ต๋๋ค.
ํ ์คํธ๋ฅผ ์์ํด๋ณด์
์ด๋น ๋งค์ฐ ๋ง์ ์์ ์ฐ๊ฒฐ์ ์คํํ ์ ์๋๋ก Memcached ์๋ฒ์ ์๊ฒฉ ๋
ธ๋์์ ์คํ๋๋ ์ฌ๋ฌ Memcached ํด๋ผ์ด์ธํธ ํฌ๋๊ฐ ์๋ ๋จ์ผ ํฌ๋์์ ํ
์คํธ๋ฅผ ์คํํ์ต๋๋ค. memcached ์๋ฒ ํฌ๋๊ฐ ์๋ ์๋ฒ์๋ conntrack ํ
์ด๋ธ(ํธ์คํธ์ ๋ํด ๊ตฌ์ฑ๋ ํ์ค ํ
์ด๋ธ ํฌ๊ธฐ)์ 8๊ฐ์ ์ฝ์ด์ 512k ํญ๋ชฉ์ด ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ค์ ์ฌ์ด์ ์ฑ๋ฅ ์ฐจ์ด๋ฅผ ์ธก์ ํ์ต๋๋ค. ๋คํธ์ํฌ ์ ์ฑ
์์; ์ผ๋ฐ Calico ์ ์ฑ
์ ์ฌ์ฉํฉ๋๋ค. Calico ์ถ์ ๊ธ์ง ์ ์ฑ
.
์ฒซ ๋ฒ์งธ ํ ์คํธ์์๋ ์ฐ๊ฒฐ ์๋ฅผ ์ด๋น 4.000๊ฐ๋ก ์ค์ ํ์ฌ CPU ์๋น์ ์ฐจ์ด์ ์ง์คํ ์ ์์์ต๋๋ค. ์ ์ฑ ์์๊ณผ ์ผ๋ฐ ์ ์ฑ ์ฌ์ด์๋ ํฐ ์ฐจ์ด๊ฐ ์์์ง๋ง ์ถ์ ํ์ง ์์์ผ๋ก ์ธํด CPU ์๋น๊ฐ ์ฝ 20% ์ฆ๊ฐํ์ต๋๋ค.
๋ ๋ฒ์งธ ํ ์คํธ์์๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ฑํ ์ ์๋ ๋งํผ ๋ง์ ์ฐ๊ฒฐ์ ์์ํ๊ณ memcached ์๋ฒ๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ์ด๋น ์ต๋ ์ฐ๊ฒฐ ์๋ฅผ ์ธก์ ํ์ต๋๋ค. ์์ํ ๋๋ก "์ ์ฑ ์์" ๋ฐ "์ผ๋ฐ ์ ์ฑ " ์ฌ๋ก ๋ชจ๋ ์ด๋น 4,000๊ฐ ์ด์์ ์ฐ๊ฒฐ ์ ํ(512k/120s = 4,369๊ฐ ์ฐ๊ฒฐ/์ด)์ ๋๋ฌํ์ต๋๋ค. ์ถ์ ๊ธ์ง ์ ์ฑ ์ ํตํด ํด๋ผ์ด์ธํธ๋ ์๋ฌด๋ฐ ๋ฌธ์ ์์ด ์ด๋น 60,000๊ฐ์ ์ฐ๊ฒฐ์ ์ ์กํ์ต๋๋ค. ๋ ๋ง์ ํด๋ผ์ด์ธํธ๋ฅผ ์ถ๊ฐํ์ฌ ์ด ์ซ์๋ฅผ ๋๋ฆด ์ ์๋ค๊ณ ํ์ ํ์ง๋ง ์ด ์ซ์๋ ์ด๋ฏธ ์ด ๊ธฐ์ฌ์ ์์ ์ ์ค๋ช ํ๊ธฐ์ ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํฉ๋๋ค!
๊ฒฐ๋ก
Conntrack์ ์ค์ํ ์ปค๋ ๊ธฐ๋ฅ์ ๋๋ค. ๊ทธ๋ ์์ ์ ์ผ์ ์๋ฒฝํ๊ฒ ์ํํฉ๋๋ค. ์ฃผ์ ์์คํ ๊ตฌ์ฑ ์์์์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ถ ํน์ ์๋๋ฆฌ์ค์์๋ conntrack์ผ๋ก ์ธํ ์ ์ฒด๊ฐ ์ด๊ฒ์ด ์ ๊ณตํ๋ ์ผ๋ฐ์ ์ธ ์ด์ ๋ณด๋ค ๋ ํฝ๋๋ค. ์ด ์๋๋ฆฌ์ค์์๋ Calico ๋คํธ์ํฌ ์ ์ฑ ์ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ๋ณด์์ ๊ฐํํ๋ฉด์ conntrack ์ฌ์ฉ์ ์ ํ์ ์ผ๋ก ๋นํ์ฑํํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ํธ๋ํฝ์ ๋ํด์๋ conntrack์ด ๊ณ์ํด์ ์ฌ๋ฌ๋ถ์ ์น๊ตฌ๊ฐ ๋์ด ๋๋ฆฝ๋๋ค!
๋ธ๋ก๊ทธ์์ ๋ค๋ฅธ ๊ธฐ์ฌ๋ ์ฝ์ด๋ณด์ธ์.
Nginx์ฉ ๋์ ๋ชจ๋ ๋น๋ Hashicorp Consul์ Kubernetes ์ธ์ฆ ์๊ฐ Kubernetes์ ์ํ ์ ์ฅ ๋ฐฑ์ ๋ค์์ ์ด๊ธฐ์ข ์น ํ๋ก์ ํธ ๋ฐฑ์ Redmine์ฉ ํ ๋ ๊ทธ๋จ ๋ด. ์์ ๊ณผ ๋ค๋ฅธ ์ฌ๋์ ์ถ์ ๋จ์ํํ๋ ๋ฐฉ๋ฒ
์ถ์ฒ : habr.com