Kubernetes Tools/Istio

[Istio ๊ฐ€์ด๋“œ ep.8] 2๋ถ€ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ #2 | VirtualService & DestinationRule: ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ… ์™„์ „ ์ •๋ณต

ygtoken 2025. 3. 18. 11:39
728x90

๐Ÿ”น ๊ฐœ์š”

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Istio์˜ VirtualService์™€ DestinationRule์„ ํ™œ์šฉํ•œ ๊ณ ๊ธ‰ ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ… ๊ธฐ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
Istio์˜ VirtualService์™€ DestinationRule์„ ํ™œ์šฉํ•˜๋ฉด,
๋‹จ์ˆœํ•œ ์„œ๋น„์Šค ๊ฐ„ ์—ฐ๊ฒฐ์„ ๋„˜์–ด ์„ธ๋ฐ€ํ•œ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ, A/B ํ…Œ์ŠคํŠธ, Canary ๋ฐฐํฌ ๋“ฑ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” VirtualService์™€ DestinationRule์˜ ๊ฐœ๋…, ์‹ค์ œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•,
๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ YAML ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ํŠธ๋ž˜ํ”ฝ์„ ์œ ์—ฐํ•˜๊ฒŒ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น 1. VirtualService์™€ DestinationRule์ด๋ž€?

โœ… 1.1 VirtualService๋ž€?

VirtualService๋Š” Istio์—์„œ ํŠธ๋ž˜ํ”ฝ์„ ํŠน์ • ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ๋‹จ์ˆœํ•œ ์„œ๋น„์Šค ์—ฐ๊ฒฐ์„ ๋„˜์–ด์„œ ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…, ํŠธ๋ž˜ํ”ฝ ๋ถ„๋ฐฐ, ๋ฆฌํŠธ๋ผ์ด ๋ฐ ์žฅ์•  ๋Œ€์‘ ๋“ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

  • ํŠธ๋ž˜ํ”ฝ ๋ถ„๋ฐฐ: ์„œ๋น„์Šค ๋ฒ„์ „(v1, v2) ๊ฐ„ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€์ค‘์น˜ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ„๋ฐฐ
  • ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…: ํŠน์ • URL ํŒจํ„ด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ… ๊ฐ€๋Šฅ
  • Fault Injection(์žฅ์•  ํ…Œ์ŠคํŠธ): ๋„คํŠธ์›Œํฌ ์žฅ์•  ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ฐ€๋Šฅ

โœ… 1.2 DestinationRule์ด๋ž€?

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

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

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

๐Ÿ”น 2. VirtualService & DestinationRule ์˜ˆ์ œ

โœ… 2.1 VirtualService: ๊ธฐ๋ณธ์ ์ธ ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ… ์„ค์ •

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

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

์„ค๋ช…:

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

โœ… 2.2 DestinationRule: ์„œ๋น„์Šค ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ

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

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule  # ํŠธ๋ž˜ํ”ฝ ์ •์ฑ…์„ ์ •์˜ํ•˜๋Š” ๋ฆฌ์†Œ์Šค
metadata:
  name: my-service
spec:
  host: my-service  # ๋Œ€์ƒ ์„œ๋น„์Šค ์ด๋ฆ„
  subsets:
    - name: v1  # v1 ๋ฒ„์ „ ์„œ๋ธŒ์…‹ ์ •์˜
      labels:
        version: v1
    - name: v2  # v2 ๋ฒ„์ „ ์„œ๋ธŒ์…‹ ์ •์˜
      labels:
        version: v2
  trafficPolicy:
    loadBalancer:
      simple: LEAST_CONN  # ๊ฐ€์žฅ ์ ์€ ์—ฐ๊ฒฐ์„ ๊ฐ€์ง„ ์„œ๋ฒ„๋กœ ํŠธ๋ž˜ํ”ฝ ์ „๋‹ฌ

์„ค๋ช…:

  • DestinationRule → ์„œ๋น„์Šค์˜ ํŠธ๋ž˜ํ”ฝ ์ •์ฑ…์„ ์ •์˜
  • subsets → ํŠน์ • ์„œ๋น„์Šค ๋ฒ„์ „(v1, v2) ๊ตฌ๋ถ„ ๊ฐ€๋Šฅ
  • trafficPolicy.loadBalancer.simple: LEAST_CONN →
    → ๊ฐ€์žฅ ์ ์€ ์—ฐ๊ฒฐ์„ ๊ฐ€์ง„ ์„œ๋ฒ„๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„๋ฐฐํ•˜๋Š” ๋ฐฉ์‹

