Kubernetes Tools/Istio

[Istio ๊ฐ€์ด๋“œ ep.14] 2๋ถ€ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ #8 | Fault Injection์„ ํ™œ์šฉํ•œ ์žฅ์•  ํ…Œ์ŠคํŠธ ๋ฐ Chaos Engineering

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

๐Ÿ”น ๊ฐœ์š”

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Istio์˜ Fault Injection ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ์žฅ์•  ํ…Œ์ŠคํŠธ ๋ฐ Chaos Engineering์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
Fault Injection(๊ฒฐํ•จ ์ฃผ์ž…)์€ ์ผ๋ถ€๋Ÿฌ ์žฅ์• ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ์‹œ์Šคํ…œ์˜ ๋ณต์›๋ ฅ(Resilience)์„ ํ‰๊ฐ€ํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์‹œ์Šคํ…œ์ด ์–ด๋–ป๊ฒŒ ๋ฐ˜์‘ํ•˜๋Š”์ง€ ๋ฏธ๋ฆฌ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋Œ€๋น„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” Fault Injection์˜ ๊ฐœ๋…, Istio๋ฅผ ํ™œ์šฉํ•œ ์žฅ์•  ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•,
๊ทธ๋ฆฌ๊ณ  VirtualService๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์—ฐ(latency) ๋ฐ ์˜ค๋ฅ˜(failure) ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น 1. Fault Injection(๊ฒฐํ•จ ์ฃผ์ž…)์ด๋ž€?

โœ… 1.1 Fault Injection ๊ฐœ๋…

**Fault Injection(๊ฒฐํ•จ ์ฃผ์ž…)**์€ ์ผ๋ถ€๋Ÿฌ ์žฅ์• ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ์„œ๋น„์Šค์˜ ์•ˆ์ •์„ฑ์„ ๊ฒ€์ฆํ•˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.
์ด๋Š” **Chaos Engineering(ํ˜ผ๋ˆ ๊ณตํ•™)**์˜ ํ•ต์‹ฌ ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ,
์‹ค์ œ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ์‹œ์Šคํ…œ์ด ์ •์ƒ์ ์œผ๋กœ ๋ณต๊ตฌ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

Fault Injection์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ด์œ 

  • ์„œ๋น„์Šค ์žฅ์•  ๋ฐœ์ƒ ์‹œ, ์‹œ์Šคํ…œ์˜ ๋ณต์›๋ ฅ์„ ํ‰๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด
  • ๋„คํŠธ์›Œํฌ ์ง€์—ฐ(latency), ์˜ค๋ฅ˜(failure) ๋“ฑ ์‹ค์ œ ์žฅ์•  ์ƒํ™ฉ์„ ๋ฏธ๋ฆฌ ํ…Œ์ŠคํŠธ
  • ์žฅ์•  ๋ฐœ์ƒ ์‹œ ํŠธ๋ž˜ํ”ฝ์ด ์ •์ƒ์ ์œผ๋กœ ๋ถ„์‚ฐ๋˜๊ณ , ์ž๋™ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ

โœ… 1.2 Istio์—์„œ Fault Injection ํ™œ์šฉ ๋ฐฉ์‹

Istio์—์„œ๋Š” VirtualService์˜ fault ์†์„ฑ์„ ํ™œ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ์žฅ์• ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ง€์—ฐ(Latency) Fault Injection → ๋„คํŠธ์›Œํฌ ์‘๋‹ต ์†๋„๋ฅผ ์ธ์œ„์ ์œผ๋กœ ์ง€์—ฐ
  • ์˜ค๋ฅ˜(Failure) Fault Injection → ํŠน์ • ์š”์ฒญ์„ ๊ฐ•์ œ๋กœ ์‹คํŒจํ•˜๊ฒŒ ์„ค์ •

๐Ÿ”น 2. Istio๋ฅผ ํ™œ์šฉํ•œ Fault Injection ์„ค์ •

โœ… 2.1 ์ง€์—ฐ(Latency) Fault Injection

์•„๋ž˜ ์˜ˆ์ œ์—์„œ๋Š” ํŠน์ • ์š”์ฒญ์ด 5์ดˆ ๋™์•ˆ ์ง€์—ฐ๋˜๋„๋ก ์„ค์ •ํ•˜์—ฌ ์‘๋‹ต ์†๋„๋ฅผ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-service
spec:
  hosts:
    - my-service
  http:
    - fault:
        delay:
          fixedDelay: 5s  # ๋ชจ๋“  ์š”์ฒญ์„ 5์ดˆ ๋™์•ˆ ์ง€์—ฐ
          percentage:
            value: 100.0  # 100% ์š”์ฒญ์— ์ ์šฉ
      route:
        - destination:
            host: my-service
            subset: v1

์„ค๋ช…:

  • fault.delay.fixedDelay: 5s → ๋ชจ๋“  ์š”์ฒญ์„ 5์ดˆ ๋™์•ˆ ์ง€์—ฐ
  • fault.delay.percentage.value: 100.0 → 100% ์š”์ฒญ์— ๋Œ€ํ•ด ์ง€์—ฐ ์ ์šฉ

๐Ÿ’ก ํ™œ์šฉ ์‚ฌ๋ก€:

  • ์‚ฌ์šฉ์ž๊ฐ€ ์‘๋‹ต ์ง€์—ฐ์„ ๊ฒฝํ—˜ํ•  ๋•Œ ์„œ๋น„์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ
  • Istio์˜ ํƒ€์ž„์•„์›ƒ ์„ค์ •์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ฒ€์ฆ

