Loading Engineering Log...

[Network] k3s 기반 고가용성(HA) 3-Tier 아키텍처

백엔드 애플리케이션을 안정적으로 운영하기 위해서는 단순히 코드를 잘 짜는 것을 넘어, 트래픽을 견디고 장애에 유연하게 대처할 수 있는 인프라 아키텍처가 필수적입니다. 특히 Spring Boot 기반의 서비스와 k3s(경량 쿠버네티스)를 활용하여 운영 환경을 구축할 때, 보안과 고가용성(HA)을 어떻게 확보했는지 그 설계 과정을 공유하고자 합니다.

🏗️ 전체 인프라 아키텍처 조감도

아래는 퍼블릭 클라우드 환경에서 구축한 Multi-AZ 기반의 3-Tier 네트워크 아키텍처입니다. 보안, 배포 자동화, 그리고 실시간 모니터링까지 고려하여 설계했습니다.

 

🛡️ 1. 철저한 망 분리와 심층 방어 (Defense in Depth)

가장 먼저 신경 쓴 부분은 외부의 위협으로부터 내부 비즈니스 로직과 데이터를 완벽하게 격리하는 것입니다. 이를 위해 네트워크를 목적에 따라 3단계로 쪼갰습니다(3-Tier Subnet).

  • Public Subnet: 외부 인터넷과 통신하는 관문입니다. 이곳에는 외부 트래픽을 분산시키는 Load Balancer와 관리자용 점프대인 Bastion Host, 그리고 아웃바운드용 NAT Gateway만 배치합니다.
  • Private WAS Subnet (k3s): 실제 Spring Boot 파드(Pod)들이 동작하는 워커 노드 영역입니다. 이곳은 Public Subnet의 로드밸런서를 통해서만 접근할 수 있습니다.
  • Private DB Subnet: 가장 깊숙한 곳에 위치하며, WAS 서브넷의 특정 포트(ex. 3306, 6379) 요청만 허용하도록 방화벽(Security Group)을 강하게 묶어 데이터베이스와 Redis를 보호합니다.

추가로 클라우드 프론트 단에 WAF(Web Application Firewall)를 배치하여 L7 레벨의 악성 공격(SQL Injection 등)을 미리 차단하도록 구성했습니다.

🔄 2. 단일 장애점(SPOF) 제거: Multi-AZ 이중화

IDC 화재나 특정 리전 장애 시에도 서비스가 멈추지 않도록, 모든 시스템을 두 개의 가용 영역(AZ A, AZ B)에 분산 배치했습니다.

  • 트래픽 분산: 글로벌 로드밸런서가 트래픽을 양쪽 AZ로 뿌려줍니다.
  • DB & Redis 이중화: AZ-A에는 Master(Read/Write)를, AZ-B에는 Replica(Read-Only)를 구성했습니다. Master에 장애가 발생하면 즉시 Replica가 권한을 승계(Failover)하여 데이터 손실과 서비스 중단을 막습니다.

🚀 3. Jenkins & Nginx Ingress를 활용한 무중단 배포

운영 중인 서비스의 버전을 업데이트할 때 다운타임이 발생하면 안 됩니다. 이를 위해 k3s 환경에 맞춰 Blue/Green 배포 파이프라인을 구축했습니다.

  1. 개발자가 코드를 Push하면 Jenkins가 이를 감지하여 새로운 도커 이미지를 빌드합니다.
  2. Jenkins가 쿠버네티스에 새로운 버전(Green)의 파드를 배포합니다.
  3. Spring Boot Actuator를 통해 신규 파드의 헬스 체크(UP)가 확인되면, Ingress Controller의 라우팅 규칙을 일순간에 Blue에서 Green으로 스위칭합니다.
  4. 사용자는 1밀리초의 끊김도 없이 새로운 버전을 이용하게 됩니다.

📊 4. Observability: 모니터링과 로깅의 중앙화

시스템이 복잡해질수록 장애 원인을 빠르게 파악하는 시야(Observability)가 중요해집니다. 이를 위해 별도의 Management Subnet에 모니터링 스택을 구축했습니다.

  • Prometheus: 서버 부하를 줄이기 위해 Pull 방식으로 각 워커 노드와 파드의 메트릭(CPU, JVM 상태 등)을 주기적으로 수집합니다.
  • Loki & Promtail: 분산된 파드들이 뱉어내는 표준 출력 로그를 실시간으로 스트리밍하여 중앙에 적재합니다.
  • Grafana: 수집된 메트릭과 로그를 하나의 대시보드에 시각화하여, 장애 발생 시 그래프 수치와 에러 로그를 한 화면에서 즉시 교차 검증할 수 있게 만들었습니다.

✍️ 마무리

이론적인 3-Tier 구조에 WAF, Multi-AZ 이중화, 자동화된 CI/CD 파이프라인, 그리고 관제 시스템까지 덧붙여 실제 상용(Production) 수준의 아키텍처를 완성해 보았습니다. k3s의 가벼움과 Spring Boot의 견고함이 잘 어우러져, 유지보수 비용은 낮추고 안정성은 극대화할 수 있었습니다.

Related Posts

질문이나 보충 의견이 있다면 댓글로 남겨주세요.

오류 제보, 추가 사례, 실무 경험 공유 모두 환영합니다.

📄 본문 💬 댓글