Calico ๋คํธ์ํฌ ํ๋ฌ๊ทธ์ธ์ ํ๋์จ์ด ํธ์คํธ, ๊ฐ์ ๋จธ์ ๋ฐ ํฌ๋๋ฅผ ๋ณดํธํ๊ธฐ ์ํ ํตํฉ ๊ตฌ๋ฌธ์ผ๋ก ๊ด๋ฒ์ํ ๋คํธ์ํฌ ์ ์ฑ
์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ์ ์ฑ
์ ๋ค์์คํ์ด์ค ๋ด์ ์ ์ฉ๋๊ฑฐ๋ ๋ค์์ ์ ์ฉ๋๋ ๊ธ๋ก๋ฒ ๋คํธ์ํฌ ์ ์ฑ
์ผ ์ ์์ต๋๋ค.
์ด ๋ฌธ์์์๋ ์ฌ์ฉ์๊ฐ Kubernetes ๋ฐ Calico ๋คํธ์ํฌ ์ ์ฑ
์ ์๋ ๋ฐฉ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ดํดํ๊ณ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด ์๋ํด ๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค
์ฅ์๋ชฉ
๊ธฐ๋ณธ ์์ค์์ Calico๋ Pod๋ฅผ ๋คํธ์ํฌ์ ์ฐ๊ฒฐํ ๋(์๋ ๋ค์ด์ด๊ทธ๋จ ์ฐธ์กฐ) ๊ฐ์ ์ด๋๋ท ์ธํฐํ์ด์ค(veth)๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ํธ์คํธ์ ์ฐ๊ฒฐํฉ๋๋ค. ํฌ๋์์ ์ ์กํ ํธ๋ํฝ์ ์ด ๊ฐ์ ์ธํฐํ์ด์ค์์ ํธ์คํธ๋ก ๋ค์ด์ค๋ฉฐ ๋ฌผ๋ฆฌ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค์์ ์ค๋ ๊ฒ๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Calico๋ ์ด๋ฌํ ์ธํฐํ์ด์ค์ ์ด๋ฆ์ caliXXX๋ก ์ง์ ํฉ๋๋ค. ํธ๋ํฝ์ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ฐ์ํ๋ฏ๋ก ๋ง์น ํฌ๋๊ฐ ํ ํ ๋จ์ด์ง ๊ฒ์ฒ๋ผ iptables๋ฅผ ํต๊ณผํฉ๋๋ค. ๋ฐ๋ผ์ ํธ๋ํฝ์ด Pod๋ก ๋ค์ด์ค๊ฑฐ๋ Pod์์ ๋ค์ด์ค๋ฉด ํธ์คํธ์ ๊ด์ ์์ ์ ๋ฌ๋ฉ๋๋ค.
Calico๋ฅผ ์คํํ๋ Kubernetes ๋ ธ๋์์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ ์ธํฐํ์ด์ค(veth)๋ฅผ ์ํฌ๋ก๋์ ๋งคํํ ์ ์์ต๋๋ค. ์๋ ์์์๋ veth#10(calic1cbf1ca0f8)์ด calico-monitoring ๋ค์์คํ์ด์ค์ cnx-manager-*์ ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
[centos@ip-172-31-31-46 K8S]$ sudo ip a
...
10: calic1cbf1ca0f8@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group default
link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 5
inet6 fe80::ecee:eeff:feee:eeee/64 scope link
valid_lft forever preferred_lft forever
...
[centos@ip-172-31-31-46 K8S]$ calicoctl get wep --all-namespaces
...
calico-monitoring cnx-manager-8f778bd66-lz45m ip-172-31-31-46.ec2.internal 192.168.103.134/32
calic1cbf1ca0f8
...
Calico๊ฐ ๊ฐ ์ํฌ๋ก๋์ ๋ํ veth ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ๋ค๋ ์ ์ ๊ณ ๋ คํ๋ฉด ์ ์ฑ
์ ์ด๋ป๊ฒ ์ํํฉ๋๊น? ์ด๋ฅผ ์ํด Calico๋ iptables๋ฅผ ์ฌ์ฉํ์ฌ ํจํท ์ฒ๋ฆฌ ๊ฒฝ๋ก์ ๋ค์ํ ์ฒด์ธ์ ํํฌ๋ฅผ ๋ง๋ญ๋๋ค.
์๋ ๋ค์ด์ด๊ทธ๋จ์ iptables(๋๋ netfilter ํ์ ์์คํ )์ ํจํท ์ฒ๋ฆฌ์ ๊ด๋ จ๋ ์ฒด์ธ์ ๋ณด์ฌ์ค๋๋ค. ํจํท์ด ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋์ฐฉํ๋ฉด ๋จผ์ PREROUTING ์ฒด์ธ์ ํต๊ณผํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ผ์ฐํ ๊ฒฐ์ ์ด ๋ด๋ ค์ง๊ณ ์ด์ ๋ฐ๋ผ ํจํท์ INPUT(ํธ์คํธ ํ๋ก์ธ์ค๋ก ์ ๋ฌ) ๋๋ FORWARD(ํ ๋๋ ๋คํธ์ํฌ์ ๋ค๋ฅธ ๋ ธ๋๋ก ์ ๋ฌ)๋ฅผ ํต๊ณผํฉ๋๋ค. ๋ก์ปฌ ํ๋ก์ธ์ค์์ ํจํท์ OUTPUT์ ๊ฑฐ์น ๋ค์ POSTROUTING ์ฒด์ธ์ ๊ฑฐ์ณ ์ผ์ด๋ธ๋ก ์ ์ก๋ฉ๋๋ค.
Pod๋ iptables ์ฒ๋ฆฌ ์ธก๋ฉด์์ (veth์ ์ฐ๊ฒฐ๋) ์ธ๋ถ ์ํฐํฐ์ด๊ธฐ๋ ํฉ๋๋ค. ์์ฝํด๋ณด์:
- ์ ๋ฌ๋ ํธ๋ํฝ(nat, ๋ผ์ฐํ ๋๋ ํฌ๋์์/์ผ๋ก)์ PREROUTING - FORWARD - POSTROUTING ์ฒด์ธ์ ํต๊ณผํฉ๋๋ค.
- ๋ก์ปฌ ํธ์คํธ ํ๋ก์ธ์ค์ ๋ํ ํธ๋ํฝ์ PREROUTING - INPUT ์ฒด์ธ์ ํต๊ณผํฉ๋๋ค.
- ๋ก์ปฌ ํธ์คํธ ํ๋ก์ธ์ค์ ํธ๋ํฝ์ OUTPUT - POSTROUTING ์ฒด์ธ์ ํต๊ณผํฉ๋๋ค.
Calico๋ ๋ชจ๋ ์ฒด์ธ์ ์ ์ฑ
์ ์ ์ฉํ ์ ์๋ ์ ์ฑ
์ต์
์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ์ผ๋์ ๋๊ณ Calico์์ ์ฌ์ฉํ ์ ์๋ ๋ค์ํ ์ ์ฑ
๊ตฌ์ฑ ์ต์
์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์๋ ์ต์
๋ชฉ๋ก์ ์ซ์๋ ์ ๋ค์ด์ด๊ทธ๋จ์ ์ซ์์ ํด๋นํฉ๋๋ค.
- ์ํฌ๋ก๋ ์๋ํฌ์ธํธ(ํฌ๋) ์ ์ฑ
- ํธ์คํธ ์๋ํฌ์ธํธ ์ ์ฑ
- ApplyOnForward ์ต์
- PreDNAT ์ ์ฑ
- ์ถ์ ๋์ง ์๋ ์ ์ฑ
๋จผ์ ์ ์ฑ ์ด ์ํฌ๋ก๋ ์๋ํฌ์ธํธ(Kubernetes Pod ๋๋ OpenStack VM)์ ์ ์ฉ๋๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณธ ๋ค์ ํธ์คํธ ์๋ํฌ์ธํธ์ ๋ํ ์ ์ฑ ์ต์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ํฌ๋ก๋ ์๋ํฌ์ธํธ
์ํฌ๋ก๋ ์๋ํฌ์ธํธ ์ ์ฑ (1)
์ด๋ kubernetes ํฌ๋๋ฅผ ๋ณดํธํ๋ ์ต์ ์ ๋๋ค. Calico๋ Kubernetes NetworkPolicy ์์ ์ ์ง์ํ์ง๋ง Calico NetworkPolicy ๋ฐ GlobalNetworkPolicy์ ๊ฐ์ ์ถ๊ฐ ์ ์ฑ ๋ ์ ๊ณตํฉ๋๋ค. Calico๋ ๊ฐ Pod(์ํฌ๋ก๋)์ ๋ํ ์ฒด์ธ์ ์์ฑํ๊ณ ์ํฌ๋ก๋์ ๋ํ INPUT ๋ฐ OUTPUT ์ฒด์ธ์ FORWARD ์ฒด์ธ์ ํํฐ ํ ์ด๋ธ์ ์ฐ๊ฒฐํฉ๋๋ค.
ํธ์คํธ ์๋ํฌ์ธํธ
ํธ์คํธ ์๋ํฌ์ธํธ ์ ์ฑ (2)
CNI(์ปจํ ์ด๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค) ์ธ์๋ Calico ์ ์ฑ ์ ํธ์คํธ ์์ฒด๋ฅผ ๋ณดํธํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. Calico์์๋ ํธ์คํธ ์ธํฐํ์ด์ค์ ํ์ํ ๊ฒฝ์ฐ ํฌํธ ๋ฒํธ์ ์กฐํฉ์ ์ง์ ํ์ฌ ํธ์คํธ ์๋ํฌ์ธํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด ์ํฐํฐ์ ๋ํ ์ ์ฑ ์ํ์ INPUT ๋ฐ OUTPUT ์ฒด์ธ์ ํํฐ ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค. ๋ค์ด์ด๊ทธ๋จ์์ ๋ณผ ์ ์๋ฏ์ด (2) ๋ ธ๋/ํธ์คํธ์ ๋ก์ปฌ ํ๋ก์ธ์ค์ ์ ์ฉ๋ฉ๋๋ค. ์ฆ, ํธ์คํธ ์๋ํฌ์ธํธ์ ์ ์ฉ๋๋ ์ ์ฑ ์ ์์ฑํ๋ฉด ํฌ๋๋ก ๋ค์ด์ค๊ณ ๋๊ฐ๋ ํธ๋ํฝ์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ Calico ์ ์ฑ ์ ์ฌ์ฉํ์ฌ ํธ์คํธ ๋ฐ Pod์ ๋ํ ํธ๋ํฝ์ ์ฐจ๋จํ๊ธฐ ์ํ ๋จ์ผ ์ธํฐํ์ด์ค/๊ตฌ๋ฌธ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ์ด๊ธฐ์ข ๋คํธ์ํฌ์ ๋ํ ์ ์ฑ ๊ด๋ฆฌ ํ๋ก์ธ์ค๋ฅผ ํฌ๊ฒ ๋จ์ํํฉ๋๋ค. ํด๋ฌ์คํฐ ๋ณด์์ ๊ฐํํ๊ธฐ ์ํด ํธ์คํธ ์๋ํฌ์ธํธ ์ ์ฑ ์ ๊ตฌ์ฑํ๋ ๊ฒ์ ๋ ๋ค๋ฅธ ์ค์ํ ์ฌ์ฉ ์ฌ๋ก์ ๋๋ค.
ApplyOnForward ์ ์ฑ (3)
ApplyOnForward ์ต์ ์ ํธ์คํธ๊ฐ ์ ๋ฌํ ํธ๋ํฝ์ ํฌํจํ์ฌ ํธ์คํธ ์๋ํฌ์ธํธ๋ฅผ ํต๊ณผํ๋ ๋ชจ๋ ํธ๋ํฝ์ ์ ์ฑ ์ ์ ์ฉํ ์ ์๋๋ก Calico ๊ธ๋ก๋ฒ ๋คํธ์ํฌ ์ ์ฑ ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋ก์ปฌ ํฌ๋๋ ๋คํธ์ํฌ์ ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ ๋ฌ๋๋ ํธ๋ํฝ์ด ํฌํจ๋ฉ๋๋ค. Calico์์๋ PreDNAT๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ๋์ง ์๋ ์ ์ฑ ์ ๋ํด ์ด ์ค์ ์ ํ์ฑํํด์ผ ํฉ๋๋ค. ๋ค์ ์น์ ์ ์ฐธ์กฐํ์ธ์. ๋ํ ๊ฐ์ ๋ผ์ฐํฐ๋ ์ํํธ์จ์ด NAT๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ApplyOnForward๋ฅผ ์ฌ์ฉํ์ฌ ํธ์คํธ ํธ๋ํฝ์ ๋ชจ๋ํฐ๋งํ ์ ์์ต๋๋ค.
ํธ์คํธ ํ๋ก์ธ์ค์ Pod ๋ชจ๋์ ๋์ผํ ๋คํธ์ํฌ ์ ์ฑ ์ ์ ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ ApplyOnForward ์ต์ ์ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค. ํ์ํ ํธ์คํธ ์๋ํฌ์ธํธ์ ์ํฌ๋ก๋ ์๋ํฌ์ธํธ(Pod)์ ๋ํ ๋ ์ด๋ธ์ ์์ฑํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. Calico๋ ์๋ํฌ์ธํธ ์ ํ(ํธ์คํธ์๋ํฌ์ธํธ ๋๋ ์ํฌ๋ก๋)์ ๊ด๊ณ์์ด ๋ ์ด๋ธ ๊ธฐ๋ฐ ์ ์ฑ ์ ์ํํ ๋งํผ ๋๋ํฉ๋๋ค.
PreDNAT ์ ์ฑ (4)
Kubernetes์์ ์๋น์ค ์ํฐํฐ ํฌํธ๋ NodePorts ์ต์ ์ ์ฌ์ฉํ๊ฑฐ๋ ์ ํ์ ์ผ๋ก(Calico๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ) ํด๋ฌ์คํฐ IP ๋๋ ์ธ๋ถ IP ์ต์ ์ ์ฌ์ฉํ์ฌ ๊ด๊ณ ํจ์ผ๋ก์จ ์ธ๋ถ์ ๋ ธ์ถ๋ ์ ์์ต๋๋ค. Kube-proxy๋ DNAT๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค์ ๋ฐ์ธ๋ฉ๋ ์์ ํธ๋ํฝ์ ๊ท ํ์ ํด๋น ์๋น์ค์ Pod๋ก ์กฐ์ ํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด NodePort๋ฅผ ํตํด ๋ค์ด์ค๋ ํธ๋ํฝ์ ๋ํ ์ ์ฑ ์ ์ด๋ป๊ฒ ์ํํฉ๋๊น? ํธ๋ํฝ์ด DNAT(ํธ์คํธ:ํฌํธ์ ํด๋น ์๋น์ค ๊ฐ์ ๋งคํ)์ ์ํด ์ฒ๋ฆฌ๋๊ธฐ ์ ์ ์ด๋ฌํ ์ ์ฑ ์ด ์ ์ฉ๋๋๋ก ํ๊ธฐ ์ํด Calico๋ "preDNAT: true"๋ผ๋ globalNetworkPolicy์ ๋ํ ๋งค๊ฐ ๋ณ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
pre-DNAT๊ฐ ํ์ฑํ๋๋ฉด ์ด๋ฌํ ์ ์ฑ ์ ๋ค์ด์ด๊ทธ๋จ์ (4)(PREROUTING ์ฒด์ธ์ ๋งน๊ธ ํ ์ด๋ธ)์์ DNAT ์ง์ ์ ๊ตฌํ๋ฉ๋๋ค. ์ด๋ฌํ ์ ์ฑ ์ ์ ์ฉ์ ํธ๋ํฝ ์ฒ๋ฆฌ ๊ฒฝ๋ก์์ ํจ์ฌ ๋ ์ผ์ฐ ๋ฐ์ํ๋ฏ๋ก ์ฌ๊ธฐ์๋ ์ผ๋ฐ์ ์ธ ์ ์ฑ ์์๋ฅผ ๋ฐ๋ฅด์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ preDNAT ์ ์ฑ ์ ์ ์ฉ ์์๋ฅผ ์กด์คํฉ๋๋ค.
pre-DNAT๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฑ
์ ์์ฑํ ๋๋ ์ฒ๋ฆฌํ๋ ค๋ ํธ๋ํฝ์ ์ฃผ์ํ๊ณ ๋๋ถ๋ถ์ด ๊ฑฐ๋ถ๋๋๋ก ํ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. pre-DNAT ์ ์ฑ
์์ 'ํ์ฉ'์ผ๋ก ํ์๋ ํธ๋ํฝ์ ๋ ์ด์ ํธ์คํธ์๋ํฌ์ธํธ ์ ์ฑ
์ ์ํด ํ์ธ๋์ง ์๋ ๋ฐ๋ฉด, pre-DNAT ์ ์ฑ
์ ์คํจํ ํธ๋ํฝ์ ๋๋จธ์ง ์ฒด์ธ์ ํตํด ๊ณ์๋ฉ๋๋ค.
Calico๋ ์ ์์ ๋ฐ๋ผ ํธ๋ํฝ ๋์์ด ์์ง ์ ํ๋์ง ์์์ผ๋ฏ๋ก preDNAT๋ฅผ ์ฌ์ฉํ ๋ applyOnForward ์ต์
์ ํ์ฑํํ๋๋ก ์๋ฌดํํ์ต๋๋ค. ํธ๋ํฝ์ ํธ์คํธ ํ๋ก์ธ์ค๋ก ์ ๋ฌ๋๊ฑฐ๋ ํฌ๋ ๋๋ ๋ค๋ฅธ ๋
ธ๋๋ก ์ ๋ฌ๋ ์ ์์ต๋๋ค.
์ถ์ ๋์ง ์๋ ์ ์ฑ (5)
๋คํธ์ํฌ์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋์์๋ ํฐ ์ฐจ์ด๊ฐ ์์ ์ ์์ต๋๋ค. ๊ทน๋จ์ ์ธ ๊ฒฝ์ฐ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ๋จ๊ธฐ ์ฐ๊ฒฐ์ ๋ง์ด ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด conntrack(Linux ๋คํธ์ํน ์คํ์ ํต์ฌ ๊ตฌ์ฑ ์์)์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด์ง ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก Linux์์ ์ด๋ฌํ ์ ํ์ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋ ค๋ฉด conntrack์ ์๋์ผ๋ก ๊ตฌ์ฑ ๋๋ ๋นํ์ฑํํ๊ฑฐ๋ conntrack์ ์ฐํํ๋๋ก iptables ๊ท์น์ ์์ฑํด์ผ ํฉ๋๋ค. Calico์ ์ถ์ ๋์ง ์์ ์ ์ฑ
์ ์ฐ๊ฒฐ์ ์ต๋ํ ๋นจ๋ฆฌ ์ฒ๋ฆฌํ๋ ค๋ ๊ฒฝ์ฐ ๋ ๊ฐ๋จํ๊ณ ํจ์จ์ ์ธ ์ต์
์
๋๋ค. ์๋ฅผ ๋ค์ด ๋๊ท๋ชจ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
์ด๊ฒ์ ์ฝ์ด๋ณด์ธ์
Calico globalNetworkPolicy์์ "doNotTrack: true" ์ต์ ์ ์ค์ ํ๋ฉด **์ถ์ ๋์ง ์๋** ์ ์ฑ ์ด ๋๋ฉฐ Linux ํจํท ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ๋งค์ฐ ์ด๊ธฐ์ ์ ์ฉ๋ฉ๋๋ค. ์ ๋ค์ด์ด๊ทธ๋จ์ ๋ณด๋ฉด ์ฐ๊ฒฐ ์ถ์ (conntrack)์ด ์์๋๊ธฐ ์ ์ ์ถ์ ๋์ง ์์ ์ ์ฑ ์ด ์์ ํ ์ด๋ธ์ PREROUTING ๋ฐ OUTPUT ์ฒด์ธ์ ์ ์ฉ๋ฉ๋๋ค. ์ถ์ ๋์ง ์๋ ์ ์ฑ ์ ์ํด ํจํท์ด ํ์ฉ๋๋ฉด ํด๋น ํจํท์ ๋ํ ์ฐ๊ฒฐ ์ถ์ ์ ๋นํ์ฑํํ๋๋ก ํ์๋ฉ๋๋ค. ๊ทธ ๋ป์:
- ์ถ์ ๋์ง ์์ ์ ์ฑ ์ ํจํท๋ณ๋ก ์ ์ฉ๋ฉ๋๋ค. ์ฐ๊ฒฐ(๋๋ ํ๋ฆ)์ ๊ฐ๋ ์ด ์์ต๋๋ค. ์ฐ๊ฒฐ ๋ถ์กฑ์ ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ์ค์ํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- ์์ฒญ ๋ฐ ์๋ต ํธ๋ํฝ์ ๋ชจ๋ ํ์ฉํ๋ ค๋ฉด ์ธ๋ฐ์ด๋ ๋ฐ ์์๋ฐ์ด๋ ๋ชจ๋์ ๋ํ ๊ท์น์ด ํ์ํฉ๋๋ค. ์๋ํ๋ฉด Calico๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ต ํธ๋ํฝ์ ํ์ฉ๋ ๊ฒ์ผ๋ก ํ์ํ๊ธฐ ์ํด conntrack์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ์ถ์ ๋์ง ์์ ์ ์ฑ ์ Kubernetes ์ํฌ๋ก๋(Pod)์ ๋ํด ์๋ํ์ง ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ Pod์์ ๋๊ฐ๋ ์ฐ๊ฒฐ์ ์ถ์ ํ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ์ถ์ ๋์ง ์์ ํจํท์์๋ NAT๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ์ง ์์ต๋๋ค(์ปค๋์ด NAT ๋งคํ์ conntrack์ ์ ์ฅํ๊ธฐ ๋๋ฌธ).
- ์ถ์ ๋์ง ์๋ ์ ์ฑ ์์ "๋ชจ๋ ํ์ฉ" ๊ท์น์ ํต๊ณผํ๋ฉด ๋ชจ๋ ํจํท์ด ์ถ์ ๋์ง ์๋ ๊ฒ์ผ๋ก ํ์๋ฉ๋๋ค. ์ด๋ ๊ฑฐ์ ํญ์ ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ์๋๋ฏ๋ก ์ถ์ ๋์ง ์๋ ์ ์ฑ ์์ ํ์ฉ๋๋ ํจํท์ ๋งค์ฐ ์ ํ์ ์ผ๋ก ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค(๊ทธ๋ฆฌ๊ณ ๋๋ถ๋ถ์ ํธ๋ํฝ์ด ์ผ๋ฐ ์ถ์ ์ ์ฑ ์ ํต๊ณผํ๋๋ก ํ์ฉ).
- ์ถ์ ๋์ง ์๋ ์ ์ฑ ์ ํจํท ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ๋งจ ์ฒ์์ ์ ์ฉ๋ฉ๋๋ค. ์ด๋ Calico ์ ์ฑ ์ ์์ฑํ ๋ ์ดํดํ๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค. order:1์ ํฌ๋ ์ ์ฑ ๊ณผ order:1000์ ์ถ์ ๋์ง ์๋ ์ ์ฑ ์ด ์์ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ค์ํ์ง ์์ต๋๋ค. ์ถ์ ๋์ง ์์ ์ ์ฑ ์ ํฌ๋ ์ ์ฑ ๋ณด๋ค ๋จผ์ ์ ์ฉ๋ฉ๋๋ค. ์ถ์ ๋์ง ์์ ์ ์ฑ ์ ์ ์ฑ ๊ฐ ์คํ ์์๋ง ์กด์คํฉ๋๋ค.
doNotTrack ์ ์ฑ ์ ๋ชฉ์ ์ค ํ๋๋ Linux ํจํท ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ๋งค์ฐ ์ด๊ธฐ์ ์ ์ฑ ์ ์ํํ๋ ๊ฒ์ด๋ฏ๋ก Calico๋ doNotTrack์ ์ฌ์ฉํ ๋ applyOnForward ์ต์ ์ ์ง์ ํ๋๋ก ์๋ฌดํํฉ๋๋ค. ํจํท ์ฒ๋ฆฌ ๋ค์ด์ด๊ทธ๋จ์ ์ฐธ์กฐํ๋ฉด ๋ผ์ฐํ ๊ฒฐ์ ์ด์ ์ untracked(5) ์ ์ฑ ์ด ์ ์ฉ๋๋ค๋ ์ ์ ์ ์ํ์ธ์. ํธ๋ํฝ์ ํธ์คํธ ํ๋ก์ธ์ค๋ก ์ ๋ฌ๋๊ฑฐ๋ ํฌ๋ ๋๋ ๋ค๋ฅธ ๋ ธ๋๋ก ์ ๋ฌ๋ ์ ์์ต๋๋ค.
๊ฒฐ๊ณผ
Calico์ ๋ค์ํ ์ ์ฑ ์ต์ (ํธ์คํธ ์๋ํฌ์ธํธ, ApplyOnForward, preDNAT ๋ฐ Untracked)๊ณผ ์ด๋ฌํ ์ต์ ์ด ํจํท ์ฒ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง ์ดํด๋ณด์์ต๋๋ค. ์๋ ๋ฐฉ์์ ์ดํดํ๋ฉด ํจ๊ณผ์ ์ด๊ณ ์์ ํ ์ ์ฑ ์ ๊ฐ๋ฐํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. Calico๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ์ด๋ธ(๋ ธ๋ ๋ฐ Pod ๊ทธ๋ฃน)์ ์ ์ฉ๋๋ ๊ธ๋ก๋ฒ ๋คํธ์ํฌ ์ ์ฑ ์ ์ฌ์ฉํ๊ณ ๋ค์ํ ๋งค๊ฐ๋ณ์๋ก ์ ์ฑ ์ ์ ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ณด์ ๋ฐ ๋คํธ์ํฌ ์ค๊ณ ์ ๋ฌธ๊ฐ๋ Calico ์ ์ฑ ๊ณผ ํจ๊ป ๋จ์ผ ์ ์ฑ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ "๋ชจ๋ ๊ฒ"(์๋ํฌ์ธํธ ์ ํ)์ ํ ๋ฒ์ ํธ๋ฆฌํ๊ฒ ๋ณดํธํ ์ ์์ต๋๋ค.
๊ฐ์ฌ์ ๋ง: ๊ฐ์ฌ๋๋ฆฌ๊ณ ์ถ์ต๋๋ค.
์ถ์ฒ : habr.com