ํฐ์คํ ๋ฆฌ ๋ทฐ
Kubernetes ํ๋ ๊ฐ ํต์ ์ ๋ชจ๋ ๊ฒ - Service, CoreDNS, kube-proxy, EndpointSlice๊น์ง
kimub 2026. 3. 29. 15:37๐ค AI Assisted Content
์ด ๊ธ์ AI(Claude, Anthropic)์ ๋์์ ๋ฐ์ ์์ฑ๋์์ต๋๋ค.
์์ฑ์๊ฐ ๋ด์ฉ์ ๊ฒํ ํ๊ณ ํธ์งํ์ผ๋, AI๊ฐ ์ด์ ์์ฑ ๋ฐ ๊ตฌ์ฑ์ ์ฐธ์ฌํ์์ ๋ฐํ๋๋ค.
์ ํ๋๋ผ๋ฆฌ ์ง์ ํต์ ํ๋ฉด ์ ๋ ๊น
Kubernetes๋ฅผ ์ฒ์ ๋ฐฐ์ฐ๋ฉด ์์ฐ์ค๋ฝ๊ฒ ์ด๋ฐ ์๊ฐ์ ํ๊ฒ ๋ฉ๋๋ค. "ํ๋๋ง๋ค IP๊ฐ ์์ผ๋๊น, ๊ทธ๋ฅ IP๋ก ํต์ ํ๋ฉด ๋์ง ์์๊น?"
์ ๋ฉ๋๋ค. ์ ํํ ๋งํ๋ฉด ํ ์๋ ์์ง๋ง ํ๋ฉด ์ ๋ฉ๋๋ค. ๋ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฒซ์งธ, ํ๋๋ ์ธ์ ๋ ๊ต์ฒด๋ ์ ์๊ณ , ๊ต์ฒด๋๋ฉด IP๊ฐ ๋ฐ๋๋๋ค. Deployment๊ฐ ํ๋๋ฅผ ์๋ก ๋ง๋ค๋ฉด ์ด์ ํ๋์ IP๋ ์ฌ๋ผ์ง๊ณ ์์ ํ ์๋ก์ด IP๊ฐ ํ ๋น๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์ด์ IP๋ก ๊ณ์ ์์ฒญ์ ๋ณด๋ด๋ฉด ์ฐ๊ฒฐ์ด ๋๊น๋๋ค.
๋์งธ, ๊ต์ฒด๋ ํ๋์ ์ IP๋ฅผ ์์๋ด๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. ์ IP๋ Kubernetes API๋ฅผ ์ง์ ์กฐํํด์ผ๋ง ์ ์ ์์ต๋๋ค. ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ Kubernetes API ํด๋ผ์ด์ธํธ๋ฅผ ๋ด์ฅํ๋ ๊ฑด ํ์ค์ ์ด์ง ์์ต๋๋ค.
์ฌ์ค ์ด ๋ฌธ์ ๋ ์๋ก์ด ๊ฒ ์๋๋๋ค. ์ธํฐ๋ท์์๋ ์๋ฒ์ IP ์ฃผ์๊ฐ ๋ฐ๋ ์ ์๊ธฐ ๋๋ฌธ์, ๊ธฐ์ตํ๊ธฐ ์ฌ์ด ๋๋ฉ์ธ ๋ค์๊ณผ ์ด๋ฅผ IP๋ก ๋ณํํด์ฃผ๋ DNS๋ฅผ ๋์ ํด์ ํด๊ฒฐํ์ต๋๋ค. Kubernetes๋ ๊ฐ์ ์ ๋ต์ ์๋๋ค.
Service — ๋ณํ์ง ์๋ ๊ฐ์์ ์ง์ ์
Kubernetes์ Service๋ ๋ณต์์ ํ๋๊ฐ ๊ณต์ ํ ์ ์๋ ๊ณ ์ ๋ ๊ฐ์ IP ์ฃผ์(ClusterIP)์ ๋๋ค. Service๋ Deployment์ฒ๋ผ ๋ ์ด๋ธ ์ ๋ ํฐ๋ฅผ ์ฌ์ฉํด์ ๋์ ํ๋๋ฅผ ๋์จํ๊ฒ ์ฐ๊ฒฐํฉ๋๋ค. ํ๋๊ฐ ๊ต์ฒด๋์ด๋ ๋ ์ด๋ธ๋ง ๊ฐ์ผ๋ฉด Service๋ ์๋์ผ๋ก ์ ํ๋๋ฅผ ๋์์ ํฌํจ์ํต๋๋ค.
apiVersion: v1
kind: Service
metadata:
name: my-backend
spec:
selector:
app: backend # ์ด ๋ ์ด๋ธ์ ๊ฐ์ง ํ๋๋ค์ด ๋์
ports:
- port: 80
targetPort: 8080
์ด Service๋ฅผ ๋ง๋ค๋ฉด my-backend๋ผ๋ ์ด๋ฆ๊ณผ 10.96.x.x ํํ์ ClusterIP๊ฐ ํ ๋น๋๊ณ , ์ด ์ ๋ณด๊ฐ ํด๋ฌ์คํฐ ๋ด๋ถ DNS์ ๋ฑ๋ก๋ฉ๋๋ค. ๋ค๋ฅธ ํ๋๋ IP ๋์ my-backend๋ผ๋ ์ด๋ฆ์ผ๋ก ํต์ ํ ์ ์๊ฒ ๋ฉ๋๋ค.
CoreDNS — ํด๋ฌ์คํฐ ์ ์ฉ DNS ์๋ฒ
"ํด๋ฌ์คํฐ ๋ด๋ถ DNS"๊ฐ ๋ฐ๋ก CoreDNS์
๋๋ค. kube-system ๋ค์์คํ์ด์ค์์ Deployment๋ก ์คํ๋๋ ํ๋์ด๋ฉฐ, ๋ณดํต 2๊ฐ์ ๋ ํ๋ฆฌ์นด๋ก ๊ณ ๊ฐ์ฉ์ฑ์ ํ๋ณดํฉ๋๋ค.
CoreDNS๊ฐ ํ๋ ์ผ
ํ๋๊ฐ my-backend๋ผ๋ ์ด๋ฆ์ผ๋ก ์์ฒญ์ ๋ณด๋ด๋ฉด, ํ๋ ๋ด๋ถ์ /etc/resolv.conf์ ์ค์ ๋ ๋ค์์๋ฒ(CoreDNS์ Service IP)๋ก DNS ์กฐํ๊ฐ ์ด๋ฃจ์ด์ง๋๋ค.
# ํ๋ ๋ด๋ถ์ /etc/resolv.conf (kubelet์ด ์๋ ์ค์ )
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
search ๋ฆฌ์คํธ ๋๋ถ์ my-backend๋ง ์
๋ ฅํด๋ my-backend.default.svc.cluster.local๊น์ง ์๋์ผ๋ก ํ์ฅ๋ฉ๋๋ค. CoreDNS๋ ์ด FQDN์ ๋งค์นญ๋๋ Service์ ClusterIP๋ฅผ ๋ฐํํฉ๋๋ค.
DNS ๋ ์ฝ๋ ํ์
Service์ DNS A ๋ ์ฝ๋ ํ์์ <service-name>.<namespace>.svc.<cluster-domain>์
๋๋ค. ๊ฐ์ ๋ค์์คํ์ด์ค ์์์๋ ์๋น์ค๋ช
๋ง์ผ๋ก ์ถฉ๋ถํ๊ณ , ๋ค๋ฅธ ๋ค์์คํ์ด์ค์ ์๋น์ค์ ์ ๊ทผํ ๋๋ my-backend.other-ns ํํ๋ก ๋ค์์คํ์ด์ค๋ฅผ ๋ช
์ํฉ๋๋ค.
CoreDNS์ ๊ตฌ์กฐ
CoreDNS๋ Go๋ก ์์ฑ๋ ๋จ์ผ ๋ฐ์ด๋๋ฆฌ๋ก, ํ๋ฌ๊ทธ์ธ ์ฒด์ธ ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค. ์ค์ ์ kube-system ๋ค์์คํ์ด์ค์ coredns ConfigMap์ ์๋ Corefile๋ก ๊ด๋ฆฌ๋ฉ๋๋ค.
.:53 {
errors
health { lameduck 5s }
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}
kubernetes ํ๋ฌ๊ทธ์ธ์ด Service/Pod DNS ๋ ์ฝ๋๋ฅผ ์ฒ๋ฆฌํ๊ณ , forward๊ฐ ํด๋ฌ์คํฐ ์ธ๋ถ ๋๋ฉ์ธ(์: google.com)์ ๋
ธ๋์ upstream DNS๋ก ์ ๋ฌํฉ๋๋ค.
โ ๏ธ ์ฃผ์: CoreDNS Service์ ์ด๋ฆ์ ํธํ์ฑ์ ์ํด kube-dns๋ก ๋์ด ์์ต๋๋ค. kubectl get svc -n kube-system์ผ๋ก ํ์ธํ๋ฉด kube-dns๋ผ๋ ์ด๋ฆ์ด ๋ณด์ด์ง๋ง, ์ค์ ๋ก ์คํ๋๋ ๊ฒ์ CoreDNS ํ๋์
๋๋ค.
kube-proxy — ๊ฐ์ IP๋ฅผ ์ค์ ํ๋๋ก ์ฐ๊ฒฐํ๋ ๋ง๋ฒ
์ฌ๊ธฐ์ ํ ๊ฐ์ง ์๋ฌธ์ด ์๊น๋๋ค. CoreDNS๊ฐ ๋ฐํํ ClusterIP(์: 10.96.100.50)๋ ๊ฐ์ IP์
๋๋ค. ์ด๋ค ๋คํธ์ํฌ ์ธํฐํ์ด์ค์๋ ๋ฐ์ธ๋ฉ๋์ง ์๊ณ , ์ค์ ๋ก "์กด์ฌ"ํ์ง ์๋ IP์
๋๋ค. ๊ทธ๋ฐ๋ฐ ํ๋๊ฐ ์ด ๊ฐ์ IP๋ก ํจํท์ ๋ณด๋ด๋ฉด ์ด๋ป๊ฒ ์ค์ ๋ฐฑ์๋ ํ๋์ ๋์ฐฉํ ๊น์?
์ด ๋ง๋ฒ์ ์ํํ๋ ๊ฒ์ด kube-proxy์ ๋๋ค.
kube-proxy์ ์ญํ
kube-proxy๋ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ ธ๋์์ ์คํ๋๋ ๋คํธ์ํฌ ํ๋ก์์ ๋๋ค. DaemonSet์ผ๋ก ๋ฐฐํฌ๋์ด ๊ฐ ๋ ธ๋์ ํ๋์ฉ ์กด์ฌํฉ๋๋ค. kube-proxy๋ Kubernetes API ์๋ฒ๋ฅผ watchํ๋ฉด์ Service์ EndpointSlice ์ค๋ธ์ ํธ์ ๋ณ๊ฒฝ์ ๊ฐ์ํ๊ณ , ๋ณ๊ฒฝ์ด ๊ฐ์ง๋๋ฉด ์ปค๋ ์์ค์์ ํจํท ํฌ์๋ฉ ๊ท์น์ ์ ๋ฐ์ดํธํฉ๋๋ค.
์ด ๊ท์น์ด ํ๋ ํต์ฌ ๋์์ DNAT(Destination NAT) — ํจํท์ ๋ชฉ์ ์ง ์ฃผ์๋ฅผ ClusterIP์์ ์ค์ ๋ฐฑ์๋ ํ๋ IP๋ก ๋ฐ๊ฟ์น๊ธฐํ๋ ๊ฒ์ ๋๋ค.
์ ์ฒด ํต์ ํ๋ฆ
Pod A: "my-backend์ ์์ฒญ์ ๋ณด๋ด์"
↓
/etc/resolv.conf → nameserver 10.96.0.10 (CoreDNS)
↓
CoreDNS: "my-backend.default.svc.cluster.local → 10.96.100.50"
↓
Pod A๊ฐ 10.96.100.50:80์ผ๋ก TCP ์ฐ๊ฒฐ
↓
๋
ธ๋์ netfilter (kube-proxy๊ฐ ์ค์นํ ๊ท์น)
↓
DNAT: 10.96.100.50 → 10.244.2.10 (๋ฐฑ์๋ ํ๋ ์ค ํ๋)
↓
Pod B๊ฐ ์์ฒญ์ ์์
ํ๋ก์ ๋ชจ๋
kube-proxy์๋ 3๊ฐ์ง ์ฃผ์ ๋ชจ๋๊ฐ ์์ผ๋ฉฐ, ์ปค๋์์ ๊ท์น์ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ด ๋ค๋ฆ ๋๋ค.
iptables ๋ชจ๋ (ํ์ฌ ๊ธฐ๋ณธ๊ฐ)๋ Linux ์ปค๋์ netfilter/iptables๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋น์ค์ ์๋ํฌ์ธํธ๋ง๋ค iptables ๊ท์น์ ์์ฑํ๋ฉฐ, ๋ฐฑ์๋ ํ๋ ์ ํ์ ํ๋ฅ ๊ธฐ๋ฐ ๋๋ค ๋ฐฉ์์ ๋๋ค. ๋ชจ๋ ์ฒ๋ฆฌ๊ฐ ์ปค๋ ๊ณต๊ฐ์์ ์ด๋ฃจ์ด์ ธ ๋น ๋ฅด์ง๋ง, ์๋น์ค ์๊ฐ ์๋ง ๊ฐ๋ก ๋์ด๋๋ฉด ๊ท์น์ด O(n)์ผ๋ก ์ฆ๊ฐํ์ฌ ์ฑ๋ฅ์ด ์ ํ๋ฉ๋๋ค.
์ค์ iptables ๊ท์น์ ๋ณด๋ฉด ๋์ ์๋ฆฌ๊ฐ ๋ช ํํด์ง๋๋ค:
# 1๋จ๊ณ: ClusterIP๋ก ๋ค์ด์ค๋ ํจํท์ ์๋น์ค ์ฒด์ธ์ผ๋ก ์ ๋ฌ
-A KUBE-SERVICES -d 10.0.1.175/32 -p tcp --dport 80 \
-j KUBE-SVC-NWV5X2332I4OT4T3
# 2๋จ๊ณ: ํ๋ฅ ๊ธฐ๋ฐ์ผ๋ก ๋ฐฑ์๋ ํ๋ ์ ํ (3๊ฐ ํ๋ = ๊ฐ 33%)
-A KUBE-SVC-... --probability 0.33333 -j KUBE-SEP-aaa
-A KUBE-SVC-... --probability 0.50000 -j KUBE-SEP-bbb
-A KUBE-SVC-... -j KUBE-SEP-ccc
# 3๋จ๊ณ: DNAT — ๋ชฉ์ ์ง๋ฅผ ์ค์ ํ๋ IP๋ก ๋ณํ
-A KUBE-SEP-aaa -p tcp -j DNAT --to-destination 10.244.1.7:9376
-A KUBE-SEP-bbb -p tcp -j DNAT --to-destination 10.244.2.3:9376
-A KUBE-SEP-ccc -p tcp -j DNAT --to-destination 10.244.3.6:9376
๐ก ํฌ์ธํธ: KUBE-SERVICES → KUBE-SVC-* → KUBE-SEP-* 3๋จ๊ณ ์ฒด์ธ ๊ตฌ์กฐ๋ก, ์๋น์ค ๋งค์นญ → ๋ก๋๋ฐธ๋ฐ์ฑ → DNAT๊ฐ ์์๋๋ก ์ด๋ฃจ์ด์ง๋๋ค.
IPVS ๋ชจ๋ (v1.11๋ถํฐ ์์ )๋ ์ปค๋์ IP Virtual Server๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํด์ ํ
์ด๋ธ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ์ฌ O(1) ์ฑ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๋ผ์ด๋๋ก๋น(rr), ์ต์ ์ฐ๊ฒฐ(lc), ๋ชฉ์ ์ง ํด์ฑ(dh) ๋ฑ ๋ค์ํ ๋ก๋๋ฐธ๋ฐ์ฑ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ํฉ๋๋ค. ๋๊ท๋ชจ ํด๋ฌ์คํฐ์์ iptables์ ์ฑ๋ฅ ํ๊ณ๊ฐ ๋ฌธ์ ๊ฐ ๋ ๋ ๋์์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
nftables ๋ชจ๋ (v1.31๋ถํฐ ๋ฒ ํ)๋ ๊ฐ์ฅ ์ต์ ๋ชจ๋๋ก, ๋ณ๊ฒฝ๋ ์๋น์ค/์๋ํฌ์ธํธ๋ง ์ฆ๋ถ ์ ๋ฐ์ดํธํ์ฌ iptables์ IPVS ๋ชจ๋๋ฅผ ๋์ฒดํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
EndpointSlice — ์๋น์ค์ ํ๋๋ฅผ ์ฐ๊ฒฐํ๋ ๋ชฉ๋ก
Service๊ฐ "๋ ์ด๋ธ ์ ๋ ํฐ๋ก ํ๋๋ฅผ ์ ํํ๋ค"๊ณ ํ๋๋ฐ, ์ค์ ๋ก "์ด๋ค ํ๋๋ค์ด ๋งค์นญ๋๋์ง"๋ฅผ ๊ธฐ๋กํ๋ ๋ฆฌ์์ค๊ฐ EndpointSlice์ ๋๋ค. ๋ ์ด๋ธ ์ ๋ ํฐ์ ๋งค์นญ๋๋ ํ๋๋ค์ IP:Port ๋ชฉ๋ก์ ๋ด๊ณ ์์ผ๋ฉฐ, ํ๋๊ฐ ์ถ๊ฐ/์ญ์ /๊ต์ฒด๋ ๋ ์๋์ผ๋ก ๊ฐฑ์ ๋ฉ๋๋ค.
๊ทธ๋ฐ๋ฐ EndpointSlice๋ฅผ ์ฐธ๊ณ ํ๋ ์ปดํฌ๋ํธ๊ฐ ๋ ๊ฐ ์์ต๋๋ค — CoreDNS์ kube-proxy. ๋ ๋ค system:coredns / system:node-proxier ClusterRole์ EndpointSlice์ ๋ํ list/watch ๊ถํ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ ์ปดํฌ๋ํธ๊ฐ ํญ์ EndpointSlice๋ฅผ ํจ๊ป ์ฐธ๊ณ ํ๋ ๊ฑธ๊น์?
ํฅ๋ฏธ๋ก์ด ์ฌ์ค: ์ ํํ ๋ฐ๋๋ก ๋์ํ๋ค
๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด, ๊ฐ์ Service์ ๋ํด ๋ ์ปดํฌ๋ํธ๊ฐ ๋์์ EndpointSlice๋ฅผ ์ฐธ๊ณ ํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
์ผ๋ฐ Service (ClusterIP๊ฐ ์๋ ๊ฒฝ์ฐ)์์๋ CoreDNS๋ Service ์ค๋ธ์ ํธ์ ClusterIP๋ง ๋ฐํํ๋ฉด ๋๋ฏ๋ก EndpointSlice๋ฅผ ์ฐธ๊ณ ํ์ง ์์ต๋๋ค. ๋์ kube-proxy๊ฐ EndpointSlice๋ฅผ ์ฐธ๊ณ ํด์ "ClusterIP → ์ค์ ํ๋ IP" ๋งคํ ๊ท์น(iptables/IPVS)์ ๋ง๋ญ๋๋ค.
[์ผ๋ฐ Service]
CoreDNS → Service ์ค๋ธ์ ํธ ์ฐธ๊ณ (ClusterIP ๋ฐํ)
kube-proxy → EndpointSlice ์ฐธ๊ณ (iptables/IPVS ๊ท์น ์์ฑ)
Headless Service (ClusterIP: None)์์๋ ClusterIP๊ฐ ์์ผ๋ฏ๋ก CoreDNS๊ฐ EndpointSlice๋ฅผ ์ฐธ๊ณ ํด์ ํ๋ IP ๋ชฉ๋ก์ ์ง์ DNS ์๋ต์ผ๋ก ๋ฐํํฉ๋๋ค. kube-proxy๋ ์ฒ๋ฆฌํ ClusterIP๊ฐ ์์ผ๋ฏ๋ก ์์ ๊ด์ฌํ์ง ์์ต๋๋ค.
[Headless Service]
CoreDNS → EndpointSlice ์ฐธ๊ณ (ํ๋ IP ๋ชฉ๋ก ๋ฐํ)
kube-proxy → ๊ด์ฌํ์ง ์์
์ ๋ฆฌํ๋ฉด ์ด๋ ์ต๋๋ค:
| ์ปดํฌ๋ํธ | ์ผ๋ฐ Service | Headless Service |
|---|---|---|
| CoreDNS | Service ์ค๋ธ์ ํธ (ClusterIP) | EndpointSlice (ํ๋ IP ๋ชฉ๋ก) |
| kube-proxy | EndpointSlice (๋ผ์ฐํ ๊ท์น) | ๊ด์ฌ ์ ํจ |
์๋น์ค ์ ํ์ ๋ฐ๋ผ ์ญํ ์ด ๊น๋ํ๊ฒ ๋๋๋ ๊ตฌ์กฐ์ ๋๋ค.
์ ์ฒด ์ํคํ ์ฒ ํ๋์ ๋ณด๊ธฐ
์ง๊ธ๊น์ง ์ค๋ช ํ ์ปดํฌ๋ํธ๋ค์ ๊ด๊ณ๋ฅผ ํ๋์ ํ๋ฆ์ผ๋ก ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

