데브옵스
Istio 3-1편: 503과 Half-open Connection
두줄요약
Istio Ambient mode에서 Pod IP 재사용과 stale connection 재사용이 겹쳐 간헐적 503이 발생했습니다. 로그와 pcap, socket을 교차 검증하고 reset retry로 증상을 완화했습니다.
문제 상황
- Istio Ambient mode에서 워크로드 재시작·배포 시 간헐적 503 응답 발생
- public gateway와 waypoint 로그를 추적한 결과, 실제 503 생성 지점은 waypoint의 upstream reset
- ztunnel과 istio-cni에는 이상 로그가 없어 connection 끊김 지점을 추가 검증 필요
원인 분석
- destination Pod 삭제 후 IP가 재사용되며 Envoy가 기존 HTTP/2 HBONE connection을 stale 상태로 재사용
- ztunnel이 종료 시 connection을 graceful하게 닫지 않아 waypoint가 죽은 connection을 인지하지 못함
- waypoint는 IP:Port 기준 connection pool을 사용해 같은 목적지로 오인
해결 방법
- waypoint debug 로그, destination Pod tcpdump, socket 상태로 stale connection 재사용을 교차 검증
- 근본적으로는 connection key를 IP:Port에서 Pod 식별자까지 확장하거나 종료 시 connection 정리 필요
- 즉시 대응으로 reset에 대한 retry를 추가해 503 전파를 완화
주의할 점
- retry는 근본 해결이 아니라 증상 완화
- reset retry는 OOM, 크래시 등 다른 원인에도 동작할 수 있어 멱등성 확인 필요
