Cross-Cluster Object Replication (HA) 아키텍처 가이드
📅 작성일: 2026-03-24 | 수정일: 2026-03-24 | ⏱️ 읽는 시간: 약 12분
📌 기준 환경: EKS 1.32+, ArgoCD 2.13+, Flux v2.4+, Velero 1.15+
1. 개요
프로덕션 환경에서 단일 EKS 클러스터에 의존하면, 클러스터 장애 시 전체 서비스가 중단됩니다. Cross-Cluster Object Replication은 Kubernetes 오브젝트(ConfigMap, Secret, RBAC, CRD, NetworkPolicy 등)를 여러 클러스터에 일관되게 복제하여 고가용성을 확보하는 전략입니다.
현재 상황
EKS는 관리형 Cross-Cluster Object Replication 기능을 제공하지 않습니다. 따라서 오픈소스 도구와 아키텍처 패턴을 조합하여 직접 구현해야 합니다. 이 가이드는 패턴별 장단점을 비교하고, 워크로드 유형에 따른 선택 기준을 제시합니다.
이 가이드의 범위
| 포함 | 미포함 |
|---|---|
| K8s 오브젝트 복제 (ConfigMap, Secret, CRD, RBAC 등) | 애플리케이션 데이터 복제 (DB 레플리카) |
| GitOps 기반 선언적 동기화 | 서비스 메시 기반 트래픽 라우팅 |
| 상태 저장 오브젝트 백업/복원 (Velero) | 스토리지 레이어 복제 (EBS, EFS) |
| DNS 페일오버 전략 | 애플리케이션 레벨 HA 패턴 |
2. 멀티 클러스터 아키텍처 패턴 비교
Cross-Cluster Object Replication을 구현하는 세 가지 핵심 패턴이 있습니다.
Pattern 1: API Proxy (Push 모델)
중앙 라우팅 레이어가 각 클러스터의 API Server로 CRUD 요청을 직접 프록시합니다.
- 동작: 중앙에서 각 클러스터로 직접 API 호출
- 장점: 가볍고 직관적
- 한계: 자격 증명 보안 취약, 멀티 클러스터 Watch 불가, 연결 복잡도 증가
Pattern 2: Multi-cluster Controller (Kubefed 계열)
중앙 컨트롤러가 Informer 기반 List-Watch로 각 클러스터의 상태를 감시하고 CRD를 통해 동기화합니다.
- 동작: 중앙 컨트롤러가 각 클러스터 상태를 감시하고 동기화
- 장점: 동적 클러스터 디스커버리, Federation 정책 적용 가능
- 한계: ~10개 이상 클러스터에서 Watch 이벤트 오버플로, Informer 캐시 크기 제한, 자격 증명 평문 저장 위험
Kubernetes SIG에서 Kubefed(v2)는 사실상 유지보수 모드입니다. 신규 프로젝트에서는 권장하지 않습니다.
Pattern 3: Agent-based Pull 모델 (권장)
각 클러스터의 에이전트가 중앙 소스(Git 또는 허브 클러스터)에서 원하는 상태를 Pull하여 로컬에서 Reconcile합니다. kubelet이 Pod 스펙을 받아 로컬에서 실행하는 것과 동일한 원리입니다.
- 동작: 각 클러스터 에이전트가 독립적으로 원하는 상태를 Pull하여 로컬 Reconcile
- 장점: 높은 확장성, Eventual Consistency, 중앙 장애에도 로컬 동작 유지
- 한계: 모든 클러스터에 에이전트 배포 필요
패턴 비교 종합
| 관점 | API Proxy | Multi-cluster Controller | Agent-based Pull |
|---|---|---|---|
| 동작 방식 | 중앙 → 클러스터 Push | 중앙 Watch + CRD 동기화 | 클러스터 → 중앙 Pull |
| 확장성 | 낮음 (연결 수 비례) | 중간 (~10 클러스터) | 높음 (수백 클러스터) |
| 복잡도 | 낮음 | 높음 | 중간 |
| 보안 | 취약 (다수 자격 증명) | 취약 (평문 저장) | 강함 (에이전트 로컬 권한) |
| 장애 격리 | 낮음 | 중간 | 높음 |
| Drift Detection | 없음 | 부분적 | 내장 |
| 권장 시나리오 | PoC, 소규모 | 레거시 환경 | 프로덕션 (권장) |