ํ์ธ ๋ช ๋ น์ด ๋ชจ์
# CoreDNS ํ๋ ์ํ ํ์ธ
kubectl get pods -n kube-system -l k8s-app=kube-dns
# kube-proxy ํ๋ ํ์ธ
kubectl get pods -n kube-system -l k8s-app=kube-proxy
# ์๋น์ค์ EndpointSlice ํ์ธ
kubectl get endpointslices -l kubernetes.io/service-name=my-backend
# DNS ํด์ ํ
์คํธ (dnsutils ํ๋์์)
kubectl exec -it dnsutils -- nslookup my-backend.default.svc.cluster.local
# ํ๋ ๋ด๋ถ resolv.conf ํ์ธ
kubectl exec -it <pod-name> -- cat /etc/resolv.conf
# kube-proxy ๋ชจ๋ ํ์ธ (๋
ธ๋์์ ์คํ)
curl http://localhost:10249/proxyMode
# iptables ๋ชจ๋: ์๋น์ค ๊ด๋ จ ๊ท์น ํ์ธ
iptables-save | grep KUBE-SVC
# IPVS ๋ชจ๋: ๊ฐ์ ์๋ฒ ํ
์ด๋ธ ํ์ธ
ipvsadm -ln
๋ง๋ฌด๋ฆฌ
Kubernetes ํ๋ ๊ฐ ํต์ ์ ๊ฒฐ๊ตญ 4๊ฐ์ ํต์ฌ ์ปดํฌ๋ํธ๊ฐ ํ๋ ฅํ๋ ๊ตฌ์กฐ์ ๋๋ค. Service๊ฐ ๊ณ ์ ๋ ์ง์ ์ ์ ์ ๊ณตํ๊ณ , CoreDNS๊ฐ ์๋น์ค๋ช ์ ClusterIP๋ก ๋ณํํ๊ณ , kube-proxy๊ฐ ClusterIP๋ฅผ ์ค์ ํ๋ IP๋ก ๋ผ์ฐํ ํ๋ฉฐ, EndpointSlice๊ฐ "์ด๋ค ํ๋๊ฐ ํ์ฌ ์ด ์๋น์ค์ ๋ฐฑ์๋์ธ์ง"๋ฅผ ์ถ์ ํฉ๋๋ค.
ํนํ EndpointSlice์ ๊ฒฝ์ฐ, ์ผ๋ฐ Service์์๋ kube-proxy๋ง, Headless Service์์๋ CoreDNS๋ง ์ฐธ๊ณ ํ๋ค๋ ์ ์ด ํต์ฌ์ ๋๋ค. ์๋น์ค ์ ํ์ ๋ฐ๋ผ ์ญํ ์ด ๊น๋ํ๊ฒ ๋ถ๋ฆฌ๋์ด ์๋ค๋ ๊ฒ์ ์ดํดํ๋ฉด, ๋คํธ์ํฌ ํธ๋ฌ๋ธ์ํ ์ ์ด๋๋ฅผ ๋ด์ผ ํ ์ง๋ ๋ช ํํด์ง๋๋ค.
๋ค์ ๊ธ์์๋ Service์ ์ ํ๋ณ ์ฐจ์ด(ClusterIP, NodePort, LoadBalancer, ExternalName)์ Ingress/Gateway API๋ฅผ ํตํ ์ธ๋ถ ํธ๋ํฝ ๋ผ์ฐํ ์ ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.
