Kubernetes Tools/Istio

[Istio ๊ฐ€์ด๋“œ ep.10] 2๋ถ€ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ #4 | ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ ์‹ค์Šต: ํŠธ๋ž˜ํ”ฝ ๋ฏธ๋Ÿฌ๋ง ๋ฐ ๊ฐ€์ค‘์น˜ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…

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

๐Ÿ”น ๊ฐœ์š”

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Istio์˜ ๋ธ”๋ฃจ/๊ทธ๋ฆฐ(Blue-Green) ๋ฐฐํฌ ์ „๋žต์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ๋Š” ์„œ๋น„์Šค๋ฅผ ์ค‘๋‹จ ์—†์ด ๋ฐฐํฌํ•˜๊ณ  ๋กค๋ฐฑ์ด ์šฉ์ดํ•œ ๋ฐฐํฌ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
Istio์—์„œ๋Š” VirtualService์™€ DestinationRule์„ ํ™œ์šฉํ•˜์—ฌ ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ๋ฅผ ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ ๊ฐœ๋…, ํŠธ๋ž˜ํ”ฝ ๋ฏธ๋Ÿฌ๋ง ๊ธฐ๋ฒ•, ๊ฐ€์ค‘์น˜ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…์„ ํ™œ์šฉํ•œ ๋ฐฐํฌ ์‹ค์Šต์„ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น 1. ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ๋ž€?

โœ… 1.1 ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ ๊ฐœ๋…

๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ๋Š” ๊ธฐ์กด ๋ฒ„์ „(Blue)๊ณผ ์ƒˆ๋กœ์šด ๋ฒ„์ „(Green)์„ ๋™์‹œ์— ์šด์˜ํ•˜๋ฉด์„œ,
ํŠธ๋ž˜ํ”ฝ์„ ์ ์ง„์ ์œผ๋กœ ์ƒˆ๋กœ์šด ๋ฒ„์ „(Green)์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๋ฐฐํฌ ์ „๋žต์ž…๋‹ˆ๋‹ค.

๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ์˜ ํ๋ฆ„

  1. Blue(๊ธฐ์กด ๋ฒ„์ „)์™€ Green(์ƒˆ๋กœ์šด ๋ฒ„์ „) ํ™˜๊ฒฝ์„ ๋ชจ๋‘ ์šด์˜
  2. ํŠธ๋ž˜ํ”ฝ์˜ ์ผ๋ถ€๋ฅผ Green์œผ๋กœ ์ด๋™ํ•˜๋ฉฐ ํ…Œ์ŠคํŠธ
  3. ์ด์ƒ์ด ์—†์œผ๋ฉด ์ „์ฒด ํŠธ๋ž˜ํ”ฝ์„ Green์œผ๋กœ ์ด๋™
  4. ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ฆ‰์‹œ Blue๋กœ ๋กค๋ฐฑ ๊ฐ€๋Šฅ

๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ์˜ ์žฅ์ 

  • ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ๊ฐ€๋Šฅ
  • ํŠธ๋ž˜ํ”ฝ์„ ์ ์ง„์ ์œผ๋กœ ์ด๋™ํ•˜๋ฉฐ ์„œ๋น„์Šค ์•ˆ์ •์„ฑ ํ™•๋ณด
  • ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ๋น ๋ฅธ ๋กค๋ฐฑ ๊ฐ€๋Šฅ

โœ… 1.2 Istio์—์„œ ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ ์ ์šฉ ๋ฐฉ์‹

Istio์—์„œ๋Š” VirtualService์™€ DestinationRule์„ ํ™œ์šฉํ•˜์—ฌ,
ํŠธ๋ž˜ํ”ฝ์„ ์ ์ง„์ ์œผ๋กœ ๊ธฐ์กด ๋ฒ„์ „(Blue)์—์„œ ์‹ ๊ทœ ๋ฒ„์ „(Green)์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • VirtualService โ†’ ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ… ์„ค์ • (๊ฐ€์ค‘์น˜ ์กฐ์ •, ํŠธ๋ž˜ํ”ฝ ๋ฏธ๋Ÿฌ๋ง ์ ์šฉ)
  • DestinationRule โ†’ ์„œ๋น„์Šค์˜ ๋ฒ„์ „๋ณ„ ์„œ๋ธŒ์…‹(Subset) ์ •์˜

๐Ÿ”น 2. ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ ์‹ค์Šต (๊ฐ€์ค‘์น˜ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…)

โœ… 2.1 ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ DestinationRule ์„ค์ •

