• ABOUT
  • PORTFOLIO
  • POSTS
  • GUESTBOOK

ยฉ 2025-2026 BlueCool12 All rights reserved.

2026.05.09Kubernetes

๐ŸŒ Service๋กœ ํŒŒ๋“œ ๋…ธ์ถœํ•˜๊ธฐ - ClusterIP / NodePort / LoadBalancer

1. ํŒŒ๋“œ IP๋งŒ์œผ๋กœ ํ†ต์‹ ํ•  ๋•Œ์˜ ํ•œ๊ณ„

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ํŒŒ๋“œ์— ์ง์ ‘ ์ ‘๊ทผํ•˜๋ ค๋ฉด kubectl describe๋กœ ํŒŒ๋“œ IP๋ฅผ ํ™•์ธํ•œ ๋’ค ๊ทธ IP๋กœ ์ ‘์†ํ•˜๋ฉด ๋œ๋‹ค. ์ด ๋ฐฉ์‹์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ ๋™์ž‘ ์—ฌ๋ถ€๋ฅผ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•  ๋•Œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

ํŒŒ๋“œ IP๋Š” ์˜์†์ ์ด์ง€ ์•Š๋‹ค. ํŒŒ๋“œ๊ฐ€ ์žฌ์‹œ์ž‘๋˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์žฌ์Šค์ผ€์ค„๋ง๋˜๋Š” ์ˆœ๊ฐ„ ์ƒˆ IP๋ฅผ ํ• ๋‹น๋ฐ›์œผ๋ฏ€๋กœ, ํ•œ ๋ฒˆ ํ™•์ธํ•œ IP๊ฐ€ ๋ฌดํšจ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ์—ฌ๋Ÿฌ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์—ฎ์„ ๋•Œ ์„œ๋กœ์˜ ํŒŒ๋“œ IP๋ฅผ ๋ฏธ๋ฆฌ ์•Œ ๋ฐฉ๋ฒ•์ด ์—†๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ”„๋ก ํŠธ ํŒŒ๋“œ์—์„œ ๋ฐฑ์—”๋“œ ํŒŒ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋ฉด ๊ทธ๋•Œ๊ทธ๋•Œ ๋ฐ”๋€Œ๋Š” IP๋ฅผ ์ถ”์ ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์‹๋ณ„์ž๋กœ ์„œ๋กœ๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ํŒŒ๋“œ IP๋ฅผ ํ†ต์‹  ๊ฒฝ๋กœ๋กœ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋„๋ก ๊ถŒ์žฅํ•˜์ง€ ์•Š๊ณ , ๋ณ„๋„์˜ ์‹๋ณ„ ๊ณ„์ธต์ธ ์„œ๋น„์Šค(Service) ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋‘”๋‹ค.


๋„์ปค์˜ ์ปจํ…Œ์ด๋„ˆ ๋…ธ์ถœ ๋ฐฉ์‹๊ณผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค์˜ ์ฐจ์ด

๋„์ปค์—์„œ๋Š” ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ๊ณผ ์™ธ๋ถ€ ๋…ธ์ถœ์ด ํ•œ ๋ช…๋ น์— ๋ฌถ์—ฌ ์žˆ๋‹ค. docker run -p 8080:80์„ ์‹คํ–‰ํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ทธ ์ˆœ๊ฐ„ ํ˜ธ์ŠคํŠธ ํฌํŠธ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ์‚ฌ์ด์˜ ๋‚ด๋ถ€ ํ†ต์‹ ๋„ ๋น„์Šทํ•˜๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ๋ธŒ๋ฆฌ์ง€ ๋„คํŠธ์›Œํฌ์— ๊ฐ™์ด ์˜ฌ๋ฆฌ๋ฉด ๋„์ปค์˜ ๋‚ด์žฅ DNS๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ IP๋กœ ํ’€์–ด์ค€๋‹ค. ์ฆ‰, ๋…ธ์ถœ๊ณผ ๋ฐœ๊ฒฌ ๋ชจ๋‘ ์ปจํ…Œ์ด๋„ˆ ์ž์ฒด์˜ ์‹คํ–‰ ์˜ต์…˜์œผ๋กœ ๋‹ค๋ฃฌ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ด ๋‘˜์„ ์˜๋„์ ์œผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค. ๋””ํ”Œ๋กœ์ด๋จผํŠธ YAML์— ์ ๋Š” containerPort๋Š” ํŒŒ๋“œ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์–ด๋–ค ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ •๋ณด ํ‘œ๊ธฐ์— ๊ฐ€๊น๊ณ , ๊ทธ ์ž์ฒด๋กœ๋Š” ์™ธ๋ถ€์— ํฌํŠธ๋ฅผ ์—ด์ง€๋„, ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ ๋‹ค๋ฅธ ํŒŒ๋“œ๊ฐ€ ๋ถ€๋ฅผ ์•ˆ์ •๋œ ์ด๋ฆ„์„ ๋งŒ๋“ค์–ด ์ฃผ์ง€๋„ ์•Š๋Š”๋‹ค.

