Kubernetes Tools/Istio

[Istio ๊ฐ€์ด๋“œ ep.13] 2๋ถ€ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ #7 | ์„œ๋น„์Šค ๋ณต์›๋ ฅ์„ ๋†’์ด๋Š” ๋ฆฌํŠธ๋ผ์ด, ํƒ€์ž„์•„์›ƒ, Circuit Breaker ์„ค์ •

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

๐Ÿ”น ๊ฐœ์š”

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Istio๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์„œ๋น„์Šค ๋ณต์›๋ ฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ๋Š” ์ผ์‹œ์ ์ธ ์žฅ์• ๋‚˜ ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ๋กœ ์ธํ•ด ์š”์ฒญ์ด ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
Istio์˜ ๋ฆฌํŠธ๋ผ์ด(Retry), ํƒ€์ž„์•„์›ƒ(Timeout), ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค(Circuit Breaker) ์„ค์ •์„ ํ™œ์šฉํ•˜๋ฉด,
์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ์„œ๋น„์Šค์˜ ๊ฐ€์šฉ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” ๊ฐ ์„ค์ •์˜ ๊ฐœ๋…, ์‚ฌ์šฉ ๋ฐฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ YAML ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์‹ค์ „ ์ ์šฉ ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น 1. ์„œ๋น„์Šค ๋ณต์›๋ ฅ ์ „๋žต ๊ฐœ์š”

โœ… 1.1 ๋ฆฌํŠธ๋ผ์ด(Retry)

**๋ฆฌํŠธ๋ผ์ด(Retry)**๋Š” ์ผ์‹œ์ ์ธ ๋„คํŠธ์›Œํฌ ์žฅ์• ๋‚˜ ์„œ๋ฒ„ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์š”์ฒญ์ด ์‹คํŒจํ–ˆ์„ ๋•Œ, ์ž๋™์œผ๋กœ ์žฌ์‹œ๋„ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

๋ฆฌํŠธ๋ผ์ด์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์ผ์‹œ์ ์ธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์š”์ฒญ์„ ๋‹ค์‹œ ์‹œ๋„
  • ์žฅ์• ๊ฐ€ ์ผ์‹œ์ ์ธ ๊ฒฝ์šฐ, ์ „์ฒด ์„œ๋น„์Šค ์žฅ์• ๋กœ ์ด์–ด์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€
  • ์ตœ๋Œ€ ์žฌ์‹œ๋„ ํšŸ์ˆ˜ ๋ฐ ๊ฐ„๊ฒฉ์„ ์„ค์ •ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์š”์ฒญ ๋‚จ๋ฐœ ๋ฐฉ์ง€

โœ… 1.2 ํƒ€์ž„์•„์›ƒ(Timeout)

**ํƒ€์ž„์•„์›ƒ(Timeout)**์€ ์š”์ฒญ์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆด ๊ฒฝ์šฐ, ์ž๋™์œผ๋กœ ์ข…๋ฃŒํ•˜์—ฌ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

ํƒ€์ž„์•„์›ƒ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์‘๋‹ต ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๊ธด ์š”์ฒญ์„ ์ž๋™์œผ๋กœ ์ค‘๋‹จํ•˜์—ฌ, ์‹œ์Šคํ…œ ๊ณผ๋ถ€ํ•˜ ๋ฐฉ์ง€
  • ํŠน์ • ์„œ๋น„์Šค ์‘๋‹ต์ด ๋Šฆ์–ด์ง€๋ฉด ๋น ๋ฅด๊ฒŒ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  • ๋‹ค๋ฅธ ์„œ๋น„์Šค๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ๋ณดํ˜ธ

โœ… 1.3 ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค(Circuit Breaker)

**์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค(Circuit Breaker)**๋Š” ์—ฐ์†๋œ ์š”์ฒญ ์‹คํŒจ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, ํ•ด๋‹น ์„œ๋น„์Šค๋ฅผ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์ฐจ๋‹จํ•˜์—ฌ ์ถ”๊ฐ€ ์š”์ฒญ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
์ด๋Š” ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•œ ์„œ๋น„์Šค๋กœ์˜ ํŠธ๋ž˜ํ”ฝ์„ ์ผ์‹œ์ ์œผ๋กœ ์ฐจ๋‹จํ•˜์—ฌ ์ „์ฒด ์‹œ์Šคํ…œ ์žฅ์• ๋ฅผ ์˜ˆ๋ฐฉํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์ผ์ • ํšŸ์ˆ˜ ์ด์ƒ ์š”์ฒญ ์‹คํŒจ ์‹œ, ์„œ๋น„์Šค๋กœ์˜ ์ถ”๊ฐ€ ์š”์ฒญ์„ ์ฐจ๋‹จ
  • ๊ณผ๋ถ€ํ•˜ ์ƒํƒœ์˜ ์„œ๋น„์Šค๋กœ์˜ ์š”์ฒญ์„ ๋ฐฉ์ง€ํ•˜์—ฌ ์žฅ์•  ํ™•์‚ฐ์„ ๋ง‰์Œ
  • ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์š”์ฒญ์„ ํ—ˆ์šฉ

