(4์ฅ)์ฟ ๋ฒ๋คํฐ์ค ๋คํธ์ํน์ ๊ธฐ์ด: Pod๋ ์ด๋ป๊ฒ ํต์ ํ ๊น?
๐ ์ฟ ๋ฒ๋คํฐ์ค ๋คํธ์ํน์ ๊ธฐ์ด: Pod๋ ์ด๋ป๊ฒ ํต์ ํ ๊น?
์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฒ์ ์ ํ ์ฌ๋๋ค์๊ฒ ๊ฐ์ฅ ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ ์ค ํ๋๋ ๋ฐ๋ก ๋คํธ์ํน์
๋๋ค.
Pod ๊ฐ ํต์ ์ ์ด๋ป๊ฒ ๋๋์ง, ์ธ๋ถ์์ ์ ๊ทผ์ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋๋์ง,
ClusterIP, DNS, CNI ํ๋ฌ๊ทธ์ธ์ด๋ ๋จ์ด๋ค์ ๋ฌด์์ ์๋ฏธํ๋์ง, ์ด ๊ธ์์ ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
๐งฉ ์ฟ ๋ฒ๋คํฐ์ค ๋คํธ์ํน์ ๊ธฐ๋ณธ ์ฒ ํ
์ฟ ๋ฒ๋คํฐ์ค๋ ๋ค์๊ณผ ๊ฐ์ ๋คํธ์ํน ์ฒ ํ์ ๋ฐ๋ฆ ๋๋ค:
- ๋ชจ๋ Pod๋ ๋ค๋ฅธ ๋ชจ๋ Pod์ ์ง์ ํต์ ํ ์ ์์ด์ผ ํ๋ค.
- Pod๋ ๊ณ ์ ํ IP๋ฅผ ๊ฐ์ง๋ค.
- ํต์ ์ NAT(Network Address Translation)์ ์ฌ์ฉํ์ง ์๋๋ค.
์ฆ, ๋ง์น ํ๋์ ํํํ ๋คํธ์ํฌ์ ๋ชจ๋ Pod๊ฐ ์ฐ๊ฒฐ๋ ๊ฒ์ฒ๋ผ ๋์ํด์ผ ํฉ๋๋ค.
๐ ์ด๋ ๊ธฐ์กด์ ๊ฐ์๋จธ์ ๋คํธ์ํน ๋ฐฉ์๊ณผ ํฐ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
๐ฆ Pod ๊ฐ ํต์ ์ ๊ตฌ์กฐ
๊ฐ Pod๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ด๋ถ์์ ๊ณ ์ ํ IP ์ฃผ์๋ฅผ ๋ถ์ฌ๋ฐ์ต๋๋ค.
ํ์ง๋ง ์ด IP๋ ํด๋ฌ์คํฐ ๋ด๋ถ ์ ์ฉ์ด๋ฉฐ, ์ธ๋ถ์์๋ ์ ๊ทผํ ์ ์์ต๋๋ค.
์์:
pod-a: 10.244.0.12pod-b: 10.244.2.7
pod-a โ pod-b ์ง์ ํต์ ๊ฐ๋ฅ (๋ด๋ถ IP ๊ธฐ๋ฐ)
๐ Service์ ClusterIP๋?
Pod๋ ์์ฃผ ์์ฑยท์ญ์ ๋๋ฏ๋ก, IP๊ฐ ๋ฐ๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Service๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๐ Service๋?
- ์ฌ๋ฌ Pod์ ๊ณตํต ์ฃผ์๋ฅผ ๋ถ์ฌํ๋ ์ฟ ๋ฒ๋คํฐ์ค ๊ฐ์ฒด
- Pod IP๊ฐ ๋ฐ๋์ด๋ Service๋ฅผ ํตํด ๊ณ์ ์ ๊ทผ ๊ฐ๋ฅ
๐ ClusterIP๋?
- ๊ธฐ๋ณธ ์๋น์ค ํ์
- ๋ด๋ถ ํต์ ์ ์ฉ ๊ฐ์ IP๋ฅผ ๋ถ์ฌ
kubectl expose deployment myapp --port=80 --target-port=8080 --name=myapp-svc
| ํญ๋ชฉ | ์ค๋ช |
|---|---|
| ๊ธฐ๋ณธ ํ์ | ClusterIP (๋ด๋ถ ์ ์ฉ) |
| ์ธ๋ถ ์ ๊ทผ | โ ๋ถ๊ฐ๋ฅ |
| ๋ด๋ถ ํต์ | โ ๊ฐ๋ฅ (DNS ์ด๋ฆ์ผ๋ก ์ฐ๊ฒฐ) |
| ์๋ ๋ก๋๋ฐธ๋ฐ์ฑ | โ ์ฌ๋ฌ Pod์ ์๋ ๋ถ์ฐ |
๐ง DNS๋ก ์ด๋ฆ ๊ธฐ๋ฐ ํต์ ํ๊ธฐ
์ฟ ๋ฒ๋คํฐ์ค๋ CoreDNS๋ฅผ ์ด์ฉํด
์๋น์ค๋ช
.๋ค์์คํ์ด์ค.svc.cluster.local ํํ์ ์ฃผ์๋ก ํต์ ํฉ๋๋ค.
curl http://myapp-svc
DNS๋ ์๋น์ค ์ด๋ฆ๋ง์ผ๋ก๋ Pod ๊ฐ ์ฐ๊ฒฐ์ ๊ฐ๋ฅํ๊ฒ ํด์ค๋๋ค.
๐ ์ค์ต ์์: ClusterIP ํต์ ํ์ธ
kubectl create deployment web --image=nginx
kubectl expose deployment web --port=80 --target-port=80 --name=web-svc
kubectl run curl-pod --image=busybox --restart=Never -it -- sh
wget -qO- http://web-svc
๐ CNI ํ๋ฌ๊ทธ์ธ: ๋คํธ์ํฌ์ ํต์ฌ
์ฟ ๋ฒ๋คํฐ์ค ์์ฒด๋ ๋คํธ์ํฌ๋ฅผ ์ง์ ๊ตฌํํ์ง ์์ผ๋ฉฐ,
CNI (Container Network Interface) ํ๋ฌ๊ทธ์ธ์ ํตํด Pod ๊ฐ ํต์ ์ ์ง์ํฉ๋๋ค.
| CNI ์ข ๋ฅ | ํน์ง |
|---|---|
| Flannel | ๊ฐ๋จํ ๊ตฌ์กฐ, ํ์ต์ฉ์ ์ ํฉ |
| Calico | ๊ณ ์ฑ๋ฅ, ๋คํธ์ํฌ ์ ์ฑ ์ง์ |
| Cilium | BPF ๊ธฐ๋ฐ, ๋ณด์/ํ์ฅ์ฑ ์ฐ์ |
| Weave | ์ค์น ๊ฐํธ, ์๊ท๋ชจ์ ์ ํฉ |
๊ธฐ๋ณธ ์ค์ ํ์ผ์
/etc/cni/net.d์ ์กด์ฌํฉ๋๋ค.
๐ ํด๋ฌ์คํฐ ์ธ๋ถ ์ ๊ทผ ๋ฐฉ๋ฒ
| ํ์ | ์ค๋ช |
|---|---|
| NodePort | ๋ ธ๋ IP + ํฌํธ (30000~32767)๋ก ์ ๊ทผ ๊ฐ๋ฅ |
| LoadBalancer | ํด๋ผ์ฐ๋์์ ์ธ๋ถ IP ์๋ ํ ๋น |
| Ingress | ๋๋ฉ์ธ/๊ฒฝ๋ก ๊ธฐ๋ฐ ๋ผ์ฐํ + TLS ์ง์ |
Ingress๋ ํ๋์ URL๋ก ์ฌ๋ฌ ์๋น์ค๋ฅผ ๋๋์ด ์ ๊ณตํ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค.
๐งฉ ํต์ฌ ์์ฝ ์ ๋ฆฌ
| ๊ตฌ์ฑ ์์ | ์ค๋ช |
|---|---|
| Pod IP | Pod์ ์๋ ๋ถ์ฌ๋๋ ๋ด๋ถ IP |
| Service | ์ฌ๋ฌ Pod์ ํ๋์ ๊ฐ์ IP ์ ๊ณต |
| ClusterIP | ๋ด๋ถ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ ์๋น์ค IP |
| DNS | ์๋น์ค ์ด๋ฆ โ IP ๋งคํ |
| CNI | ๋คํธ์ํฌ ๊ตฌ์ฑ ์ฒ๋ฆฌ (IP ํ ๋น ๋ฐ ๋ผ์ฐํ ๋ฑ) |
| Ingress | ์ธ๋ถ ์ ๊ทผ์ ์ํ ๊ณ ๊ธ ๋ผ์ฐํ ์ค์ |
๐ ๋ง๋ฌด๋ฆฌ
- ์ฟ ๋ฒ๋คํฐ์ค์ ๋คํธ์ํน์ Pod ๊ฐ ํต์ ์ ์ํ ์๋ํ๋ ํ๊ฒฝ์ ๋๋ค.
- ์ธ๋ถ ์ฐ๊ฒฐ์ ์ํด์๋ NodePort, LoadBalancer, Ingress ๋ฑ์ ์กฐํฉํฉ๋๋ค.
- DNS์ CNI๋ฅผ ์ดํดํ๋ฉด ์์ ์ ์ธ ์๋น์ค ๋ฐฐํฌ๊ฐ ํจ์ฌ ์ฌ์์ง๋๋ค.
โ๏ธ ๋คํธ์ํน์ ์ ์ดํดํ๋ฉด ํด๋ฌ์คํฐ ์ค๊ณ์ ๋๋ฒ๊น ๋ฅ๋ ฅ์ด ์ฅ์ฅ ์๋๋๋ค!
๐ ์ฐธ๊ณ ์๋ฃ:
- https://kubernetes.io/docs/concepts/services-networking/
- https://www.weave.works/
- https://cilium.io/
- ํ๊ตญํด๋ฆฌํ ๋ํ ์์ธ๊ฐ์์บ ํผ์ค ๋น ๋ฐ์ดํฐ๊ณผ ์ดํ๊ฑด ๊ต์ ๊ฐ์์๋ฃ