์™ธ๋ถ€๋กœ ๋…ธ์ถœํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์ผ๊ด€๋œ ์ด๋ฆ„์œผ๋กœ ํ˜ธ์ถœํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด, ํŒŒ๋“œ์™€๋Š” ๋ณ„๊ฐœ์˜ ์˜ค๋ธŒ์ ํŠธ์ธ ์„œ๋น„์Šค(Service)๋ฅผ ๋”ฐ๋กœ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค. ๋…ธ์ถœ๊ณผ ๋ฐœ๊ฒฌ์„ ํŒŒ๋“œ ์ •์˜์—์„œ ๋–ผ์–ด๋‚ธ ๊ตฌ์กฐ ๋•๋ถ„์—, ๊ฐ™์€ ํŒŒ๋“œ๋ฅผ ํ™˜๊ฒฝ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋…ธ์ถœํ•˜๊ฑฐ๋‚˜ ๋…ธ์ถœ ๋ฐฉ์‹๋งŒ ๋‹จ๋…์œผ๋กœ ๊ต์ฒดํ•˜๋Š” ์šด์˜์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.


2. ์„œ๋น„์Šค์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ

์„œ๋น„์Šค๋Š” ํŒŒ๋“œ ์ง‘ํ•ฉ ์œ„์— ์–นํžˆ๋Š” ์‹๋ณ„/๋ผ์šฐํŒ… ๊ณ„์ธต์ด๋‹ค. ํŒŒ๋“œ ์ž์ฒด๋Š” ๊ณ„์† ๋ฐ”๋€Œ์ง€๋งŒ, ๊ทธ ์œ„์—์„œ ์„œ๋น„์Šค๊ฐ€ ์„ธ ๊ฐ€์ง€ ์ผ์„ ๋งก๋Š”๋‹ค.

๋จผ์ € ์•ˆ์ •๋œ ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ๋ถ€์—ฌํ•œ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ DNS๊ฐ€ ์„œ๋น„์Šค ์ด๋ฆ„์„ ๊ฐ€์ƒ IP(ClusterIP)๋กœ ํ•ด์„ํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค๋ฅธ ํŒŒ๋“œ๋Š” ๋ณ€ํ•˜๋Š” ํŒŒ๋“œ IP๊ฐ€ ์•„๋‹Œ <service>.<namespace> ํ˜•ํƒœ์˜ ์ด๋ฆ„์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

๋˜ํ•œ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ ํŒŒ๋“œ์— ๋ถ„์‚ฐํ•˜๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์—ญํ• ๋„ ํ•œ๋‹ค. ๊ฐ™์€ ๋ผ๋ฒจ์„ ๊ณต์œ ํ•˜๋Š” ํŒŒ๋“œ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ํ•œ ์„œ๋น„์Šค ๋’ค์— ๋ฌถ์ด๋ฉด, ์„œ๋น„์Šค๋กœ ๋“ค์–ด์˜จ ํŠธ๋ž˜ํ”ฝ์ด ๊ทธ์ค‘ ํ•˜๋‚˜์˜ ํŒŒ๋“œ๋กœ ๋ผ์šฐํŒ…๋œ๋‹ค.

ํŒŒ๋“œ์˜ ๋…ธ์ถœ ๋ฒ”์œ„๋„ ์ง€์ •ํ•˜๋Š”๋ฐ, ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ๋งŒ ์—ด์ง€, ํ˜น์€ ๋ชจ๋“  ๋…ธ๋“œ์˜ ํŠน์ • ํฌํŠธ๋กœ ์—ด์ง€, ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ†ตํ•ด ๊ณต์ธ IP๋กœ ์—ด์ง€๋ฅผ ์„œ๋น„์Šค ์ •์˜ ์•ˆ์—์„œ ์„ ํƒํ•œ๋‹ค.


3. ์„œ๋น„์Šค์˜ ํƒ€์ž…

์„œ๋น„์Šค๋Š” ํŒŒ๋“œ๋ฅผ ์–ด๋””๊นŒ์ง€ ๋…ธ์ถœํ• ์ง€์— ๋”ฐ๋ผ ์„ธ ๊ฐ€์ง€ ํƒ€์ž…์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

ClusterIP๋Š” ๊ธฐ๋ณธ ํƒ€์ž…์ด๋ฉฐ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ฐ€์ƒ IP๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค. ์™ธ๋ถ€์—์„œ๋Š” ์ด IP๋กœ ๋„๋‹ฌํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ํด๋Ÿฌ์Šคํ„ฐ ์•ˆ์˜ ๋‹ค๋ฅธ ํŒŒ๋“œ๋ผ๋ฆฌ๋งŒ ํ˜ธ์ถœํ•˜๋Š” ๋‚ด๋ถ€ ์„œ๋น„์Šค์— ์ ํ•ฉํ•˜๋‹ค.

NodePort๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋…ธ๋“œ์— ๋™์ผํ•œ ํฌํŠธ๋ฅผ ์—ด๊ณ , ๊ทธ ํฌํŠธ๋กœ ๋“ค์–ด์˜จ ํŠธ๋ž˜ํ”ฝ์„ ์„œ๋น„์Šค์˜ ClusterIP๋กœ ์ „๋‹ฌํ•œ๋‹ค. ํฌํŠธ๋Š” ๊ธฐ๋ณธ 30000~32767 ๋ฒ”์œ„์—์„œ ์ž๋™ ํ• ๋‹น๋˜๋ฉฐ, nodePort ํ•„๋“œ๋กœ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

