# [Mode2 복구용] DestinationRule = TLS origination + outlierDetection. # # DNS refresh는 liveness를 모른다(런북 §4). 죽은 IP 회피는 outlier detection이 담당. # STRICT_DNS에 죽은 IP가 섞였을 때, 연속 실패한 endpoint를 일시 eject 해 트래픽 유실을 # 줄이는 것을 43(무설정) 대비로 보여준다. # # passthrough(L4)가 아니라 origination(L7)이므로, consecutive5xx/connect 실패 모두 # 판정에 쓸 수 있다. connectTimeout을 짧게 둬 죽은 IP를 빨리 실패 처리한다. # # ⚠ 작업 B(2026-07-02 churn 실험, 문서 §8-2)에서 발견한 버그 — 그대로 기록하고 고침: 원래 이 파일은 # connectionPool/outlierDetection을 trafficPolicy **top-level**에 두고 portLevelSettings[443]엔 # tls만 있었다. config_dump로 실측하니 **portLevelSettings에 자기 port 항목이 존재하면 그 포트는 # top-level의 다른 필드(connectionPool, outlierDetection 등)를 전혀 상속하지 않는다** — # outbound|443||gslb.lab.internal 클러스터에 outlier_detection 필드 자체가 없었다(전무했음: # `outlier_detection present: False`). 즉 이 DR은 처음부터 **443 트래픽에 outlier detection이 # 적용된 적이 없었다**(mode2 리포트가 이 단계까지 도달하지 못해 미발견). portLevelSettings[443] # "안"에 connectionPool/outlierDetection을 같이 넣어야 실제로 반영된다 — 아래로 교정. apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: gslb-tls-origination # 43과 같은 이름 — 교체(apply)로 스왑 namespace: dns-lab spec: exportTo: ["."] host: gslb.lab.internal trafficPolicy: portLevelSettings: - port: { number: 443 } connectionPool: tcp: { connectTimeout: 1s } # 죽은 IP connect 실패를 빨리 판정 outlierDetection: consecutive5xxErrors: 3 # origination(L7)이라 5xx/connect 실패 모두 집계 consecutiveGatewayErrors: 3 interval: 5s baseEjectionTime: 30s maxEjectionPercent: 50 # 전멸 방지 minHealthPercent: 0 tls: mode: SIMPLE sni: gslb.lab.internal insecureSkipVerify: true