[Resilience] DestinationRule Connection Pool, Circuit Breaker 설정

y001·2025년 4월 27일

Istio 실전 스터디

목록 보기
19/26

목표

DestinationRule의 trafficPolicy 기능을 이용해 Connection Pool, Circuit Breaker를 설정하고 실제 적용을 확인한다.

실습 흐름

1. 기존 DestinationRule 수정

destination-rule-helloworld-trafficpolicy.yaml 파일 생성:

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: helloworld
spec:
  host: helloworld
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 1
      http:
        http1MaxPendingRequests: 1
        maxRequestsPerConnection: 1
    outlierDetection:
      consecutive5xxErrors: 1
      interval: 5s
      baseEjectionTime: 30s
      maxEjectionPercent: 100
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2

적용:

kubectl apply -f destination-rule-helloworld-trafficpolicy.yaml

2. 부하 테스트

테스트용 파드 생성 후 부하 주기:

kubectl run -it --rm --restart=Never loadgen --image=curlimages/curl -- /bin/sh

# 파드 안에서 무한 호출
while true; do curl -s helloworld:5000/hello; done

기대 효과:

  • 연결 수 제한(max 1) 때문에 호출이 지연되거나 끊기는 현상이 발생한다.
  • v2가 에러를 반환하도록 수정하면(예: v2 서버 다운), Circuit Breaker에 의해 트래픽이 v1만으로 우회될 수 있다.

결과:

  • DestinationRule의 connectionPool 설정으로 연결 수를 조정할 수 있다.
  • outlierDetection을 통해 비정상 인스턴스를 자동으로 제외(Ejection)할 수 있다.

0개의 댓글