LoadBalancer๋Š” ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ๋™์ ์œผ๋กœ ํ”„๋กœ๋น„์ €๋‹ํ•ด ์™ธ๋ถ€ IP๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›๋Š”๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” NodePort์™€ ClusterIP๋ฅผ ํ•จ๊ป˜ ๋งŒ๋“ค์–ด ๋‘๊ณ  ๊ทธ ์œ„์— ํด๋ผ์šฐ๋“œ LB๋ฅผ ์–น๋Š” ๊ตฌ์กฐ์ด๋ฉฐ, AWS๋‚˜ GCP ๊ฐ™์€ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ๋ณ„๋„ ์„ค์ • ์—†์ด ๋™์ž‘ํ•œ๋‹ค.


- Cluster IP

๋‹ค์Œ์€ ๋ผ๋ฒจ์ด app: bluecool์ธ ํŒŒ๋“œ๋“ค์— ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ IP๋กœ ์ ‘๊ทผํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” YAML์ด๋‹ค.

apiVersion: v1
kind: Service
metadata:
name: clusterip-service
spec:
type: ClusterIP
selector:
app: bluecool
ports:
- port: 8080
targetPort: 8080

spec.selector๋Š” ์–ด๋–ค ๋ผ๋ฒจ์„ ๊ฐ€์ง„ ํŒŒ๋“œ๋ฅผ ์ด ์„œ๋น„์Šค ๋’ค์— ๋ฌถ์„์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. ์œ„ ์˜ˆ์‹œ์—์„œ๋Š” app: bluecool ๋ผ๋ฒจ์ด ๋ถ™์€ ํŒŒ๋“œ๋“ค์ด ๋ผ์šฐํŒ… ๋Œ€์ƒ์ด ๋œ๋‹ค. ๋ผ๋ฒจ์€ ๋‹จ์ˆœํ•œ ํ‘œ์‹œ์šฉ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋„˜์–ด, ์„œ๋น„์Šค๋‚˜ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ฒ˜๋Ÿผ ๋ผ๋ฒจ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฌถ๋Š” ์ปจํŠธ๋กค๋Ÿฌ์—์„œ๋Š” ์ผ์น˜ ์—ฌ๋ถ€ ์ž์ฒด๊ฐ€ ๋™์ž‘ ์กฐ๊ฑด์ด ๋œ๋‹ค.

spec.ports.port๋Š” ์„œ๋น„์Šค์˜ ClusterIP์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉํ•  ํฌํŠธ๋กœ, spec.ports.targetPort๋Š” ์…€๋ ‰ํ„ฐ๋กœ ๋ฌถ์ธ ํŒŒ๋“œ๊ฐ€ ์‹ค์ œ๋กœ listenํ•˜๋Š” ํฌํŠธ๋‹ค. ์œ„ YAML์€ ์„œ๋น„์Šค์˜ ๊ฐ€์ƒ IP์˜ 8080 ํฌํŠธ๋กœ ๋“ค์–ด์˜จ ์š”์ฒญ์„ ๋ผ๋ฒจ์ด ๋งค์นญ๋œ ํŒŒ๋“œ์˜ 8080 ํฌํŠธ๋กœ ์ „๋‹ฌํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ๋‘ ๊ฐ’์ด ๊ฐ™์„ ํ•„์š”๋Š” ์—†์œผ๋ฉฐ, ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹ค์ œ๋กœ ๋ฐ›๋Š” ํฌํŠธ์™€ targetPort๋งŒ ์ผ์น˜ํ•˜๋ฉด ๋œ๋‹ค.

kubectl apply -f๋กœ ์ ์šฉํ•œ ๋’ค, kubectl get svc๋ฅผ ์‹คํ–‰ํ•˜๋ฉด CLUSTER-IP ์ปฌ๋Ÿผ์— ๊ฐ€์ƒ IP๊ฐ€ ํ• ๋‹น๋œ ๊ฒƒ์ด ๋ณด์ธ๋‹ค. ๊ฐ™์€ ํด๋Ÿฌ์Šคํ„ฐ์˜ ํŒŒ๋“œ๋ผ๋ฉด ์ด IP์˜ 8080 ํฌํŠธ๋กœ ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ณ , ๋” ํ”ํ•˜๊ฒŒ๋Š” ์„œ๋น„์Šค ์ด๋ฆ„์œผ๋กœ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ DNS(CoreDNS)๋ฅผ ๊ตฌ๋™ํ•˜๊ณ  ๋ชจ๋“  ํŒŒ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ด DNS์— ๋ฌถ๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ™์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋‹ค๋ฅธ ํŒŒ๋“œ์—์„œ๋Š” curl clusterip-service:8080 ํ•œ ์ค„์ด๋ฉด ์‘๋‹ต์ด ๋Œ์•„์˜จ๋‹ค.

kubectl get svc ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜์Œ ๋ณธ๋‹ค๋ฉด default ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ kubernetes๋ผ๋Š” ClusterIP ์„œ๋น„์Šค๊ฐ€ ํ•จ๊ป˜ ๋ณด์—ฌ ์˜์•„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ์‹œ์ ์— ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” kube-apiserver ์ง„์ž…์šฉ ์„œ๋น„์Šค๋‹ค. ํŒŒ๋“œ ์•ˆ์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์“ฐ์ธ๋‹ค.


- NodePort

