๋ชฉ์ฐจ
ย Cluster Networking
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ๋จ์ง ์๋ ์ด์ ๋ ๋คํธ์ํฌ ๊ธฐ๋ณธ ์กฐ๊ฑด์ด ์ ๋ง์์์ธ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ํนํ ์ด๋ฐ์ ๋ง์ด ๋ฐ๊ฒฌ๋๋ ๊ฒ์ ๋ ๊ฐ์ง๋ค.
โข
๋
ธ๋ ์๋ณ ์ถฉ๋: hostname / MAC์ด ๊ฒน์นจ (VM clone ํ์ ๋ ํํจ)
โข
ํฌํธ/๋ฐฉํ๋ฒฝ ๋งํ: controlplane
worker ํต์ ์ค๋ฅ
ย Node์ ๊ธฐ๋ณธ ์กฐ๊ฑด
๊ฐ ๋
ธ๋๋ ์ต์ํ ์๋๋ ๋ง์กฑํด์ผ ํ๋ค.
โข
๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋ ์ธํฐํ์ด์ค๊ฐ 1๊ฐ ์ด์ ์์ด์ผ ํจ
โข
๊ฐ ์ธํฐํ์ด์ค์ IP ์ฃผ์๊ฐ ์ค์ ๋์ด ์์ด์ผ ํจ
โข
ํธ์คํธ๋ ๊ณ ์ hostname์ ๊ฐ์ ธ์ผ ํจ
โข
ํธ์คํธ๋ ๊ณ ์ MAC ์ฃผ์๋ฅผ ๊ฐ์ ธ์ผ ํจ
ย Port
์ฟ ๋ฒ๋คํฐ์ค๋ ๊ตฌ์ฑ์์๋ค์ด ์๋ก API ํธ์ถ๋ก ๋ถ๋ ๊ตฌ์กฐ๋ผ์ ํฌํธ๊ฐ ๋งํ๋ฉด ์ฅ์ ๊ฐ ๋ฐ์ํ๋ค.
Controlplane
ํฌํธ | ์ฉ๋ | ๋๊ฐ ์ฐ๋ |
6443/TCP | Kubernetes API Server | ์ ์ฒด(์์ปค, kubectl, ์ปจํธ๋กค ํ๋ ์ธ ์ปดํฌ๋ํธ) |
2379~/TCP | etcd client API | kube-apiserver, etcd |
10250/TCP | Kubelet API | self, control plane |
10259/TCP | kube-scheduler | self |
10257/TCP | kube-controller-manager | self |
Worker Node
ํฌํธ | ์ฉ๋ | ๋๊ฐ ์ฐ๋ |
10250/TCP | Kubelet API | self, control plane |
10256/TCP | kube-proxy | self, Load balancers |
30000-32767/TCP+UDP | NodePort ์๋น์ค ๊ธฐ๋ณธ ๋ฒ์ | ์ ์ฒด |
์ฐธ๊ณ : ๊ธฐ๋ณธ ํฌํธ๋ ๋ณ๊ฒฝ๋ ์ ์๋ค.
ย Pod Networking
๋
ธ๋ ๊ฐ ๋คํธ์ํฌ๊ฐ ๋ฌผ๋ก ๋ง์ถฐ์ ธ์ผ ํ์ง๋ง ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ๋ฆฌ๋ ค๋ฉด Pod ๋ ๋ฒจ์ ๋คํธ์ํฌ๊ฐ ์ถ๊ฐ๋ก ํ์ํ๋ค.
ํด๋ฌ์คํฐ์์ ์ค์ ๋ก ๋์ํ๋ ๊ฒ์ ๊ฒฐ๊ตญ Pod์ด๊ณ , Pod๋ผ๋ฆฌ ํต์ ์ด ๋์ง ์์ผ๋ฉด ์๋น์ค๋ ์ ์ ๋์์ ํ์ง ๋ชปํ๋ค.
ย Pod Networking ์กฐ๊ฑด
์ฟ ๋ฒ๋คํฐ์ค๋ โ์ด๋ป๊ฒ ๊ตฌํํ๋ผโ๋ ๊ฒ์ ์ฃผ์ง ์์ง๋ง โ๋ฐ๋์ ๋ง์กฑํด์ผ ํ๋ ์๊ตฌ์ฌํญโ์ ๋ช
ํํ๊ฒ ๋งํ๋ค.
1.
๋ชจ๋ Pod๋ ๊ณ ์ ํ IP๋ฅผ ๊ฐ์ง๋ค.
2.
๊ฐ์ ๋
ธ๋ ์์์, Pod๋ ๊ทธ IP๋ก ๋ค๋ฅธ Pod์ ๋ฐ๋ก ๋ถ์ ์ ์์ด์ผ ํ๋ค.
3.
๋ค๋ฅธ ๋
ธ๋์ ์๋ Pod์๊ฒ๋, ๊ฐ์ IP๋ก ๋ฐ๋ก ๋ถ์ ์ ์์ด์ผ ํ๋ค.
4.
NAT ๊ท์น ์์ด๋(= ์ฃผ์ ๋ณํ ์์ด๋) Pod IP๋ก end-to-end ํต์ ์ด ๋์ด์ผ ํ๋ค.
IP ๋์ญ์ด ๋ญ๋ ์๊ด์๋ค. ์ค์ํ ๊ฑด Pod IP๋ก ๋
ธ๋ ๊ฒฝ๊ณ๋ฅผ ๋์ด ์ง์ ํต์ ์ด ๊ฐ๋ฅํด์ผ ํ๋ค.
ย ๊ตฌํ
๋
ธ๋๋ค์ด ์ธ๋ถ ๋คํธ์ํฌ(์: 192.168.1.0/24)์ ๋ถ์ด์๋ค๊ณ ๊ฐ์ ํ๋ค:
โข
node1: 192.168.1.11
โข
node2: 192.168.1.12
โข
node3: 192.168.1.13
1) ๊ฐ ๋ ธ๋์ Pod ์ ์ฉ ๋คํธ์ํฌ ๋ง๋ค๊ธฐ
Pod๋ ์ปจํ
์ด๋ ๋คํธ์ํฌ ๋ค์์คํ์ด์ค์์ ๋์๊ฐ๋ค. ๋๋ฌธ์ ๋
ธ๋ ์์ Pod๋ค์ ๋ถ์ผ ๋ด๋ถ ๋คํธ์ํฌ๊ฐ ํ์ํ๋ค.
โข
๋
ธ๋๋ง๋ค bridge ์์ฑ
โฆ
๋
ธ๋ ๋ด๋ถ์ bridge ๋คํธ์ํฌ๋ฅผ ํ๋ ๋ง๋ ๋ค.
โฆ
Pod ๋ค์์คํ์ด์ค๋ ์ด bridge์ ๋ถ๋๋ค
โข
๋
ธ๋๋ณ Pod subnet์ ๋ฐ๋ก ์ค๋ค
โฆ
node1 Pod subnet: 10.244.1.0/24
โฆ
node2 Pod subnet: 10.244.2.0/24
โฆ
node3 Pod subnet: 10.244.3.0/24
โข
๊ฐ ๋
ธ๋์ bridge์ IP๋ฅผ ๋ถ์ฌํ๋ค
โฆ
node1 bridge: 10.244.1.1
โฆ
node2 bridge: 10.244.2.1
โฆ
node3 bridge: 10.244.3.1
์ฌ๊ธฐ๊น์ง ์๋ฃํ๋ฉด โํ ๋
ธ๋ ์์์ Pod๋ผ๋ฆฌ ํต์ โ์ ๊ฐ๋ฅํ๋ค
2) ๋คํธ์ํฌ ์์
Pod ํ๋๋ฅผ ๋คํธ์ํฌ์ ๋ถ์ด๋ ค๋ฉด ๋งค๋ฒ ์๋ ๊ณผ์ ์ด ํ์ํ๋ค:
# Create veth pair
ip link add ...
# Attach veth pair
ip link set ...
ip link set ...
# Assign IP Address
ip -n <namespace> addr add ...
ip -n <namespace> route add ...
# Bring Up Interface
ip -n <namespace> link set ...
Shell
๋ณต์ฌ
์ฆ Pod๊ฐ ํ๋ ์์ฑ๋ ๋๋ง๋ค ๋คํธ์ํฌ ์์
์ด ๋ฐ๋ณต๋๋ค.
3) ๋ผ์ฐํ
์ด์ ๋ค๋ฅธ ๋
ธ๋์ Pod์ ํต์ ์ด ๊ฐ๋ฅํ ๊น? node1์ Pod๊ฐ node2์ Pod๋ก ping์ ๋ ๋ฆฌ๋ฉด ํ์ฌ ์ํ์์๋ ์คํจํ๋ค.
node1์
์ฅ์์๋ 10.244.2.0/24๊ฐ ์๊ธฐ ๋คํธ์ํฌ๊ฐ ์๋๋ค. ๊ทธ๋์ ์ด๋๋ก ๋ณด๋ด์ผ ํ๋์ง ๋ชจ๋ฅธ๋ค.
ํด๊ฒฐ์ ๋
ธ๋ ๋ผ์ฐํ
ํ
์ด๋ธ์ ๋ค๋ฅธ ๋
ธ๋ Pod Subnet ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด๋ค.
node1$ ip route add 10.244.2.2 via 192.168.1.12
node1$ ip route add 10.244.3.2 via 192.168.1.13
node2$ ip route add 10.244.1.2 via 192.168.1.11
node2$ ip route add 10.244.3.2 via 192.168.1.13
node3$ ip route add 10.244.1.2 via 192.168.1.11
node3$ ip route add 10.244.2.2 via 192.168.1.12
Shell
๋ณต์ฌ
Pod IP ๋์ญ(10.244.x.x) ๋ค์ ๋
ธ๋ ๊ฐ ๋คํธ์ํฌ(192.168.1.x) ์์์ ๋ผ์ฐํ
ํด์ฃผ๋ ๊ตฌ์กฐ์ด๋ค. ์์ ๊ฐ์ด ๋ชจ๋ ๋
ธ๋์ ๋ํด ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํ๋ฉด Pod IP๊ฐ ๋
ธ๋ ๊ฒฝ๊ณ๋ฅผ ๋์ด end-to-end ํต์ ์ ํ๋ค.
๊ฒฐ๊ตญ CNI
bridge ์์ฑ โ veth ๋ถ์ด๊ธฐ โ IP ํ ๋น โ route ์ถ๊ฐ
์ด ๊ณผ์ ์ ์คํฌ๋ฆฝํธ๋ก ๋ง๋ค์ด ์๋ ์คํํ๋ ๊ฒ์ ๋๊ท๋ชจ ํ๊ฒฝ์์ ๋ถ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ ์ฟ ๋ฒ๋คํฐ์ค๋
โํ๋๊ฐ ์์ฑ๋์๋ง์ ๋คํธ์ํน ๊ตฌ์ฑ๋ ์๋์ผ๋ก ์ํ๋์ด์ผ ํ๋คโ
๋ผ๊ณ ๋งํ๋ค. ๊ทธ ์๋ํ์ ์ ์ ์ด CNI๋ค
CNI๊ฐ ํ๋ ์ญํ ์:
โข
์ฟ ๋ฒ๋คํฐ์ค(Runtime)์๊ฒ
โฆ
โ์ปจํ
์ด๋ ๋ง๋ค๋ฉด ADD๋ก ํ๋ฌ๊ทธ์ธ ํธ์ถํดโ
โฆ
โ์ปจํ
์ด๋ ์ง์ฐ๋ฉด DEL๋ก ํ๋ฌ๊ทธ์ธ ํธ์ถํดโ
โข
ํ๋ฌ๊ทธ์ธ(์คํฌ๋ฆฝํธ)์๊ฒ
โฆ
โ์ด๋ฐ ์ธํฐํ์ด์ค(add/del/check)๋ฅผ ๋ง์ถฐ์ผ ํดโ
โฆ
โ์ปจํ
์ด๋ID/๋ค์์คํ์ด์ค ๊ฐ์ ํ๋ผ๋ฏธํฐ ๋ฐ์์ผ ํดโ
์ฆ, ์ค๊ฐ์(ํ์ค ์ธํฐํ์ด์ค)๋ก์จ ๋ฐํ์๊ณผ ๋คํธ์ํฌ ๊ตฌํ์ฒด๋ฅผ ์ฐ๊ฒฐํด์ค๋ค.
์ด์ ๊ฒ์๋ฌผ
๋ค์ ๊ฒ์๋ฌผ