โœ… 2.3 VirtualService + DestinationRule์„ ํ™œ์šฉํ•œ Canary ๋ฐฐํฌ

์•„๋ž˜ ์˜ˆ์ œ์—์„œ๋Š” Canary ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด ์ ์ง„์ ์œผ๋กœ v2 ์„œ๋น„์Šค๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ์ „๋žต์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: canary-deployment
spec:
  hosts:
    - my-service
  http:
    - route:
        - destination:
            host: my-service
            subset: v1  # ๊ธฐ์กด v1 ์„œ๋น„์Šค
          weight: 90  # 90%์˜ ํŠธ๋ž˜ํ”ฝ์€ v1 ์„œ๋น„์Šค๋กœ ์ „๋‹ฌ
        - destination:
            host: my-service
            subset: v2  # ์‹ ๊ทœ v2 ์„œ๋น„์Šค
          weight: 10  # 10%์˜ ํŠธ๋ž˜ํ”ฝ์€ v2 ์„œ๋น„์Šค๋กœ ์ „๋‹ฌ

์„ค๋ช…:

  • weight: 90, weight: 10 → ์ดˆ๊ธฐ์— 10%๋งŒ v2๋กœ ๋ณด๋‚ด๊ณ  ์ ์ง„์ ์œผ๋กœ ์ฆ๊ฐ€ ๊ฐ€๋Šฅ
  • Canary ๋ฐฐํฌ ๋ฐฉ์‹์œผ๋กœ, v2 ์„œ๋น„์Šค์˜ ์•ˆ์ •์„ฑ์ด ํ™•์ธ๋˜๋ฉด ์ ์ง„์ ์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ฆ๊ฐ€

โœ… 2.4 VirtualService๋ฅผ ํ™œ์šฉํ•œ ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…

์•„๋ž˜ ์˜ˆ์ œ์—์„œ๋Š” ํŠน์ • URL ๊ฒฝ๋กœ(/api/v2)์— ๋”ฐ๋ผ ํŠธ๋ž˜ํ”ฝ์„ v2 ์„œ๋น„์Šค๋กœ๋งŒ ๋ผ์šฐํŒ…ํ•˜๋Š” ์„ค์ •์ž…๋‹ˆ๋‹ค.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: path-based-routing
spec:
  hosts:
    - my-service
  http:
    - match:
        - uri:
            prefix: "/api/v2"  # "/api/v2" ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ v2 ์„œ๋น„์Šค๋กœ ์ „๋‹ฌ
      route:
        - destination:
            host: my-service
            subset: v2
    - route:
        - destination:
            host: my-service
            subset: v1  # ๋‚˜๋จธ์ง€๋Š” v1 ์„œ๋น„์Šค๋กœ ์ „๋‹ฌ

์„ค๋ช…:

  • /api/v2 ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ๋งŒ v2 ์„œ๋น„์Šค๋กœ ์ „๋‹ฌ
  • ๊ทธ ์™ธ ๋ชจ๋“  ์š”์ฒญ์€ ๊ธฐ๋ณธ v1 ์„œ๋น„์Šค๋กœ ์ „๋‹ฌ

๐Ÿ“Œ ๊ฒฐ๋ก 

  • VirtualService๋Š” ํŠธ๋ž˜ํ”ฝ์„ ํŠน์ • ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ…ํ•˜๊ณ , ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…, ๊ฐ€์ค‘์น˜ ๊ธฐ๋ฐ˜ ํŠธ๋ž˜ํ”ฝ ๋ถ„๋ฐฐ, ์žฅ์•  ํ…Œ์ŠคํŠธ(Fault Injection) ๋“ฑ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • DestinationRule์€ ์„œ๋น„์Šค์˜ ์„œ๋ธŒ์…‹์„ ์ •์˜ํ•˜๊ณ , ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๋ฐฉ์‹ ๋ฐ ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ์ •์ฑ…์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • VirtualService + DestinationRule์„ ์กฐํ•ฉํ•˜๋ฉด, A/B ํ…Œ์ŠคํŠธ ๋ฐ Canary ๋ฐฐํฌ์™€ ๊ฐ™์€ ๊ณ ๊ธ‰ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…์„ ํ™œ์šฉํ•˜๋ฉด, ํŠน์ • API ๋ฒ„์ „์— ๋”ฐ๋ผ ํŠธ๋ž˜ํ”ฝ์„ ๋‚˜๋ˆ„๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

728x90