NodePort๋Š” ClusterIP์˜ ๊ธฐ๋Šฅ์„ ๊ทธ๋Œ€๋กœ ํ•˜๋ฉด์„œ, ์ถ”๊ฐ€๋กœ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋…ธ๋“œ์— ๊ฐ™์€ ํฌํŠธ๋ฅผ ์—ด์–ด์ค€๋‹ค. YAML๋„ ClusterIP์—์„œ type๋งŒ ๋ฐ”๊พธ๋ฉด ๋œ๋‹ค.

apiVersion: v1
kind: Service
metadata:
name: nodeport-service
spec:
type: NodePort
selector:
app: bluecool
ports:
- port: 8080
targetPort: 8080

kubectl apply -f ํ›„ kubectl get svc๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ๋‘ ๊ฐ€์ง€๊ฐ€ ๋ˆˆ์— ๋ˆ๋‹ค.

PORT(S) ์ปฌ๋Ÿผ์ด 8080:31514/TCP ๊ฐ™์€ ๋‘ ์ˆซ์ž ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ๋œ๋‹ค. ์•ž์˜ 8080์€ ClusterIP์˜ ํฌํŠธ, ๋’ค์˜ 31514๊ฐ€ ๋ชจ๋“  ๋…ธ๋“œ์— ์—ด๋ฆฐ NodePort์ด๋‹ค.

์ถ”๊ฐ€๋กœ ๋ˆˆ์—ฌ๊ฒจ๋ณผ ๋ถ€๋ถ„์€ ํƒ€์ž…์ด NodePort์ธ๋ฐ๋„ CLUSTER-IP ์ปฌ๋Ÿผ์— ๊ฐ€์ƒ IP๊ฐ€ ์ฑ„์›Œ์ ธ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ์ด๋Š” NodePort ์„œ๋น„์Šค๊ฐ€ ClusterIP์˜ ๋™์ž‘์„ ๊ทธ๋Œ€๋กœ ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ์•ˆ์—์„œ๋Š” ์—ฌ์ „ํžˆ ์„œ๋น„์Šค ์ด๋ฆ„๊ณผ ๊ฐ€์ƒ IP๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ณ , ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ–์—์„œ๋Š” ๋…ธ๋“œ IP์˜ 31514 ํฌํŠธ๋กœ ์ถ”๊ฐ€๋กœ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ๋•Œ๋Š” kubectl get nodes -o wide๋กœ ๋…ธ๋“œ IP๋ฅผ ํ™•์ธํ•œ ๋’ค curl <๋…ธ๋“œ IP>:31514๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์–ด๋А ๋…ธ๋“œ์˜ IP๋ฅผ ๊ณจ๋ผ๋„ ๊ฒฐ๊ณผ๋Š” ๊ฐ™๋‹ค. ๊ฐ™์€ NodePort๊ฐ€ ๋ชจ๋“  ๋…ธ๋“œ์— ์—ด๋ ค ์žˆ๊ณ , ์–ด๋А ๋…ธ๋“œ๋กœ ๋“ค์–ด์˜จ ์š”์ฒญ์ด๋“  kube-proxy๊ฐ€ ์…€๋ ‰ํ„ฐ์— ๋งค์นญ๋œ ํŒŒ๋“œ ์ค‘ ํ•˜๋‚˜๋กœ ๋ผ์šฐํŒ…ํ•œ๋‹ค.

NodePort์— ์“ฐ์ผ ํฌํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ 30000~32767 ๋ฒ”์œ„์—์„œ ์ž๋™ ํ• ๋‹น๋˜์ง€๋งŒ, YAML์˜ nodePort ํ•„๋“œ๋กœ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฒ”์œ„ ์ž์ฒด๋ฅผ ๋ฐ”๊พธ๋ ค๋ฉด kube-apiserver์˜ --service-node-port-range ์˜ต์…˜์„ ์ˆ˜์ •ํ•œ๋‹ค. (๋‹ค๋ฅธ ์‹œ์Šคํ…œ ์„œ๋น„์Šค์™€ ์ถฉ๋Œ ์ฃผ์˜)

ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋…ธ๋“œ ํฌํŠธ๊ฐ€ ๊ทธ๋ƒฅ ์—ด๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. GKE์—์„œ๋Š” VPC ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„, AWS์—์„œ๋Š” ๋…ธ๋“œ์˜ ๋ณด์•ˆ ๊ทธ๋ฃน ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์„ ๋ณ„๋„๋กœ ์ถ”๊ฐ€ํ•ด์•ผ ์™ธ๋ถ€์—์„œ NodePort์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ˆ„๋ฝ ์‹œ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ๋Š” ๋ฉ€์ฉกํžˆ ๋™์ž‘ํ•˜๋Š”๋ฐ ์™ธ๋ถ€ curl๋งŒ ํƒ€์ž„์•„์›ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์šด์˜ ํ™˜๊ฒฝ์—์„œ NodePort๋ฅผ ๋‹จ๋…์œผ๋กœ ์™ธ๋ถ€ ๋…ธ์ถœ์— ์“ฐ๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌผ๋‹ค. 80, 443 ๊ฐ™์€ ํ‘œ์ค€ ํฌํŠธ๋ฅผ NodePort ๋ฒ”์œ„์— ๋งคํ•‘ํ•˜๊ธฐ๊ฐ€ ๋ถ€์ž์—ฐ์Šค๋Ÿฝ๊ณ , TLS ์ข…๋ฃŒ๋‚˜ ํ˜ธ์ŠคํŠธ/๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…์„ ์„œ๋น„์Šค ๋ฆฌ์†Œ์Šค ํ•œ ๊ฐœ ์•ˆ์—์„œ ํ‘œํ˜„ํ•˜๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์™ธ๋ถ€ ๋…ธ์ถœ์€ ๋ณดํ†ต Ingress๋‚˜ LoadBalancer๊ฐ€ ๋งก๊ณ , NodePort๋Š” ๊ทธ ์•ˆ์ชฝ์—์„œ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์•„ ๊ฐ„์ ‘์ ์œผ๋กœ ์“ฐ์ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