์•„๋ž˜ YAML์€ ๊ธฐ์กด ๋ฒ„์ „(v1)๊ณผ ์ƒˆ๋กœ์šด ๋ฒ„์ „(v2)์„ ๊ตฌ๋ถ„ํ•˜๋Š” DestinationRule ์„ค์ •์ž…๋‹ˆ๋‹ค.

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: my-service
spec:
  host: my-service  # ๋Œ€์ƒ ์„œ๋น„์Šค ์ด๋ฆ„
  subsets:
    - name: v1  # ๊ธฐ์กด ์„œ๋น„์Šค ๋ฒ„์ „ (Blue)
      labels:
        version: v1
    - name: v2  # ์‹ ๊ทœ ์„œ๋น„์Šค ๋ฒ„์ „ (Green)
      labels:
        version: v2
  trafficPolicy:
    loadBalancer:
      simple: ROUND_ROBIN  # ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹์œผ๋กœ ํŠธ๋ž˜ํ”ฝ ๋ถ„๋ฐฐ

์„ค๋ช…:

  • subsets.name: v1 โ†’ ๊ธฐ์กด ๋ฒ„์ „(Blue) ์„œ๋น„์Šค ์ •์˜
  • subsets.name: v2 โ†’ ์‹ ๊ทœ ๋ฒ„์ „(Green) ์„œ๋น„์Šค ์ •์˜
  • loadBalancer.simple: ROUND_ROBIN โ†’ ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐฐ๋ถ„

โœ… 2.2 ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ํŠธ๋ž˜ํ”ฝ ๋ถ„๋ฐฐ ์„ค์ • (VirtualService ์ ์šฉ)

์•„๋ž˜ VirtualService๋Š” ํŠธ๋ž˜ํ”ฝ์„ 90%๋Š” ๊ธฐ์กด ์„œ๋น„์Šค(v1), 10%๋Š” ์‹ ๊ทœ ์„œ๋น„์Šค(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: 90  # 90% ํŠธ๋ž˜ํ”ฝ์€ ๊ธฐ์กด ๋ฒ„์ „์œผ๋กœ ์ „๋‹ฌ
        - destination:
            host: my-service
            subset: v2  # ์‹ ๊ทœ ์„œ๋น„์Šค(v2)
          weight: 10  # 10% ํŠธ๋ž˜ํ”ฝ์€ ์‹ ๊ทœ ๋ฒ„์ „์œผ๋กœ ์ „๋‹ฌ

์„ค๋ช…:

  • weight: 90 โ†’ ๊ธฐ์กด v1 ์„œ๋น„์Šค๋กœ 90% ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋ƒ„
  • weight: 10 โ†’ ์‹ ๊ทœ v2 ์„œ๋น„์Šค๋กœ 10% ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋ƒ„
  • ์ ์ง„์ ์œผ๋กœ ์‹ ๊ทœ ์„œ๋น„์Šค(v2)๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ ์ง„ํ–‰ ๊ฐ€๋Šฅ

๐Ÿ”น 3. ํŠธ๋ž˜ํ”ฝ ๋ฏธ๋Ÿฌ๋ง์„ ํ™œ์šฉํ•œ ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ํ…Œ์ŠคํŠธ

โœ… 3.1 ํŠธ๋ž˜ํ”ฝ ๋ฏธ๋Ÿฌ๋ง์ด๋ž€?

ํŠธ๋ž˜ํ”ฝ ๋ฏธ๋Ÿฌ๋ง์€ ์‹ค์ œ ์‚ฌ์šฉ์ž ์š”์ฒญ์€ ๊ธฐ์กด ์„œ๋น„์Šค(v1)๋กœ ๋ณด๋‚ด๋ฉด์„œ, ๋™์‹œ์— ๋ณต์‚ฌ๋œ ์š”์ฒญ์„ ์ƒˆ๋กœ์šด ์„œ๋น„์Šค(v2)๋กœ ๋ณด๋‚ด ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ์‹ค์ œ ํ™˜๊ฒฝ์—์„œ ์‹ ๊ทœ ์„œ๋น„์Šค์˜ ์„ฑ๋Šฅ ๋ฐ ์˜ค๋ฅ˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… 3.2 ํŠธ๋ž˜ํ”ฝ ๋ฏธ๋Ÿฌ๋ง ์„ค์ • (VirtualService ์ ์šฉ)

์•„๋ž˜ VirtualService๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ๊ธฐ์กด v1 ์„œ๋น„์Šค๋กœ ๋ณด๋‚ด๋ฉด์„œ, 100% ํŠธ๋ž˜ํ”ฝ์„ 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)
      mirror:
        host: my-service
        subset: v2  # ์‹ ๊ทœ ์„œ๋น„์Šค(v2)๋กœ ํŠธ๋ž˜ํ”ฝ ๋ฏธ๋Ÿฌ๋ง
      mirrorPercentage:
        value: 100.0  # 100% ํŠธ๋ž˜ํ”ฝ์„ ๋ฏธ๋Ÿฌ๋ง (์›๋ณธ ์š”์ฒญ์€ v1์œผ๋กœ๋งŒ ์ „๋‹ฌ๋จ)