๐Ÿ”น 2. Istio๋ฅผ ํ™œ์šฉํ•œ ๋ฆฌํŠธ๋ผ์ด ์„ค์ •

โœ… 2.1 ๊ธฐ๋ณธ ๋ฆฌํŠธ๋ผ์ด ์„ค์ • (VirtualService ์ ์šฉ)

์•„๋ž˜ VirtualService ์„ค์ •์€ ์š”์ฒญ์ด ์‹คํŒจํ–ˆ์„ ๋•Œ, ์ตœ๋Œ€ 3๋ฒˆ๊นŒ์ง€ ์žฌ์‹œ๋„(Retry)ํ•˜๋Š” ์„ค์ •์ž…๋‹ˆ๋‹ค.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-service
spec:
  hosts:
    - my-service
  http:
    - route:
        - destination:
            host: my-service
            subset: v1
      retries:
        attempts: 3  # ์ตœ๋Œ€ 3๋ฒˆ ์žฌ์‹œ๋„
        perTryTimeout: 2s  # ๊ฐ ์š”์ฒญ๋‹น ์ตœ๋Œ€ 2์ดˆ ๋Œ€๊ธฐ
        retryOn: "gateway-error,connect-failure,refused-stream"  # ํŠน์ • ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ๋ฆฌํŠธ๋ผ์ด ์ˆ˜ํ–‰

์„ค๋ช…:

  • retries.attempts: 3 → ์š”์ฒญ ์‹คํŒจ ์‹œ ์ตœ๋Œ€ 3๋ฒˆ๊นŒ์ง€ ์žฌ์‹œ๋„
  • retries.perTryTimeout: 2s → ๊ฐ ์š”์ฒญ์€ ์ตœ๋Œ€ 2์ดˆ ๋™์•ˆ ๋Œ€๊ธฐ ํ›„ ์žฌ์‹œ๋„
  • retries.retryOn → ํŠน์ • ์˜ค๋ฅ˜(gateway-error, connect-failure, refused-stream) ๋ฐœ์ƒ ์‹œ ์žฌ์‹œ๋„

๐Ÿ”น 3. Istio๋ฅผ ํ™œ์šฉํ•œ ํƒ€์ž„์•„์›ƒ ์„ค์ •

โœ… 3.1 ๊ธฐ๋ณธ ํƒ€์ž„์•„์›ƒ ์„ค์ • (VirtualService ์ ์šฉ)

์•„๋ž˜ VirtualService ์„ค์ •์€ ์š”์ฒญ์ด 5์ดˆ ์ด์ƒ ๊ฑธ๋ฆด ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ํƒ€์ž„์•„์›ƒ ์ฒ˜๋ฆฌํ•˜๋Š” ์„ค์ •์ž…๋‹ˆ๋‹ค.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-service
spec:
  hosts:
    - my-service
  http:
    - route:
        - destination:
            host: my-service
            subset: v1
      timeout: 5s  # ์ตœ๋Œ€ 5์ดˆ ๋™์•ˆ ์‘๋‹ต ๋Œ€๊ธฐ

์„ค๋ช…:

  • timeout: 5s → ์ตœ๋Œ€ 5์ดˆ ๋™์•ˆ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ, ์ดˆ๊ณผ ์‹œ ์ž๋™์œผ๋กœ ์š”์ฒญ ์ข…๋ฃŒ

๐Ÿ”น 4. Istio๋ฅผ ํ™œ์šฉํ•œ ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ์„ค์ •

โœ… 4.1 ๊ธฐ๋ณธ ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ์„ค์ • (DestinationRule ์ ์šฉ)

์•„๋ž˜ DestinationRule ์„ค์ •์€ ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ ๊ณผ๋ถ€ํ•˜ ๋ฐฉ์ง€ํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: my-service
spec:
  host: my-service
  trafficPolicy:
    connectionPool:
      http:
        http1MaxPendingRequests: 5  # ์ตœ๋Œ€ 5๊ฐœ์˜ ์š”์ฒญ ๋Œ€๊ธฐ ๊ฐ€๋Šฅ
        maxRequestsPerConnection: 1  # ์—ฐ๊ฒฐ๋‹น ์ตœ๋Œ€ 1๊ฐœ ์š”์ฒญ ์ฒ˜๋ฆฌ
    outlierDetection:
      consecutive5xxErrors: 3  # 5xx ์˜ค๋ฅ˜๊ฐ€ 3๋ฒˆ ์—ฐ์† ๋ฐœ์ƒํ•˜๋ฉด ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ํ™œ์„ฑํ™”
      interval: 10s  # ์˜ค๋ฅ˜ ๊ฐ์ง€ ์ฃผ๊ธฐ (10์ดˆ)
      baseEjectionTime: 30s  # ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด 30์ดˆ ๋™์•ˆ ํ•ด๋‹น ์„œ๋น„์Šค๋กœ์˜ ์š”์ฒญ ์ฐจ๋‹จ