๋งŒ์•ฝ ๊ฐ™์€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋งค๋ฒˆ ๊ฐ™์€ ํŒŒ๋“œ๋กœ ๋ณด๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด ์„œ๋น„์Šค์˜ spec.sessionAffinity๋ฅผ ClientIP๋กœ ๋‘”๋‹ค. ํด๋ผ์ด์–ธํŠธ์˜ ์ถœ๋ฐœ์ง€ IP๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ™์€ ํŒŒ๋“œ์— ๋ผ์šฐํŒ…๋˜๋ฉฐ, ๊ธฐ๋ณธ๊ฐ’์€ ๋ถ„์‚ฐ ๋Œ€์ƒ ํŒŒ๋“œ ์ค‘ ์–ด๋А ์ชฝ์œผ๋กœ๋„ ๋ผ์šฐํŒ…๋  ์ˆ˜ ์žˆ๋Š” None์ด๋‹ค. ์ด ์˜ต์…˜์€ NodePort์— ํ•œ์ •๋˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ์„œ๋น„์Šค ํƒ€์ž…์— ์ ์šฉ๋œ๋‹ค.


- LoadBalancer

NodePort๋Š” ์™ธ๋ถ€ ๋„๋‹ฌ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์ง€๋งŒ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋…ธ๋“œ IP๋ฅผ ์ง์ ‘ ์•Œ์•„์•ผ ํ•œ๋‹ค๋Š” ๋ถ€๋‹ด์ด ๋‚จ๋Š”๋‹ค. LoadBalancer๋Š” ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์ž๋™์œผ๋กœ ๋„์šฐ๊ณ , ๊ทธ LB์˜ ์™ธ๋ถ€ IP๋‚˜ ๋„๋ฉ”์ธ์„ ํ†ตํ•ด ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›๊ฒŒ ํ•œ๋‹ค.

YAML์€ NodePort์—์„œ type๊ณผ ์™ธ๋ถ€ ๋…ธ์ถœ ํฌํŠธ๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค.

apiVersion: v1
kind: Service
metadata:
name: lb-service
spec:
type: LoadBalancer
selector:
app: bluecool
ports:
- port: 80
targetPort: 8080

port: 80์€ ํด๋ผ์šฐ๋“œ LB๊ฐ€ ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜๋Š” ํฌํŠธ์ด๊ณ , targetPort: 8080์€ ํŒŒ๋“œ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ listen ํ•˜๋Š” ํฌํŠธ๋‹ค. kubectl apply -f ํ›„ kubectl get svc๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ์„ธ ๊ฐ€์ง€ ์ •๋ณด๊ฐ€ ํ•œ ์ค„์— ๋“ค์–ด ์žˆ๋‹ค.

CLUSTER-IP์—๋Š” ์—ฌ๋А ์„œ๋น„์Šค์ฒ˜๋Ÿผ ๊ฐ€์ƒ IP๊ฐ€ ํ• ๋‹น๋ผ ์žˆ๊ณ , ํด๋Ÿฌ์Šคํ„ฐ ์•ˆ์—์„œ๋Š” ์„œ๋น„์Šค ์ด๋ฆ„์ด๋‚˜ ์ด IP๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. EXTERNAL-IP์—๋Š” ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์ด ์ƒˆ๋กœ ๋งŒ๋“  ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์˜ ์™ธ๋ถ€ IP(๋˜๋Š” ๋„๋ฉ”์ธ ์ด๋ฆ„)๊ฐ€ ์ฑ„์›Œ์ง„๋‹ค. ์ด ์ฃผ์†Œ์˜ 80 ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์ด ์„œ๋น„์Šค๋กœ ๋“ค์–ด์˜จ๋‹ค.

PORT(S)์—๋Š” 80:32620/TCP์ฒ˜๋Ÿผ ๋‘ ์ˆซ์ž๊ฐ€ ๋ณด์ด๋Š”๋ฐ, ๋’ค์˜ 32620์€ LoadBalancer๊ฐ€ ํ•จ๊ป˜ ๋งŒ๋“ค์–ด ๋‘” NodePort์ด๋‹ค. ๋…ธ๋“œ IP์˜ 32620 ํฌํŠธ๋กœ ์ ‘๊ทผํ•˜๋ฉด NodePort ์„œ๋น„์Šค์™€ ๋˜‘๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.