์„ค๋ช…:

  • route.destination.subset: v1 โ†’ ๋ชจ๋“  ์š”์ฒญ์„ ๊ธฐ์กด v1 ์„œ๋น„์Šค๋กœ ์ „๋‹ฌ
  • mirror.destination.subset: v2 โ†’ ๊ธฐ์กด ์š”์ฒญ์„ v2 ์„œ๋น„์Šค๋กœ ๋ณต์‚ฌํ•˜์—ฌ ๋ฏธ๋Ÿฌ๋ง
  • mirrorPercentage.value: 100.0 โ†’ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ v2 ์„œ๋น„์Šค์—๋„ ์ „๋‹ฌ

๐Ÿ”น 4. ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ ์ง„ํ–‰ ๋ฐฉ๋ฒ•

1๏ธโƒฃ ์ดˆ๊ธฐ ์ƒํƒœ:

  • ๊ธฐ์กด ์„œ๋น„์Šค(v1)์— 100% ํŠธ๋ž˜ํ”ฝ ์ „๋‹ฌ
  • ์‹ ๊ทœ ์„œ๋น„์Šค(v2)์—๋Š” ํŠธ๋ž˜ํ”ฝ ๋ฏธ๋Ÿฌ๋ง ์ ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ

2๏ธโƒฃ ํŠธ๋ž˜ํ”ฝ ๋ถ„๋ฐฐ ์‹œ์ž‘:

  • VirtualService๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ v2๋กœ 10% ํŠธ๋ž˜ํ”ฝ ์ „๋‹ฌ
  • ๋‚˜๋จธ์ง€ 90%๋Š” v1์œผ๋กœ ์œ ์ง€

3๏ธโƒฃ ์ ์ง„์  ์ฆ๊ฐ€:

  • v2์˜ ์•ˆ์ •์„ฑ์ด ํ™•์ธ๋˜๋ฉด, ํŠธ๋ž˜ํ”ฝ์„ 50%๋กœ ์ฆ๊ฐ€
  • ์ดํ›„ 100%๊นŒ์ง€ ์ด๋™

4๏ธโƒฃ ๋ฐฐํฌ ์™„๋ฃŒ ๋ฐ ๋กค๋ฐฑ ์˜ต์…˜:

  • v2๊ฐ€ ์™„์ „ํžˆ ์•ˆ์ •์ ์ด๋ฉด, v1์„ ์ œ๊ฑฐ
  • ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ํŠธ๋ž˜ํ”ฝ์„ ๋‹ค์‹œ v1์œผ๋กœ ๋˜๋Œ๋ฆฌ๋ฉด ์ฆ‰์‹œ ๋กค๋ฐฑ ๊ฐ€๋Šฅ

๐Ÿ“Œ ๊ฒฐ๋ก 

  • ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ๋Š” ๊ธฐ์กด ๋ฒ„์ „(Blue)๊ณผ ์‹ ๊ทœ ๋ฒ„์ „(Green)์„ ๋™์‹œ์— ์šด์˜ํ•˜๋ฉด์„œ, ์ ์ง„์ ์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ด๋™ํ•˜๋Š” ๋ฐฐํฌ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • VirtualService์™€ DestinationRule์„ ํ™œ์šฉํ•˜์—ฌ ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ํŠธ๋ž˜ํ”ฝ ๋ฏธ๋Ÿฌ๋ง์„ ํ™œ์šฉํ•˜๋ฉด, ์‹ค์ œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉด์„œ ์‹ ๊ทœ ์„œ๋น„์Šค์˜ ์„ฑ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์ง„์ ์ธ ํŠธ๋ž˜ํ”ฝ ์ด๋™์„ ํ†ตํ•ด ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•œ ํ›„ ์ „์ฒด ํŠธ๋ž˜ํ”ฝ์„ ์ƒˆ๋กœ์šด ๋ฒ„์ „์œผ๋กœ ์ด๋™ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋กค๋ฐฑ์ด ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
728x90