Istio ServiceEntry 자동생성으로 외부 트래픽 가시화하기 | 당근 SRE 밋업 4회
- 당근은 Istio 서비스 메시를 활용하여 클러스터 내부 트래픽은 상세히 모니터링하지만, 외부 서비스 트래픽은 가시성이 부족했습니다. 🕵️♀️
- AI 서비스의 폭발적 증가로 외부 트래픽이 급증하면서, 이 보이지 않는 영역에 대한 가시성 확보가 SRE 팀의 주요 과제가 되었습니다. 📈
- Istio ServiceEntry는 메시 외부에 있는 서비스를 Istio에 등록하여 트래픽을 제어하고 모니터링할 수 있게 해주는 핵심 리소스입니다. 🔑
- HTTPS 기반의 외부 트래픽은 TLS 암호화로 인해 기본적으로 L7(애플리케이션 계층) 가시화가 불가능하며, SNI 정보를 통해 L4(전송 계층) 가시화만 가능합니다. 🔒
- L7 가시화를 위해서는 클라이언트가 HTTP로 요청하고 Istio 프록시가 TLS 암호화를 대신 수행하는 'TLS 오리지네이션' 방식이 필요하지만, 코드 수정 및 운영 부담으로 현실적인 어려움이 있었습니다. 🚧
- 모든 외부 트래픽에 대한 L7 가시화의 현실적 어려움 때문에, 코드 수정 없이 ServiceEntry를 통한 L4 가시성 확보로 목표를 변경했습니다. 🎯
- 수동으로 ServiceEntry를 관리하는 것은 확장성이 없어, 모든 파드가 외부 도메인 통신 전 질의하는 CoreDNS 로그를 활용하여 ServiceEntry 자동 생성 아이디어를 도출했습니다. 💡
- CoreDNS 로그를 정제하고 매트릭화한 후 쿠버네티스 매트릭과 조인하여 네임스페이스별 외부 호출 도메인 목록을 추출하는 자동화 파이프라인을 구축했습니다. ⚙️
- ServiceEntry 자동 생성은 실시간 업데이트 대신 CronJob 형태로 구현하여 Istio 컨트롤 플레인과 모니터링 시스템의 부하를 최소화하고 안정성을 확보했습니다. ⏱️
- 이 프로젝트를 통해 외부 HTTPS 트래픽에 대한 TCP 레벨 매트릭을 확보하여 서비스별 외부 호출량을 명확히 파악하고, 디버깅 및 알림 시스템 구축에 활용할 수 있게 되었습니다. ✅
- 현재는 HTTPS 트래픽만 가시화 가능하며, SNI 정보가 없는 Redis, MySQL 등 비-HTTPS 프로토콜 트래픽은 여전히 가시화할 수 없는 한계가 있습니다. 🚫
- 궁극적인 목표는 HTTPS뿐만 아니라 데이터베이스 요청을 포함한 모든 외부 트래픽을 가시화하여 운영 전반의 활용 범위를 넓히는 것입니다. 🚀