์„ค๋ช…:

  • connectionPool.http.http1MaxPendingRequests: 5 → ์ตœ๋Œ€ 5๊ฐœ์˜ ์š”์ฒญ์„ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ์œ ์ง€
  • connectionPool.http.maxRequestsPerConnection: 1 → ์—ฐ๊ฒฐ๋‹น ์ตœ๋Œ€ 1๊ฐœ ์š”์ฒญ๋งŒ ํ—ˆ์šฉ
  • outlierDetection.consecutive5xxErrors: 3 → 5xx ์˜ค๋ฅ˜๊ฐ€ 3๋ฒˆ ์—ฐ์† ๋ฐœ์ƒํ•˜๋ฉด ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ํ™œ์„ฑํ™”
  • outlierDetection.interval: 10s → 10์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ ์˜ค๋ฅ˜ ๊ฐ์ง€
  • outlierDetection.baseEjectionTime: 30s → ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ์„œ๋น„์Šค๋Š” 30์ดˆ ๋™์•ˆ ์ฐจ๋‹จ๋จ

๐Ÿ”น 5. ์„œ๋น„์Šค ๋ณต์›๋ ฅ ์ตœ์ ํ™” ์‚ฌ๋ก€

1๏ธโƒฃ ๋ฆฌํŠธ๋ผ์ด + ํƒ€์ž„์•„์›ƒ ์กฐํ•ฉ

  • ์‘๋‹ต ์‹œ๊ฐ„์ด ๊ธธ์–ด์งˆ ๊ฒฝ์šฐ ์ผ์ • ์‹œ๊ฐ„ ์•ˆ์— ์‘๋‹ต์ด ์˜ค์ง€ ์•Š์œผ๋ฉด ํƒ€์ž„์•„์›ƒ ์ ์šฉ
  • ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์š”์ฒญ์ด ์‹คํŒจํ•  ๊ฒฝ์šฐ ์žฌ์‹œ๋„(Retry) ์ˆ˜ํ–‰

2๏ธโƒฃ ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ์ ์šฉ ํ›„ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์ตœ์ ํ™”

  • ํŠน์ • ์„œ๋น„์Šค์˜ ์žฅ์•  ๊ฐ์ง€ ์‹œ, ํŠธ๋ž˜ํ”ฝ์„ ์ž๋™์œผ๋กœ ์ฐจ๋‹จํ•˜์—ฌ ์ „์ฒด ์žฅ์• ๋ฅผ ์˜ˆ๋ฐฉ
  • ๊ธฐ๋ณธ์ ์œผ๋กœ Round Robin ๋ฐฉ์‹์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ๊ณ ๋ฅด๊ฒŒ ๋ถ„์‚ฐ

๐Ÿ“Œ ๊ฒฐ๋ก 

  • ๋ฆฌํŠธ๋ผ์ด(Retry): ์ผ์‹œ์ ์ธ ์žฅ์•  ๋ฐœ์ƒ ์‹œ, ์ตœ๋Œ€ ์ง€์ •๋œ ํšŸ์ˆ˜๋งŒํผ ์žฌ์‹œ๋„ ๊ฐ€๋Šฅ
  • ํƒ€์ž„์•„์›ƒ(Timeout): ์‘๋‹ต ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๊ธด ์š”์ฒญ์„ ์ž๋™์œผ๋กœ ์ค‘๋‹จํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„ ๋ฐฉ์ง€
  • ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค(Circuit Breaker): ์—ฐ์†๋œ ์žฅ์•  ๋ฐœ์ƒ ์‹œ, ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ํ•ด๋‹น ์„œ๋น„์Šค๋กœ์˜ ์š”์ฒญ์„ ์ฐจ๋‹จํ•˜์—ฌ ์ „์ฒด ์‹œ์Šคํ…œ ๋ณดํ˜ธ
  • ์„ธ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์กฐํ•ฉํ•˜๋ฉด, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ ๋ณด๋‹ค ์•ˆ์ •์ ์ธ ์„œ๋น„์Šค ์šด์˜์ด ๊ฐ€๋Šฅ

 

728x90