Kubernetes Tools/Istio

[Istio ๊ฐ€์ด๋“œ ep.6] 1๋ถ€ ๊ฐœ๋…๊ณผ ๊ธฐ๋ณธ ์„ค์ • #6 | Istio์˜ ๊ธฐ๋ณธ์ ์ธ ๋ฆฌ์†Œ์Šค ๊ฐœ๋… (VirtualService, Gateway ๋“ฑ)

ygtoken 2025. 3. 18. 10:37
728x90

๐Ÿ”น ๊ฐœ์š”

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Istio์˜ ํ•ต์‹ฌ ๋ฆฌ์†Œ์Šค ๊ฐœ๋…์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
Istio๋Š” Kubernetes์˜ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ๊ด€๋ฆฌํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ,
๊ทธ์ค‘์—์„œ๋„ VirtualService, DestinationRule, Gateway๊ฐ€ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์š”์†Œ์ž…๋‹ˆ๋‹ค.
์ด ๊ธ€์—์„œ๋Š” ๊ฐ๊ฐ์˜ ์—ญํ• ๊ณผ ์„ค์ • ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ณ , ์‹ค์ œ YAML ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ํ™œ์šฉ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น 1. Istio์˜ ์ฃผ์š” ๋„คํŠธ์›Œํฌ ๋ฆฌ์†Œ์Šค

โœ… 1.1 VirtualService (ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ… ์ œ์–ด)

VirtualService๋Š” ํŠธ๋ž˜ํ”ฝ์„ ํŠน์ • ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
Kubernetes์˜ ๊ธฐ๋ณธ Service ๋ฆฌ์†Œ์Šค๋งŒ์œผ๋กœ๋Š” ์„ธ๋ฐ€ํ•œ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์—,
Istio์˜ VirtualService๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋‹ค ์ •๊ตํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

VirtualService์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ํ˜ธ์ŠคํŠธ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…: ์—ฌ๋Ÿฌ ์„œ๋น„์Šค ๋„๋ฉ”์ธ(host)์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌ
  • ํŠธ๋ž˜ํ”ฝ ๋ถ„๋ฐฐ: ํŠน์ • ์„œ๋น„์Šค ๋ฒ„์ „(v1/v2)์— ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€์ค‘์น˜(weight) ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐฐ๋ถ„
  • ๋ฆฌํŠธ๋ผ์ด & ํƒ€์ž„์•„์›ƒ: ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋‚ผ ๋•Œ ์š”์ฒญ ์‹คํŒจ ์‹œ ์žฌ์‹œ๋„, ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ž๋™ ์ข…๋ฃŒ
  • Fault Injection(์žฅ์•  ํ…Œ์ŠคํŠธ): ์˜๋„์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ ์žฅ์•  ์ƒํ™ฉ์„ ๋งŒ๋“ค์–ด ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ

โœ… 1.2 DestinationRule (์„œ๋น„์Šค๋ณ„ ํŠธ๋ž˜ํ”ฝ ์ •์ฑ… ์„ค์ •)

DestinationRule์€ ํŠน์ • ์„œ๋น„์Šค์˜ ํŠธ๋ž˜ํ”ฝ ์ •์ฑ…์„ ์ •์˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
VirtualService์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ, ์„œ๋น„์Šค ๊ฐ„ ํŠธ๋ž˜ํ”ฝ ํ๋ฆ„์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DestinationRule์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์„ค์ •: ํŠธ๋ž˜ํ”ฝ์„ ํŠน์ • ๋ฐฉ์‹(Round Robin, Least Connection ๋“ฑ)์œผ๋กœ ๋ถ„๋ฐฐ
  • ์—ฐ๊ฒฐ ํ’€ ๊ด€๋ฆฌ: ์ตœ๋Œ€ ์—ฐ๊ฒฐ ์ˆ˜, ์—ฐ๊ฒฐ ์œ ์ง€ ์‹œ๊ฐ„ ๋“ฑ ์„ค์ • ๊ฐ€๋Šฅ
  • ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ์ ์šฉ: ์—ฐ์†๋œ ์š”์ฒญ ์‹คํŒจ ์‹œ ์„œ๋น„์Šค ์ฐจ๋‹จ