์„ธ ๊ฒฝ๋กœ๊ฐ€ ๋™์‹œ์— ์—ด๋ฆฐ ๊ฒƒ์€ LoadBalancer๊ฐ€ NodePort์™€ ClusterIP๋ฅผ ๊ทธ๋Œ€๋กœ ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์‹ค์ œ ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์€ ํด๋ผ์šฐ๋“œ LB๊ฐ€ ๋ฐ›์•„ ์›Œ์ปค ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜์˜ 32620 ํฌํŠธ๋กœ ์ „๋‹ฌํ•˜๊ณ , ๋…ธ๋“œ์— ๋“ค์–ด์˜จ ์š”์ฒญ์„ kube-proxy๊ฐ€ ํŒŒ๋“œ ์ค‘ ํ•˜๋‚˜๋กœ ๋ผ์šฐํŒ…ํ•œ๋‹ค.

LoadBalancer๋Š” ํด๋ผ์šฐ๋“œ LB๋ฅผ ๋งŒ๋“ค์–ด ์ค„ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ์— ์žˆ์–ด์•ผ ๋™์ž‘ํ•œ๋‹ค. AWS, GCP, Azure ๊ฐ™์€ ๋งค๋‹ˆ์ง€๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ์ž๋™์œผ๋กœ ๋™์ž‘ํ•˜์ง€๋งŒ, ๋ฒ ์–ด๋ฉ”ํƒˆ์ด๋‚˜ ์ผ๋ฐ˜ VM ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋Š” LB๋ฅผ ๋งŒ๋“ค์–ด ์ค„ ์ฃผ์ฒด๊ฐ€ ์—†์–ด EXTERNAL-IP๊ฐ€ <pending>์— ๋จธ๋ฌด๋ฅธ๋‹ค.

์ด๋Ÿฐ ํ™˜๊ฒฝ์—์„œ ๊ฐ€์žฅ ํ”ํžˆ ์“ฐ๋Š” ๋ณด์™„์ฑ…์ด MetalLB์ด๋‹ค. ๋ฏธ๋ฆฌ ์ •์˜ํ•ด ๋‘” IP ํ’€์—์„œ ์™ธ๋ถ€ IP๋ฅผ ์ง์ ‘ ํ• ๋‹นํ•˜๊ณ , ๊ทธ IP๊ฐ€ ๋…ธ๋“œ๋กœ ํ–ฅํ•˜๋„๋ก ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์— ์•Œ๋ ค ์ฃผ๋Š” ๋ฐฉ์‹์ด๋ผ, ํด๋ผ์šฐ๋“œ LB ์—†์ด๋„ LoadBalancer ํƒ€์ž…์„ ๊ทธ๋Œ€๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

๊ฐ™์€ LoadBalancer ํƒ€์ž… ์•ˆ์—์„œ๋„ ์–ด๋–ค ์ข…๋ฅ˜์˜ LB๋ฅผ ๋งŒ๋“ค์ง€๋Š” metadata.annotations๋กœ ๊ฒฐ์ •ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด AWS ์ธ-ํŠธ๋ฆฌ ํด๋ผ์šฐ๋“œ ํ”„๋กœ๋ฐ”์ด๋” ํ™˜๊ฒฝ์˜ ๊ธฐ๋ณธ์€ ํด๋ž˜์‹ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ(CLB)์ด๊ณ , NLB๋กœ ๋ฐ”๊พธ๋ ค๋ฉด ์„œ๋น„์Šค์— service.beta.kubernetes.io/aws-load-balancer-type: nlb ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

์–ด๋…ธํ…Œ์ด์…˜์€ ๋ผ๋ฒจ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ํ‚ค-๊ฐ’ ์Œ์ด์ง€๋งŒ ๋ชฉ์ ์ด ๋‹ค๋ฅด๋‹ค. ๋ผ๋ฒจ์ด ์…€๋ ‰ํ„ฐ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฌถ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋ผ๋ฉด, ์–ด๋…ธํ…Œ์ด์…˜์€ ์ปจํŠธ๋กค๋Ÿฌ๋‚˜ ๋„๊ตฌ์— ์ „๋‹ฌํ•˜๋Š” ๋ฉ”ํƒ€์ •๋ณด๋‹ค.


4. externalTrafficPolicy

NodePort๋‚˜ LoadBalancer๋กœ ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์„ ๋•Œ, ๊ทธ ํŠธ๋ž˜ํ”ฝ์ด ์–ด๋А ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ ์–ด๋А ํŒŒ๋“œ์— ๋„๋‹ฌํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์†์„ฑ์ด spec.externalTrafficPolicy์ด๋‹ค. ๊ฐ’์€ ๋‘ ๊ฐ€์ง€๋ฟ์ด๊ณ  ๊ธฐ๋ณธ์€ Cluster๋‹ค.

์ง์ ‘ ๋งŒ๋“  ์„œ๋น„์Šค๋ฅผ kubectl get svc -o yaml๋กœ ํ™•์ธํ•ด๋ณด๋ฉด ์ด ํ•„๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์ฑ„์›Œ์ ธ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. -o yaml์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œํ•˜์ง€ ์•Š์€ ํ•ญ๋ชฉ๊นŒ์ง€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ์ฑ„์šด ๋ชจ๋“  ์†์„ฑ์„ ๋ณด์—ฌ ์ฃผ๋ฏ€๋กœ, ๊ธฐ๋ณธ๊ฐ’์„ ํ™•์ธํ•  ๋•Œ ์ž์ฃผ ์“ฐ๋Š” ์˜ต์…˜์ด๋‹ค.

