[Cloud] 트래블월렛의 EKS 전환 여정 (AWS Unicorn Day 2024)
AWS Cloud
Intro
- 트래블월렛은 여행할 때 진짜 애용하는 서비스입니다.
- 원하는 외화를 원하는 만큼만 즉시 충전해 해외 어디서든 카드로 사용할 수 있는 서비스입니다.
- 수수료도 없을 뿐더러 현지 ATM에서 통화 출금도 가능하고, 전세계 주요 도시에서 사용할 수 있는 교통카드 기능도 수행해요.
- 저도 애용하고, 정말 양질의 서비스라고 생각하는 애플리케이션의 인프라는 어떻게 구성되어 있을지 궁금하군요!!
- 스타트업을 위한 AWS 비즈니스와 기술 지원 프로그램을 소개하고, 이를 기반으로 비즈니스를 전개하는 스타트업의 성장 사례를 공유하는 행사인 AWS Unicorn Day 2024에서 트래블월렛이 해당 사례를 공유해주셨습니다!!
트래블월렛 인프라의 변화
트래블월렛 1.0
- 온프레미스 기반 인프라 (금융보안데이터센터 - FSDC)
- 초기 구축시 보안 및 금융 규제 준수를 위한 선택
- 확장성 측면에서 제약
- 운영, 비용 측면의 유연성 부족
트래블월렛 2.0
- AWS EKS 기반 인프라 운영
- 클라우드 환경에서도 금융 규제 준수 가능
- 확장성 제약이 없음
- 운영, 비용 측면의 유연성
트래블월렛 서비스의 초기 EKS 구축
- Development, Production VPC를 각각 배치
- Worker 노드에는 WAS, Management 노드에는 GitOps 도구와 모니터링 툴 배포
- Worker 노드가 상대적으로 높은 스펙의 인스턴스
- 보안 목적으로 서비스를 Namespace로 격리
- Namespace 마다 NLB, ALB 붙임
- NLB: IP를 고정하기 위한 목적
- ALB: Ingress 목적
- FSDC나 외부에서 트래픽을 받아야 하기 때문
멀티 EKS 클러스터 확장
인프라 확장 이유
1. B2B 사업 확장 (광고 플랫폼) 및 PCI-DSS 구분
- 사업 확장과 비슷한 시기, VCC 기반 PCI-DSS (카드 업계에서 민감 정보의 보호를 위한 표준) 3.2.2 획득
- 거래 정보
- 개인 정보
- 해당 표준으로 인해 트래블월렛 서비스는 PCI-DSS Zone을 명확히 구분해 설계해야 했음
- 위와 같은 기존 인프라에는 트래블월렛 서비스만을 위한 EKS였기 때문에 광고 플랫폼을 위한 추가 Zone 필요
- 광고 플랫폼용 VPC를 구축하고, VPC 태그를 이용해 구분
- EKS 구조는 두 개의 노드 그룹 등 동일하게 관리
2. 외부 카드사와 제휴
- FEP 서비스를 기존 운영 중이던 EKS 어딘가에서 운영하기 애매한 상황
- 외부 서비스와 통신 가능한 서비스를 기존 인프라에서 운영하면 보안 취약 가능성 발생
- 외부 통신용 VPC, EKS 별도 구축
확장된 최종 멀티 EKS 클러스터 구조
- 기존 트래블월렛 서비스는 PCI, 대외계 혹은 B2B 서비스는 No PCI Zone으로 분류
멀티 EKS 클러스터 운영 이슈
1. Management 도구의 증가
🚨 이슈
- 비즈니스 확장에 따라 향후 별도의 EKS를 구축할 가능성이 생김
- 이를 관리하는 도구도 증가하면 DevOps 엔지니어의 관리가 어려워짐
✅ 해결
- Management EKS를 별도로 구축해 같은 Zone에 있는 EKS 클러스터들을 관리하도록 함
2. ELB 운영 이슈
🚨 이슈
- Load Balancer 자원 운영 비용 증가
- ELB 증가에 따른 Security Group의 보안 정책이 너무 많아지고 버저닝이 안 됨
- Canary 배포에서 트래픽 제어의 어려움
- 참고: Canary 배포는 Ver 2.0에 대해 일부 트래픽만 적용하고, 문제가 없을 경우 전체 트래픽을 전환
- 기본적으로 서비스마다 Pod 4개를 운영하고 있는데, 모든 업데이트마다 정확한 Canary 비율을 맞춰주기가 어려움
✅ 해결: ISTIO 도입
- 처음에는 러닝 커브 문제도 있었고, 도입 필요가 없어 도입하지 않음
- ISTIO의 Ingress Gateway로 트래픽을 받아 ALB를 통합 (기존에는 Namespace 별로 달려 있었음)
- Security Group 대신 ISTIO의 Authorization Policy를 이용해 GitOps로 버전 관리
- Ingress Gateway Pod를 통해 모든 트래픽을 제어할 수 있다보니, Pod의 수를 늘리지 않고도 Canary Pod에 대해 원하는 비율로 트래픽을 전달할 수 있음
3. EKS 버전 이슈
🚨 이슈
- 평균 4개월에 한 번씩 새로운 Kubernetes 마이너 버전이 릴리즈됨
- EKS는 최초 릴리즈 이후 총 26개월까지 지원 (26개월이 지나면 강제 업그레이드)
- 정식 지원 ~12개월, 확장 지원 ~26개월
- 강제 업그레이드 전에 무중단 버전 업그레이드 필요
- 트래블월렛은 정식 지원 기간(12개월)마다 한 번씩 EKS를 최신 버전으로 업그레이드 하는 것으로 운영 정책 수립
✅ 해결
- EKS 이중화를 통해 무중단 업그레이드 구현
- 같은 VPC 내에 신규 버전 EKS를 구축 (기존 환경과 동일하게)
- Argo CD를 통해 GitOps화 해두었기 때문에 큰 어려움 없이 구축 가능
- ALB Target Group 설정을 통해 EKS 트래픽 조절
- 점진적으로 구버전 EKS의 트래픽 제거
- 트래픽 제거가 확인된 이후 신규 버전으로 업그레이드
- 업그레이드 후 트래픽을 50:50으로 변경해 리소스(EC2, Pod 등)를 균등하게 배분
- 이렇게 두 개의 EKS를 운영해도 되고, 하나로 통합해도 됨
- 트래블월렛이 두 개의 EKS로 운영하기로 한 이유
- Prod 환경에서 작업시 안전하게 하기 위해