โœ… 1.3 Gateway (์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ)

Gateway๋Š” ์™ธ๋ถ€์—์„œ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
๊ธฐ๋ณธ์ ์œผ๋กœ Kubernetes์˜ Ingress Controller์™€ ๋น„์Šทํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ,
Istio Gateway๋Š” L4(Layer 4)์—์„œ์˜ ์ œ์–ด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, L7(Layer 7) ๊ธฐ๋ฐ˜์˜ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Gateway์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  • Ingress Gateway: ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ ๋‚ด๋ถ€ ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ…
  • Egress Gateway: ๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€ ์„œ๋น„์Šค๋กœ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ด
  • TLS ๋ฐ HTTPS ์ง€์›: SSL/TLS๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ณด์•ˆ ์„ค์ • ๊ฐ€๋Šฅ

๐Ÿ”น 2. Istio ๋ฆฌ์†Œ์Šค ์˜ˆ์ œ ๋ฐ ์„ค์ • ๋ฐฉ๋ฒ•

โœ… 2.1 VirtualService ์˜ˆ์ œ (ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ… ์„ค์ •)

์•„๋ž˜ ์˜ˆ์ œ์—์„œ๋Š” VirtualService๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํŠน์ • ์„œ๋น„์Šค(v1, v2)๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„๋ฐฐํ•ฉ๋‹ˆ๋‹ค.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService  # VirtualService ๋ฆฌ์†Œ์Šค ์ •์˜
metadata:
  name: my-service  # VirtualService์˜ ์ด๋ฆ„
spec:
  hosts:
    - my-service  # ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ•  ์„œ๋น„์Šค ์ด๋ฆ„
  http:
    - route:
        - destination:
            host: my-service  # ๋Œ€์ƒ ์„œ๋น„์Šค ์ด๋ฆ„
            subset: v1  # v1 ๋ฒ„์ „์˜ ์„œ๋น„์Šค๋กœ ํŠธ๋ž˜ํ”ฝ ์ „๋‹ฌ
          weight: 70  # 70%์˜ ํŠธ๋ž˜ํ”ฝ์„ v1์œผ๋กœ ๋ถ„๋ฐฐ
        - destination:
            host: my-service
            subset: v2  # v2 ๋ฒ„์ „์˜ ์„œ๋น„์Šค๋กœ ํŠธ๋ž˜ํ”ฝ ์ „๋‹ฌ
          weight: 30  # 30%์˜ ํŠธ๋ž˜ํ”ฝ์„ v2๋กœ ๋ถ„๋ฐฐ

์„ค๋ช…:

  • VirtualService → ํŠน์ • ํ˜ธ์ŠคํŠธ(์„œ๋น„์Šค ์ด๋ฆ„)์— ๋Œ€ํ•œ ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ… ๊ทœ์น™์„ ์„ค์ •
  • destination.host → ํŠธ๋ž˜ํ”ฝ์ด ํ–ฅํ•  ์„œ๋น„์Šค์˜ ์ด๋ฆ„
  • subset → ์„œ๋น„์Šค์˜ ํŠน์ • ๋ฒ„์ „์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…
  • weight → ํŠธ๋ž˜ํ”ฝ ๋ถ„๋ฐฐ ๋น„์œจ(์˜ˆ: v1 70%, v2 30%)

โœ… 2.2 DestinationRule ์˜ˆ์ œ (์„œ๋น„์Šค๋ณ„ ํŠธ๋ž˜ํ”ฝ ์ •์ฑ… ์„ค์ •)

์•„๋ž˜ ์˜ˆ์ œ์—์„œ๋Š” DestinationRule์„ ํ™œ์šฉํ•˜์—ฌ ์„œ๋น„์Šค์˜ ์„œ๋ธŒ์…‹(subset)๊ณผ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์ •์ฑ…์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule  # DestinationRule ๋ฆฌ์†Œ์Šค ์ •์˜
metadata:
  name: my-service  # DestinationRule์˜ ์ด๋ฆ„
