#DevOps

EKS + ALB 환경에서 Argo Rollouts 503 에러 없는 카나리 배포 적용기

EKS + ALB 환경에서 Argo Rollouts 503 에러 없는 카나리 배포 적용기
01

Summary

배포 승인 버튼 누르기 전 30초의 공포, 'PingPong'으로 완벽하게 끝냈습니다

EKS와 ALB의 구조적 한계를 넘어선 무중단 카나리 배포 실전 가이드

서비스 배포의 안정성은 기술적 성취의 척도이지만, 인프라 환경에 따라 예기치 못한 에러가 발생하곤 합니다. 이 아티클은 EKS 환경에서 ALB와 Argo Rollouts를 연동할 때 발생하는 고질적인 503 에러의 원인을 심층 분석하고, 가중치 기반 스왑 전략인 'PingPong'을 통해 진정한 제로 다운타임을 달성한 생생한 여정을 담고 있습니다.

  • 01ALB Readiness Gate와 서비스 셀렉터 변경 방식의 구조적 충돌 원인 분석
  • 02타겟 재등록 없는 즉각적 트래픽 전환을 위한 PingPong 아키텍처 설계
  • 03Ingress의 'use-annotation' 설정을 통한 ALB 가중치 라우팅 활성화 기법
  • 048가지 운영 시나리오 테스트를 통해 검증된 503 에러 0건의 기록
  • 05Argo Rollouts 하나로 카나리와 Blue/Green 패턴을 모두 수용하는 설정 팁

RECOMMENDATION

EKS 환경에서 ALB를 로드밸런서로 활용하며 Argo Rollouts 도입을 검토 중인 엔지니어에게 이 아티클은 가장 확실한 실전 답안지가 될 것입니다.

The Problem

EKS와 ALB 환경에서 Argo Rollouts의 Blue/Green이나 기본 Canary 전략을 사용할 경우, 배포 전환(Promote) 단계에서 약 30초간 503 에러가 발생하는 구조적 문제가 있었습니다. 이는 서비스 셀렉터가 변경될 때 ALB 타겟 그룹이 타겟을 재등록하고 헬스체크를 수행하는 과정에서 발생하는 지연 때문이며, 기존의 Pod Readiness Gate로는 이 문제를 해결할 수 없었습니다.

The Solution

Argo Rollouts v1.2에서 도입된 'Canary PingPong' 전략을 적용하여 서비스 셀렉터를 변경하지 않고 고정된 두 개의 서비스(Ping/Pong) 간에 ALB ForwardConfig의 가중치(Weight)만 스왑하도록 구성했습니다. 또한 Ingress 백엔드 설정을 'use-annotation'으로 변경하여 ALB 컨트롤러가 가중치 기반 라우팅을 정상적으로 수행하도록 조치했습니다.

The Result

실제 시나리오 테스트 결과, 정상적인 배포 및 롤백 상황에서 503 에러가 0건으로 관찰되며 무중단 배포를 성공적으로 구현했습니다. 다만, 카나리 진행 도중에 새로운 버전을 중첩 배포하는 특정 엣지 케이스에서는 약 6초간의 503 에러가 관찰되었으나 이는 배포 파이프라인의 가드 설정을 통해 관리가 가능한 수준으로 판단됩니다.

Trade-off

Ping/Pong 및 Root 서비스를 포함하여 총 3개의 Kubernetes 서비스 리소스를 관리해야 하므로 설정의 복잡성이 증가합니다. 또한 배포 중간에 새로운 배포를 트리거할 경우 일시적인 트래픽 유실이 발생할 수 있으므로 순차적인 배포 프로세스 준수가 강제됩니다.

03

Key Concepts

Concept · 01

Canary PingPong

두 개의 고정된 타겟 그룹을 유지하며 배포 시마다 서비스 셀렉터를 바꾸지 않고 ALB 가중치 값만 스왑하여 트래픽을 전환하는 전략입니다.

  • 서비스 셀렉터 고정을 통해 ALB 타겟의 재등록 및 헬스체크 대기 시간을 원천 차단함
  • 배포 시점에 이미 Healthy 상태인 타겟으로 트래픽을 즉시 전환하여 503 에러를 방지함
Concept · 02

ALB Pod Readiness Gate

AWS 로드밸런서가 Pod의 준비 상태를 직접 확인하여 트래픽 투입 시점을 결정하는 기능입니다.

  • Pod 생성 시점에만 주입되므로 실행 중인 Pod의 서비스 매칭이 변경되면 작동하지 않는 한계가 있음
  • Argo Rollouts의 기존 전략들이 ALB 환경에서 503 에러를 유발하는 기술적 원인임
Concept · 03

ForwardConfig Annotation

ALB Ingress Controller가 가중치 기반 라우팅(Weighted Routing)을 수행할 수 있도록 설정하는 세부 명세입니다.

  • Argo Rollouts 컨트롤러가 배포 단계별로 가중치 비율을 자동으로 업데이트함
  • Ingress 백엔드 포트 설정을 use-annotation으로 지정해야만 실제 ALB 리스너 규칙에 반영됨