Cluster๋Š” ์–ด๋А ๋…ธ๋“œ๋กœ ๋“ค์–ด์˜จ ํŠธ๋ž˜ํ”ฝ์ด๋“  ์…€๋ ‰ํ„ฐ์— ๋งค์นญ๋œ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์˜ ํŒŒ๋“œ ์ค‘ ์ž„์˜์˜ ํ•˜๋‚˜๋กœ ๋ณด๋‚ธ๋‹ค. ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์€ ๋…ธ๋“œ์™€ ํŒŒ๋“œ๊ฐ€ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ์žˆ๋‹ค๋ฉด ๋…ธ๋“œ ๊ฐ„ ํ•œ ํ™‰์ด ์ถ”๊ฐ€๋˜๊ณ , ์ด๋•Œ ์ฒซ ๋…ธ๋“œ๋Š” source IP๋ฅผ ์ž๊ธฐ IP๋กœ ๋ฐ”๊ฟ” ์‘๋‹ต์ด ์ž๊ธฐ์—๊ฒŒ ๋Œ์•„์˜ค๊ฒŒ ๋งŒ๋“ ๋‹ค. ์ด SNAT ๋•Œ๋ฌธ์— ํŒŒ๋“œ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์›๋ž˜ ํด๋ผ์ด์–ธํŠธ์˜ IP๋ฅผ ๋ณผ ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

๋ฐ˜๋ฉด Local๋กœ ์„ค์ •ํ•˜๋ฉด ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์€ ๋…ธ๋“œ๋Š” ๊ฐ™์€ ๋…ธ๋“œ์— ์œ„์น˜ํ•œ ํŒŒ๋“œ๋กœ๋งŒ ์š”์ฒญ์„ ๋ผ์šฐํŒ…ํ•˜๊ณ , ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ๋„˜๊ธฐ์ง€ ์•Š๋Š”๋‹ค. ๋…ธ๋“œ ๊ฐ„ ํ™‰์ด ์‚ฌ๋ผ์ง€๋ฏ€๋กœ SNAT์„ ์ ์šฉํ•  ์ด์œ ๋„ ์—†์–ด, ํŒŒ๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์›๋ž˜ IP๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณธ๋‹ค.

LoadBalancer ํ™˜๊ฒฝ์ด๋ผ๋ฉด ํด๋ผ์šฐ๋“œ LB์˜ ํ—ฌ์Šค์ฒดํฌ๊ฐ€ ํŒŒ๋“œ ์—†๋Š” ๋…ธ๋“œ๋ฅผ ํƒˆ๋ฝ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋ž˜ํ”ฝ์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํŒŒ๋“œ ์žˆ๋Š” ๋…ธ๋“œ๋กœ๋งŒ ํ˜๋Ÿฌ ๋“ค์–ด๊ฐ„๋‹ค. NodePort ๋‹จ๋… ํ™˜๊ฒฝ์—์„œ๋Š” ํŒŒ๋“œ ์—†๋Š” ๋…ธ๋“œ๋กœ ๋“ค์–ด์˜จ ํŠธ๋ž˜ํ”ฝ์ด ๊ทธ๋ƒฅ ๋“œ๋กญ๋˜๋ฏ€๋กœ, ํ˜ธ์ถœ ์ธก์ด ํŒŒ๋“œ์˜ ์œ„์น˜๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

YAML์—์„œ๋Š” ํ•œ ์ค„๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

apiVersion: v1
kind: Service
metadata:
name: lb-service
spec:
type: LoadBalancer
externalTrafficPolicy: Local
selector:
app: bluecool
ports:
- port: 80
targetPort: 8080

๋‹ค๋งŒ Local๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ, ํŠธ๋ž˜ํ”ฝ์ด ๋…ธ๋“œ ์•ˆ์—์„œ๋งŒ ๋ถ„์‚ฐ๋˜๋ฏ€๋กœ ๋…ธ๋“œ๋ณ„๋กœ ํŒŒ๋“œ ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๋ฉด ํŒŒ๋“œ ํ•œ ๊ฐœ๋‹น ๋ฐ›๋Š” ๋ถ€ํ•˜๊ฐ€ ์–ด๊ธ‹๋‚œ๋‹ค. ๋…ธ๋“œ A์— ํŒŒ๋“œ 3๊ฐœ, ๋…ธ๋“œ B์— ํŒŒ๋“œ 1๊ฐœ๋ผ๋ฉด LB๊ฐ€ ๋‘ ๋…ธ๋“œ์— ํŠธ๋ž˜ํ”ฝ์„ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ณด๋ƒˆ์„ ๋•Œ B์˜ ํŒŒ๋“œ๋Š” A์˜ ํŒŒ๋“œ ํ•œ ๊ฐœ๋ณด๋‹ค 3๋ฐฐ ๋งŽ์€ ์š”์ฒญ์„ ๋ฐ›๋Š”๋‹ค.