โœ… 2.2 ์˜ค๋ฅ˜(Failure) Fault Injection

์•„๋ž˜ ์˜ˆ์ œ์—์„œ๋Š” ํŠน์ • ์š”์ฒญ์ด 50% ํ™•๋ฅ ๋กœ 500 ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-service
spec:
  hosts:
    - my-service
  http:
    - fault:
        abort:
          httpStatus: 500  # HTTP 500 ์˜ค๋ฅ˜ ๋ฐ˜ํ™˜
          percentage:
            value: 50.0  # 50% ํ™•๋ฅ ๋กœ ์ ์šฉ
      route:
        - destination:
            host: my-service
            subset: v1

์„ค๋ช…:

  • fault.abort.httpStatus: 500 → ์‘๋‹ต์„ ๊ฐ•์ œ๋กœ 500 ์˜ค๋ฅ˜๋กœ ์„ค์ •
  • fault.abort.percentage.value: 50.0 → 50% ํ™•๋ฅ ๋กœ ์ ์šฉ (๋‚˜๋จธ์ง€ 50%๋Š” ์ •์ƒ ์‘๋‹ต)

๐Ÿ’ก ํ™œ์šฉ ์‚ฌ๋ก€:

  • ์„œ๋น„์Šค ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ •์ƒ์ ์œผ๋กœ ๋Œ€์‘ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ
  • ์ž๋™ ์žฌ์‹œ๋„(Retry), ์žฅ์•  ๊ฐ์ง€(Circuit Breaker) ์„ค์ •์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ ์šฉ๋˜๋Š”์ง€ ํ™•์ธ

๐Ÿ”น 3. Fault Injection๊ณผ ๋ณต์›๋ ฅ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค

์‹œ๋‚˜๋ฆฌ์˜ค 1๏ธโƒฃ: ํƒ€์ž„์•„์›ƒ ์„ค์ • ๊ฒ€์ฆ (์ง€์—ฐ Fault Injection ํ™œ์šฉ)

  1. ์œ„์˜ **์ง€์—ฐ Fault Injection ์„ค์ •(5์ดˆ ์ง€์—ฐ)**์„ ์ ์šฉ
  2. Istio์˜ ํƒ€์ž„์•„์›ƒ ์„ค์ •์ด 3์ดˆ๋กœ ๋˜์–ด ์žˆ๋‹ค๋ฉด, ์š”์ฒญ์ด ์ž๋™์œผ๋กœ ์‹คํŒจํ•ด์•ผ ํ•จ
  3. ์„œ๋น„์Šค์—์„œ ํƒ€์ž„์•„์›ƒ์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธ

์‹œ๋‚˜๋ฆฌ์˜ค 2๏ธโƒฃ: ์ž๋™ ๋ณต๊ตฌ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ (์˜ค๋ฅ˜ Fault Injection ํ™œ์šฉ)

  1. ์œ„์˜ **์˜ค๋ฅ˜ Fault Injection ์„ค์ •(50% 500 ์˜ค๋ฅ˜ ๋ฐœ์ƒ)**์„ ์ ์šฉ
  2. Istio์˜ **Retry ์„ค์ •(3ํšŒ ์žฌ์‹œ๋„)**์„ ํ™œ์„ฑํ™”
  3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์ž๋™์œผ๋กœ ์žฌ์‹œ๋„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ํ™•์ธ
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-service
spec:
  hosts:
    - my-service
  http:
    - fault:
        abort:
          httpStatus: 500
          percentage:
            value: 50.0
      retries:
        attempts: 3  # ์ตœ๋Œ€ 3๋ฒˆ๊นŒ์ง€ ์žฌ์‹œ๋„
        perTryTimeout: 2s  # ๊ฐ ์š”์ฒญ๋‹น ์ตœ๋Œ€ 2์ดˆ ๋Œ€๊ธฐ
        retryOn: "gateway-error,connect-failure,refused-stream"
      route:
        - destination:
            host: my-service
            subset: v1

๐Ÿ’ก ์ด ์„ค์ •์„ ์ ์šฉํ•˜๋ฉด, ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์ž๋™์œผ๋กœ 3ํšŒ ์žฌ์‹œ๋„ํ•˜๋ฉฐ ์žฅ์• ๋ฅผ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ์Œ


๐Ÿ“Œ ๊ฒฐ๋ก 

  • Fault Injection์€ ์‹ค์ œ ์žฅ์•  ์ƒํ™ฉ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜์—ฌ ์„œ๋น„์Šค์˜ ๋ณต์›๋ ฅ์„ ๊ฒ€์ฆํ•˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • ์ง€์—ฐ(Latency) Fault Injection์„ ํ™œ์šฉํ•˜๋ฉด, ๋„คํŠธ์›Œํฌ ์‘๋‹ต ์‹œ๊ฐ„์ด ๊ธธ์–ด์งˆ ๋•Œ ์„œ๋น„์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ค๋ฅ˜(Failure) Fault Injection์„ ์ ์šฉํ•˜๋ฉด, ์„œ๋ฒ„๊ฐ€ ๊ฐ•์ œ๋กœ ์‹คํŒจํ•  ๋•Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ ์ ˆํ•˜๊ฒŒ ๋Œ€์‘ํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Retry, Circuit Breaker์™€ ํ•จ๊ป˜ ์กฐํ•ฉํ•˜๋ฉด ๋”์šฑ ๊ฐ•๋ ฅํ•œ ์žฅ์•  ๋ณต์›๋ ฅ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
728x90