Kubernetes์ (์ปจ์ , ํน์ ์ฝ์ ํธ๋ผ ๋ถ๋ฆฌ๋) Concepts ์ค์์ Service์ ์ฃผ์ ๋ฅผ ๋ค๋ค๋ด ๋๋ค.
CloudNet@์์ ์งํํ๊ณ ์๋ K8s Advanced Network Study(์ดํ, KANS)๋ฅผ ํตํด ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌํฉ๋๋ค.
Service Docs์ ๋ช
๋ฃํ๊ฒ ์ ํ์๊ธด ํ์ง๋ง,
๋จ์ ๊ธฐ๋ฅ์ผ๋ก ์๊ฒ ์ชผ๊ฐ Pod๋ ๊ฒฐ๊ตญ ๊ฐ๋ณ์ ์ธ IP๋ฅผ ๊ฐ๊ฒ๋๋๋ฐ, Blue/Green ์ด๋ฏธ์ง ์
๋ฐ์ดํธ๋ฅผ ๋น๋กฏํด์ ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ ์๋ก์ด Pod์ IP๋ฅผ ๋ค๋ฅธ Pod๊ฐ IP์ฃผ์ ๊ทธ๋๋ก ์ ๊ทผํ๊ธฐ ์ด๋ ค์ ์ค๊ฐ์ ๋ ๊ฒ์ผ๋ก ์ดํด๋ฅผ ํด๋ณด์์ต๋๋ค.
์ง๊ธ ๋ ๋ฒจ์์๋ ๊ฐ์ ์ฉ ๊ณต์ ๊ธฐ์์ ๋์ IP ํ๊ฒฝ์ ๋์ํ๊ธฐ ์ํด, DDNS๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ, MAC ADDR ๊ธฐ์ค์ผ๋ก Static IP(DHCP๋ชจ๋์ ํ์ฉ)๋ฅผ ์์ฝํ๋ ๊ฒ์ ์์ ๊ทธ ์ด๋๊ฐ๋ก ๋ฉ๋ํ๊ณ ๊ณ์ ์จ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
1. Service type ๊ทธ๋ฆฌ๊ณ ClusterIP์ NodePort
Service type์ expose(๋ ธ์ถ)๋ฒ์์ ๋ฐ๋ผ, ์๋์ ๊ฐ์ด 4๊ฐ์ง์ ๋๋ค.
- ClusterIP(default): (ํด๋ฌ์คํฐ์) ๋ด๋ถ IP ๋์ญ์ ๋ ธ์ถ์ํต๋๋ค. ๊ฐ์ ๋ป์ ๋์ผ ํด๋ฌ์คํฐ ๋ด๋ถ์์๋ง ํด๋น ์๋น์ค์ ์ ๊ทผํ ์ ์์ต๋๋ค. Service์ ๋ํ ๊ณ ์ ๋ ํธ์ถ๋ฐฉ๋ฒ์ ๊ตฌ์ฑํ๋๋ฐ, Static Virtual IP(๊ณ ์ ๊ฐ์IP)์ Domain Name(์ฃผ์, ํน์ ๋๋ฉ์ธ ๋ค์)์ ์ ๊ณตํฉ๋๋ค.
- NodePort: (ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ๋) ๊ฐ ๋
ธ๋์ ์ธ๋ถIP๋ฅผ ํตํด ์ ๊ทผํ ์ ์๋ ํฌํธ๋ฅผ ์ง์ ํฉ๋๋ค.
์ด๋ป๊ฒ๋ณด๋ฉด ๊ณต์ ๊ธฐ์
port-forward์ ๋๋ก ์๊ฐํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ง ๋จ๋ฉด ๋ ์๋ก์ ๋ณด์ด๋ k8s ์ธ์ง๋ผ, ์ด์ ์์ผ ๋์น๋ฅผ ์ฑ์ง๋ง ClusterIP๋ ๋ฐฐํ์ ์ธ ๊ฒ์ ์๋๋๋ค. - LoadBalancer: ๊ฐ CSP์์ ์ ๊ณต๋๋ LB๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋น์ค์ “์ธ๋ถ” ๋
ธ์ถ๋ฒ์ ๊ฒฐ์ ๊ถ์ LB์ ๋๊ธฐ๋ ๊ฒ์ผ๋ก๋ง ์ดํดํ๋ ์ค์ธ๋ฐ,
์ด๊ฑด ๋ค์์ฃผ์ฐจ์ ๋ค๋ค์ง ์์ ์ธ์ง๋ผ ์ด๋ฒ์๋ ๋ค๋ฃจ์ง ์์ต๋๋ค. - ExternalName: CNAME ๋ ์ฝ๋ ๊ด๋ฆฌ์ด๋ฉฐ, ํ๋ก์๊ฐ ๊ตฌ์ฑ๋์ง ์๋๋ค๊ณ ํฉ๋๋ค.
no proxying of any kind
DNS๊ณต๊ธ์๋ ํธํ(ACME)์ด ์๋๋ฉด ๋์ด๋๊ฐ ๋งค์ฐ ๋์์ง๋ ๊ฑธ๋ก๋ง ํ์ .
์ด ๋ํ ์๋ต.
์ด๊ฑฐ๋ก ClusterIP์ NodePort๋ฅผ ๋ค ์ดํดํ๋ฉด ์ข๊ฒ ์ง๋ง, iptables ์ฒ๋ฆฌ๋ ์ดํด๊ฐ ํ์ํ์ต๋๋ค.
๊ฒฐ๊ตญ Network traffic์ ๋ฌธ์ ๋ผ ์ด๋์์ ์ด๋ฅผ ์ฒ๋ฆฌํ๋์ง๋ ๋ด์ผํฉ๋๋ค.
a. ClusterIP
- iptables: Control Plane์ iptables Rule์ ์ํด ๊ฐ ๋ ธ๋์ ๋ฐฐํฌ๋ Pod์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
- load balancing: ๋๋ค์ผ๋ก ๊ฐ ํ๋์ ๋ถํ๋ถ์ฐ(๊ณตํต)
sessionAffinity: ๊ณ ์ ์ ์ธ ์ ์ ์ง์ ๋ฐ ์ต๋ ์ธ์ ๊ณ ์ ์๊ฐ[default: 10800 (sec)]์ ์ค์ ํ ์ ์์.
ClusterIP์ ๋จ์
- Health Check(H/C) ๋ถ๊ฐ: ์ดํ๋ฆฌ์ผ์ด์
์ ์ค๋ฅ๊ฐ ์๋ Pod์ ์ ๊ทผ ๊ฐ๋ฅ.
Readiness Probe์ค์ ์ผ๋ก ์๋น์ค ์๋ํฌ์ธํธ์์ ์ ์ธํ์ฌ ์ด๋ฅผ ๊ตฌํํ ์ ์์. sessionAffinity์ด์ธ์๋ ๋ถ์ฐ ๋ฐฉ์ ์ค์ ๋ถ๊ฐ๋ฅ.
cf.IPVS: ๋ค์ํ ๋ถ์ฐ๋ฐฉ์(์๊ณ ๋ฆฌ์ฆ) ๊ฐ๋ฅ.
b. NodePort
- iptables: ํน์ Node์ iptables์ ์ํด ์ด๋ฃจ์ด์ง๋๋ค. ๋
ธ๋์ Public IP ๋ฑ์ ํตํด ์ ์ํ๋๋ฐ
ํด๋น ๋ ธ๋ ์์ ์๋ Pod์ฌ๋ ๋ค๋ฅธ ๋ ธ๋๋ก ๋ฆฌ๋๋ ์ ๋๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. - load balancing: ๋๋ค์ผ๋ก ๊ฐ ํ๋์ ๋ถํ๋ถ์ฐ(๊ณตํต)
NodePort์ ๋จ์
- ๋ณด์ ์ทจ์ฝ: ์ธ๋ถ์์ ๋ ธ๋์ Public IP ๋ฐ ํฌํธ๋ก ์ ์ํ๋๊น. LoadBalancer Service Type์ผ๋ก ์ธ๋ถ ๊ณต๊ฐ ์ต์ํ.
- ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ๋ถ ํด๋ผ์ด์ธํธ์ IP๋ฅผ ์น์๋ฒ์์ ์์ง ๋ถ๊ฐํจ. ๋
ธ๋์ IP๋ก SNAT ๋๊ธฐ ๋๋ฌธ.
{ externalTrafficPolicy: local }์ค์ ์, ํด๋น ๋ ธ๋์ ๋ฐฐ์น๋ ํ๋๋ก๋ง ์ ์๋๊ธฐ์ SNAT๋์ง ์์ ์์ง๊ฐ๋ฅ. { externalTrafficPolicy: local }์ํ์์ ํ๋๊ฐ ์กด์ฌํ์ง ์๋ ๋ ธ๋IP์ NodePort๋ก ์ ์ ์ ์คํจ.
์ด ๋ํ LB Service Type์์ Probe(H/C)๋ก ๋์ ๊ฐ๋ฅ.
2. kube-proxy ๋ชจ๋ ์ ๋ฆฌ
Mode: iptables / ipvs / nftables / eBPF
kube-proxy๊ฐ ์ด์ kubernetes ์ด์ฉ์ optional๋ก ๋์์ง๋ง, ๊ฐ ๋ชจ๋ ์์ฒด๋ ์ธ์งํ ํ์์ฑ์ด ์์์ต๋๋ค.
a. user space (deprecated)
- 1 Port : 1 Service Mapping
- user space -> kernel space: ๋ณํ ๋น์ฉ
- kube-proxy ํ๋ก์ธ์ค ์ฅ์ ์, SPOF. ๋์์ด ์ด๋ ค์
b. iptables (iptables APIs -> netfilter subsystem)
- SPOF ํด์:
netfilter๊ฐ proxy ์ญํ ์ ๋์ ์ํ - kube-proxy: netfilter rule ์์ ๋ด๋น, DaemonSet ๊ตฌ์ฑ
c. IPVS (kernel IPVS, iptables APIs -> netfilter subsystem)
์ฌ์ค ์ด๊ฑฐ ๋๋ฌธ์ ์ ๋ฆฌ๋ฅผ ํ์ต๋๋ค.
IPVS๋?- Linux ์ปค๋๋จ์์ ์ ๊ณตํ๋ L4 Load Balancer: transport์์๋ Port๋ก ์๋น์ค ๊ตฌ๋ถ
- iptables์ ์ ์ฌํ netfilter hook ๊ธฐ๋ฅ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋,
hash table์ default ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ์ฌ์ฉํ๊ณ , kernel space์์ ๋์. - ๊ฒฐ๊ตญ, Packet LB ์ํ์ iptable๋ณด๋ค ๋์ ์ฑ๋ฅ์ ๋ณด์.
- Proxy rule sync ๋ฐ ๋ฆฌ๋๋ ์ latency, ๋์ network traffic ์ฒ๋ฆฌ์ ์์ด ์ฑ๋ฅ ํฅ์.
- iptables์ ์ ์ฌํ netfilter hook ๊ธฐ๋ฅ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋,
- Linux ์ปค๋๋จ์์ ์ ๊ณตํ๋ L4 Load Balancer: transport์์๋ Port๋ก ์๋น์ค ๊ตฌ๋ถ
d. nftables (ntables API -> netfilter subsystem)
- Only available on Linux Node, specific Linux kernel(>=5.13) required.
- Alternative of iptables API for speed and scailability.
- ํ์ฌ k8s v1.31 ๊ธฐ์ค, ๋ชจ๋ network plugin๊ณผ ํธํ๋์ง ์์ ๊ฒ์ด๋ผ๊ณ ํ์ธ.
e. eBPF (+XDP Networking Module)
- L3/L4 ๊ตฌ๊ฐ(Netfilter <-> TCP/UCP)์ ๊ฑฐ์น๋ kernel overhead๋ง์ bypass ๋ชฉ์
kkumtree
Source code on GitHub
ยฉ 2025 kkumtree and contributors All rights reserved.
Licensed under
CC BY-NC-ND 4.0