spec:
  host: my-service  # ๋Œ€์ƒ ์„œ๋น„์Šค ์ด๋ฆ„
  subsets:
    - name: v1  # v1 ๋ฒ„์ „ ์„œ๋น„์Šค ์ •์˜
      labels:
        version: v1
    - name: v2  # v2 ๋ฒ„์ „ ์„œ๋น„์Šค ์ •์˜
      labels:
        version: v2
  trafficPolicy:
    loadBalancer:
      simple: ROUND_ROBIN  # ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹์œผ๋กœ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์„ค์ •

์„ค๋ช…:

  • DestinationRule → ์„œ๋น„์Šค์˜ ํŠธ๋ž˜ํ”ฝ ์ •์ฑ…์„ ์ •์˜
  • subsets → ํŠน์ • ์„œ๋น„์Šค ๋ฒ„์ „(v1, v2)์„ ๊ตฌ๋ถ„
  • trafficPolicy.loadBalancer → ํŠธ๋ž˜ํ”ฝ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๋ฐฉ์‹์„ ์„ค์ • (ROUND_ROBIN: ์ˆœ์ฐจ์  ๋ฐฐ๋ถ„)

โœ… 2.3 Gateway ์˜ˆ์ œ (์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ)

์•„๋ž˜ ์˜ˆ์ œ์—์„œ๋Š” Gateway๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€ ์„œ๋น„์Šค๋กœ์˜ ํŠธ๋ž˜ํ”ฝ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

apiVersion: networking.istio.io/v1alpha3
kind: Gateway  # Gateway ๋ฆฌ์†Œ์Šค ์ •์˜
metadata:
  name: my-gateway  # Gateway์˜ ์ด๋ฆ„
spec:
  selector:
    istio: ingressgateway  # Istio Ingress Gateway ์‚ฌ์šฉ
  servers:
    - port:
        number: 80  # HTTP 80 ํฌํŠธ์—์„œ ์ˆ˜์‹ 
        name: http
        protocol: HTTP
      hosts:
        - "*"  # ๋ชจ๋“  ๋„๋ฉ”์ธ ํ—ˆ์šฉ

์„ค๋ช…:

  • Gateway → ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ ๋‚ด๋ถ€๋กœ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• 
  • selector.istio: ingressgateway → Istio์˜ ๊ธฐ๋ณธ Ingress Gateway๋ฅผ ์‚ฌ์šฉ
  • servers.port.number: 80 → HTTP 80 ํฌํŠธ์—์„œ ํŠธ๋ž˜ํ”ฝ์„ ์ˆ˜์‹ 
  • hosts: "*" → ๋ชจ๋“  ๋„๋ฉ”์ธ์˜ ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉ

๐Ÿ“Œ ๊ฒฐ๋ก 

  • VirtualService: ์„œ๋น„์Šค ๊ฐ„ ํŠธ๋ž˜ํ”ฝ์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•˜๊ณ , ๊ฐ€์ค‘์น˜ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…, A/B ํ…Œ์ŠคํŠธ, Canary ๋ฐฐํฌ ๋“ฑ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • DestinationRule: ํŠน์ • ์„œ๋น„์Šค์˜ ํŠธ๋ž˜ํ”ฝ ์ •์ฑ…์„ ์„ค์ •ํ•˜์—ฌ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๋ฐฉ์‹ ๋ฐ ์„œ๋ธŒ์…‹(์„œ๋น„์Šค ๋ฒ„์ „๋ณ„ ๋ผ์šฐํŒ…) ์ ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • Gateway: ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ ๋‚ด๋ถ€ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌํ•˜๋ฉฐ, TLS/HTTPS ์„ค์ • ๋ฐ ๋„คํŠธ์›Œํฌ ์—‘์„ธ์Šค ์ œ์–ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • VirtualService + DestinationRule + Gateway๋ฅผ ์กฐํ•ฉํ•˜๋ฉด Istio์˜ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿš€
728x90