์ด ๋ถˆ๊ท ํ˜•์€ ์Šค์ผ€์ค„๋ง ๋‹จ๊ณ„์—์„œ ํŒŒ๋“œ๋ฅผ ๋…ธ๋“œ์— ๊ณ ๋ฅด๊ฒŒ ๋ฐฐ์น˜ํ•ด ์–ด๋А ์ •๋„ ํ•ด์†Œํ•  ์ˆ˜ ์žˆ๋‹ค. ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ topologySpreadConstraints๋‚˜ PodAntiAffinity๋กœ ๋…ธ๋“œ๋ณ„ ๋ถ„ํฌ๋ฅผ ๊ฐ•์ œํ•˜๋Š” ๋ฐฉ์‹์ด ์ผ๋ฐ˜์ ์ด๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ์™„์ „ํ•œ ๊ท ๋“ฑ์€ ์–ด๋ ค์šฐ๋ฏ€๋กœ, ํŒŒ๋“œ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํด๋ผ์ด์–ธํŠธ IP๋ฅผ ์ •๋ง๋กœ ํ•„์š”๋กœ ํ•˜๋Š”๊ฐ€๋ฅผ ๊ธฐ์ค€์œผ๋กœ Cluster์™€ Local ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ณ ๋ฅด๋Š” ํŽธ์ด ์‹ค์šฉ์ ์ด๋‹ค.


5. ExternalName

ExternalName์€ ๋‹ค๋ฅธ ์„œ๋น„์Šค ํƒ€์ž…๊ณผ ๊ฒฐ์ด ๋‹ค๋ฅด๋‹ค. ์…€๋ ‰ํ„ฐ๋กœ ๋ฌถ์„ ํŒŒ๋“œ๋„, ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋‚ผ ClusterIP๋„, ๋งคํ•‘์„ ๋ณด๊ด€ํ•  Endpoints๋„ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹  ํด๋Ÿฌ์Šคํ„ฐ DNS์— ์™ธ๋ถ€ ๋„๋ฉ”์ธ ์ด๋ฆ„์˜ ๋ณ„๋ช…์„ ๋“ฑ๋กํ•œ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ์•ˆ์˜ ํŒŒ๋“œ๊ฐ€ ์ด ์„œ๋น„์Šค ์ด๋ฆ„์„ ํ˜ธ์ถœํ•˜๋ฉด DNS๊ฐ€ ์™ธ๋ถ€ ๋„๋ฉ”์ธ์„ ์‘๋‹ต์œผ๋กœ ๋Œ๋ ค์ฃผ๊ณ , ์‹ค์ œ ํ†ต์‹ ์€ ๊ทธ ์™ธ๋ถ€ ๋„๋ฉ”์ธ์œผ๋กœ ์ง์ ‘ ์ผ์–ด๋‚œ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์™ธ๋ถ€์˜ ๋ ˆ๊ฑฐ์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ SaaS API์ฒ˜๋Ÿผ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” ์‹œ์Šคํ…œ์„ ํด๋Ÿฌ์Šคํ„ฐ ์•ˆ์˜ ์„œ๋น„์Šค์ฒ˜๋Ÿผ ๋ถ€๋ฅด๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

apiVersion: v1
kind: Service
metadata:
name: externalname-svc
spec:
type: ExternalName
externalName: my.database.com

์œ„์™€ ๊ฐ™์€ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์ ์šฉํ•˜๋ฉด ํด๋Ÿฌ์Šคํ„ฐ DNS์— externalname-svc.<namespace>.svc.cluster.local์ด my.database.com์œผ๋กœ ํ–ฅํ•˜๋Š” CNAME ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋“ฑ๋ก๋œ๋‹ค. ๊ฐ™์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ํŒŒ๋“œ๋Š” externalname-svc๋ผ๋Š” ์ด๋ฆ„๋งŒ์œผ๋กœ ์™ธ๋ถ€ DB์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ณ , ์™ธ๋ถ€ DB์˜ ๋„๋ฉ”์ธ์ด ๋ฐ”๋€Œ๋ฉด ์ด ๋งค๋‹ˆํŽ˜์ŠคํŠธ์˜ externalName ํ•œ ์ค„๋งŒ ๊ณ ์น˜๋ฉด ๋œ๋‹ค.

CNAME ๋ ˆ์ฝ”๋“œ๋Š” ๋„๋ฉ”์ธ์„ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์œผ๋กœ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ„๋ช…์ด๋‹ค. ๊ฐ™์€ ์ž๋ฆฌ์—์„œ ๋„๋ฉ”์ธ์„ IP๋กœ ์ง์ ‘ ํ•ด์„ํ•ด ์ฃผ๋Š” ๊ฒƒ์€ A ๋ ˆ์ฝ”๋“œ์ธ๋ฐ, ExternalName์ด ๋งŒ๋“œ๋Š” ๊ฒƒ์€ IP๊ฐ€ ์•„๋‹ˆ๋ผ ๋„๋ฉ”์ธ์ด๋ผ๋Š” ์ ์—์„œ ํ•ญ์ƒ CNAME์ด๋‹ค. ๋”ฐ๋ผ์„œ externalName ๊ฐ’์—๋Š” IP ์ฃผ์†Œ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์—†์œผ๋ฉฐ, ๋ฐ˜๋“œ์‹œ DNS๋กœ ํ•ด์„ ๊ฐ€๋Šฅํ•œ ๋„๋ฉ”์ธ์ด์–ด์•ผ ํ•œ๋‹ค.

ๅ‰ใฎ่จ˜ไบ‹
๐Ÿš€ Deployment๋กœ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌํ•˜๊ธฐ (๋กค๋ง ์—…๋ฐ์ดํŠธ & ๋กค๋ฐฑ)
ๆฌกใฎ่จ˜ไบ‹
ๆฌกใฎ่จ˜ไบ‹ใฏใ‚ใ‚Šใพใ›ใ‚“ ( ยท . ยท)
่ฃ…้ฃพใƒญใ‚ด