# [작업 D-3] passthrough(TCP) 경로에 outlierDetection만 적용 — connect 실패 기준으로 ejection.
#
#  L4 TCP cluster에도 outlier detection 자체는 붙는다(consecutive connect 실패 기준으로 ejection
#  가능 — outlierDetection은 cluster 레벨 기능이라 protocol과 무관하게 동작한다). HTTP 전용
#  지표(consecutive5xxErrors/consecutiveGatewayErrors)는 이 경로에 의미가 없으므로 생략하고,
#  TCP connect 실패를 "local origin failure"로 간주하는 consecutiveLocalOriginFailures +
#  splitExternalLocalOriginErrors:true 조합을 쓴다(Istio 문서상 TCP 전용 ejection 방식).
#
#  단 이 경로엔 HTTP route/L7 retry가 없으므로(48은 VS 자체가 없다) — ejection이 "죽은 endpoint를
#  LB 후보에서 제외"할 수는 있어도, 클라이언트 자신이 재시도하지 않는 한 이미 실패한 그 요청을
#  살려내지는 못한다. 즉 실패율이 0으로 수렴하지 않을 것이 예상되고, 그 잔여 실패가 D-3의 핵심
#  데이터다(§작업 D-3 — HTTP 경로의 outlier는 Envoy 자체 connect-failure 재시도와 결합해 사실상
#  0에 수렴했지만<2026-07-02 mode2-churn>, 이 경로는 그 재시도 자체가 구조적으로 없다).
#
#  DR host는 SE(48)의 host와 동일(gslb-pt.lab.internal). D-3 종료 후 반드시 삭제해 랩을 clean
#  상태로 되돌린다(§종료 상태) — 다른 실험이 이 DR을 상속하지 않도록.
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: gslb-pt-outlier
  namespace: dns-lab
spec:
  exportTo: ["."]
  host: gslb-pt.lab.internal
  trafficPolicy:
    connectionPool:
      tcp:
        connectTimeout: 1s   # 죽은 pod IP connect 실패를 빨리 판정(44/46과 동일 근거)
    outlierDetection:
      splitExternalLocalOriginErrors: true
      consecutiveLocalOriginFailures: 3
      interval: 5s
      baseEjectionTime: 30s
      maxEjectionPercent: 50
      minHealthPercent: 0
