Istio 3-1편: 503과 Half-open Connection
데브옵스
Istio 3-1편: 503과 Half-open Connection
두줄요약
Istio Ambient mode에서 워크로드 재시작 시 간헐적 503이 발생한 원인을 추적했습니다. 오래된 HBONE connection 재사용과 ztunnel의 graceful close 부재가 핵심이었고, reset retry로 증상을 완화했습니다.
문제 상황
- Istio Ambient mode에서 워크로드 롤아웃·재시작 시 간헐적으로 503 응답 발생
- dev 환경에서 더 자주 재현되며, gateway는 503만 전달하고 실제 발생 지점은 waypoint
- ztunnel과 istio-cni에는 뚜렷한 이상 로그가 없어 원인 추적이 어려움
원인 분석
- destination Pod 종료 후에도 waypoint Envoy가 이전 IP:Port 기준 HTTP/2 HBONE connection을 재사용
- 새 Pod가 같은 IP를 재사용하면 handshake 없이 application data가 들어가고, 새 Pod의 TCP stack이 RST로 응답
- ztunnel이 Pod 종료 시 connection을 graceful하게 닫지 않아 stale connection이 남는 구조
해결 방법
- Envoy debug 로그, destination Pod pcap, waypoint socket 상태를 함께 확인해 connection 재사용과 stale 상태를 검증
- 근본적으로는 connection key에 Pod UID 같은 식별자를 포함하거나, 종료 시 connection 정리 신호를 전달하는 방향이 필요
- 즉시 대응으로 reset에 대한 retry를 추가해 503 전파를 완화
