EKS 멀티클러스터 East-West 통신 — Istio는 여전히 유효한가
1. 문서 목적과 결론 (Executive Summary)
이 문서는 EKS 멀티클러스터를 운영하는 관점에서, East-West(서비스 간) 트래픽의 효과적인 운영을 위해 Istio가 여전히 유효한 선택인지 검증합니다. 주요 대안 — Amazon VPC Lattice + AWS Gateway API Controller, Cilium ClusterMesh, Istio multi-primary(+상용 관리 플레인) — 를 사용한 아키텍처의 특장점을 기능 / 안정성 / 운영편의성 / 비용 4개 축으로 비교하고, 각 아키텍처가 적합한 환경을 제시합니다. 본문에 인용한 모든 외부 근거는 2026-07-16 기준 원문 문서로 확인했으며, 확인하지 못한 항목은 "확인 필요"로 명시합니다.
결론 요약:
- 클러스터 간 통신이 HTTP/gRPC 중심이라면 VPC Lattice + AWS Gateway API Controller가 운영 부담 대비 가장 유리합니다. 클러스터·VPC ·계정 경계를 L3 연결(VPC peering, Transit Gateway) 없이 넘고, 컨트롤 플레인과 데이터 플레인을 AWS가 관리합니다.
- Istio multi-primary는 여전히 유효하지만 조건부입니다. 멀티클라우드·하이브리드를 포함한 full mesh, 전 구간 SPIFFE 기반 mTLS, 세밀한 L7 정책이 1순위 요구라면 Istio가 유일하게 모든 요건을 충족합니다. 대신 클러스터 수에 비례해 커지는 운영 복잡도를 감수해야 합니다.
- 메시 운영 부담을 낮추는 레버는 두 가지뿐입니다 — (a) 운영 주체를 바꾸거나(관리형·상용 지원), (b) 아키텍처를 단순화하거나(사이드카 제거, 메시 자체 제거). 상용 관리 플레인(예: Tetrate)은 (a)에 해당하지만 컨트롤 플레인(istiod)은 여전히 고객 클러스터 안에 남습니다. 컨트롤 플레인 자체를 고객 클러스터에서 제거하는 선택지는 AWS 관리형(VPC Lattice)뿐입니다.
- AWS App Mesh는 2026년 9월 30일 지원 종료로 신규 도입 대상이 아니며, 이 문서에서는 마이그레이션 출발점으로만 다룹니다.
단일 클러스터 안에서의 메시 솔루션 선택은 서비스 메시 비교 가이드를, 도입 후 지연·비용 최적화는 East-West 트래픽 최적화를 참조합니다.
2. 요건 정의와 가정
스코프
이 문서는 클러스터 경계를 넘는 East-West(서비스 간) 통신만 다룹니다. North-South(외부→클러스터 인그레스) 트래픽을 담당하는 API Gateway·인그레스 컨트롤러(예: ALB + AWS Load Balancer Controller, Kong, NGINX 계열, kgateway)는 East-West 통신의 대체재가 아니라 보완재입니다. 인그레스를 통해 클러스터 간 호출을 우회시키는 설계는 외부 노출 면적 증가, 홉 추가, 내부 신원 소실이라는 비용을 수반하므로 이 문서의 후보에서 제외합니다. North-South 선택은 Gateway API 도입 가이드를 참조합니다.
아키텍처 선택을 좌우하는 5가지 질문
멀티클러스터 East-West 아키텍처는 아래 5가지 요건에 대한 답으로 대부분 결정됩니다. 상세 질문 목록은 부록 A에 정리했습니다.
| # | 판별 질문 | 갈림길 |
|---|---|---|
| 1 | 프로토콜 — 클러스터 간 트래픽이 HTTP/gRPC인가, 순수 TCP/UDP(DB 프로토콜, 메시지 브로커, 커스텀 바이너리)인가? | 순수 TCP/UDP 비중이 크면 L7 중심 인 Lattice는 재검토 대상. Lattice는 HTTP/HTTPS·gRPC·TCP(TLS passthrough)를 지원하지만 TCP 경로에 제약이 있음(6장 참조). UDP는 미지원 |
| 2 | 경계 — 클러스터들이 단일 VPC인가, 멀티 VPC·멀티 계정인가? CIDR 중복이 있는가? | 멀티 계정·CIDR 중복 환경이면 L3 연결이 필요 없는 Lattice가 구조적으로 유리. 메시 계열은 L3 도달성(peering/TGW)과 비중복 CIDR이 전제 |
| 3 | 신원·암호화 컴플라이언스 — "전 구간 워크로드 단위 mTLS(SPIFFE)"가 감사 요건인가, "전송 암호화 + 요청 단위 인가"로 충족되는가? | 전자라면 Istio가 정공법. Lattice는 TLS + IAM(SigV4) 모델, Cilium은 전송 암호화(WireGuard/IPsec)와 인증을 분리한 모델 |
| 4 | 관측성 — Kiali 수준의 메시 토폴로지 시각화가 필수인가, 메트릭·로그·트레이스로 충분한가? | 전자라면 Istio 생태계 유지. Lattice는 CloudWatch/X-Ray, Cilium은 Hubble로 대체 |
| 5 | 규모와 변화율 — 클러스터 수, 서비스 수, Pod churn(배포 빈도·오토스케일 진폭)이 어느 수준인가? | 클러스터 수가 늘수록 메시 계열은 컨트롤 플레인 간 동기화 부담이 비례 증가. 관리형은 quota 관리 문제로 치환됨 |
기본 가정
- 대상은 EKS(EC2 노드 기반)이며, 이미 Istio(사이드카 모드) 멀티클러스터를 운영 중이거나 도입을 검토하는 조직입니다.
- "운영 부담 축소"와 "통신 요건 유지"가 동시 목표이며, 서비스 메시 유지 자체는 목표가 아닙니다.
- 리전은 단일 리전을 기본으로 하되, 크로스 리전 고려사항은 해당 절에서 별도 표기합니다.
3. Istio 기능 → 대안 매핑
현재 Istio 멀티클러스터에서 사용 중인 기능이 각 대안에서 무엇으로 치환되는지 정리합니다.
| Istio 기능 | VPC Lattice + Gateway API Controller | Cilium ClusterMesh | Istio multi-primary (유지) | 참고: Linkerd / Consul |
|---|---|---|---|---|
| 클러스터 간 서비스 디스커버리 (remote secrets 기반 엔드포인트 동기화) | ServiceExport/ServiceImport CRD + Lattice 서비스 네트워크. DNS는 Lattice가 관리형으로 제공 | 동일 이름 Service에 service.cilium.io/global: "true" 어노테이션 → 클러스터 간 로드밸런싱 | istiod가 remote secret으로 상대 클러스터 API 서버를 watch | Linkerd: service mirroring(원격 서비스 복제). Consul: cluster peering + exported-services |
| mTLS / 워크로드 신원 (SPIFFE X.509, 공통 root CA) | TLS(ACM 인증서) + IAM 인증(SigV4 서명) + EKS Pod Identity 세션 태그 기반 ABAC(클러스터·네임스페이스·Pod 단위) | 전송 암호화는 WireGuard/IPsec. SPIFFE 상호 인증은 Beta이며 ClusterMesh와 호환되지 않음(2026-07-16 기준 upstream 문서 명시) | 공 통 root CA(cacerts) 기반 전 구간 SPIFFE mTLS | Linkerd: 통합 trust domain mTLS. Consul: mesh gateway 간 mTLS |
| 트래픽 관리 (카나리, 가중치 라우팅, 재시도) | HTTPRoute 가중치 규칙(Lattice 리스너 규칙으로 구현). 재시도·타임아웃 지원, 서킷 브레이커는 제한적 | L7 기능은 노드당 Envoy 경유(CiliumEnvoyConfig). 클러스터 간 가중치 라우팅 표현력은 Istio 대비 제한적 | VirtualService/DestinationRule 또는 Gateway API — 표현력 최고 | Linkerd: HTTPRoute 기반. Consul: service resolver/splitter |
| 커스텀 도메인 | Lattice 커스텀 도메인 + ACM 인증서(BYOC) | Kubernetes DNS 체계(<svc>.<ns>.svc.cluster.local) 그대로, 커스텀 도메인은 별도 구성 | ServiceEntry + 자체 DNS | 각자 별도 구성 |
| 관측성 (Kiali, 분산 트레이싱) | CloudWatch 메트릭·액세스 로그, X-Ray. 메시 토폴로지 그래프(Kiali급)는 없음 | Hubble(Service Map, flow 로그) | Kiali·Jaeger·Prometheus 생태계 그대로 | Linkerd Viz / Consul UI |
| 컨트롤 플레인 운영 주체 | AWS (클러스터에는 경량 컨트롤러만 상주) | 고객 (cilium-agent, cilium-operator, clustermesh-apiserver) | 고객 (클러스터별 istiod). Tetrate 등 상용은 운영 "지원" 주체가 바뀔 뿐 istiod는 클러스터 내 잔존 | 고객 (또는 Buoyant/HashiCorp 상용 지원) |
| L3 연결 전제 (peering/TGW) | 불필요 — CIDR 중복도 허용 | 필요 — 노드 간 직접 IP 도달성 + 비중복 PodCIDR | 멀티 네트워크 모드는 east-west gateway(NLB) 경유로 L3 직결 불필요, 단일 네트워크 모드는 필요 | Linkerd flat 모드는 필요, gateway 모드는 불필요. Consul은 mesh gateway 경유 |
매핑에서 드러나는 핵심 차이는 두 가지입니다. 첫째, 신원 모델이 다릅니다 — Istio의 "인증서 기반 워크로드 신원"을 Lattice는 "IAM 기반 요청 인가"로, Cilium은 "네트워크 계층 암호화 + 별도 인증"으로 치환합니다. 컴플라이언스 문구가 어느 모델을 요구하는지가 선택을 좌우합니다. 둘째, 컨트롤 플레인 위치가 다릅니다 — 운영 부담의 총량은 컨트롤 플레인이 누구의 것인지에 수렴합니다.
4. 후보 아키텍처 상세 비교
각 후보를 동작 방식 → 4축 평가(기능/안정성/운영편의성/비용) → 적합한 환경 순으로 정리합니다.
4.1 VPC Lattice + AWS Gateway API Controller — 관리형 · 사이드카리스
동작 방식. VPC Lattice는 AWS 네트워크 패브릭에 내장된 관리형 애플리케이션 네트워킹 서비스입니다. EKS에서는 AWS Gateway API Controller(2026-07-16 기준 v2.1.2)가 Kubernetes Gateway API 리소스를 Lattice 리소스로 변환합니다 — Gateway → 서비스 네트워크, HTTPRoute/GRPCRoute/TLSRoute → Lattice 서비스, Kubernetes Service → 타깃 그룹. 클러스터 간 공유는 ServiceExport(제공 측)/ServiceImport(소비 측) CRD로 선언합니다.
Cluster A (VPC-A, 계정 1) Cluster B (VPC-B, 계정 2)
┌──────────────────────────┐ ┌──────────────────────────┐
│ Pod A ──► link-local │ │ Target Group ◄──┐ │
│ 169.254.171.x │ │ (Pod B들) │ │
└────────────┼─────────────┘ └──────────────────────┼───┘
│ │
▼ │
═══════════ VPC Lattice 서비스 네트워크 (AWS 관리형 데이터 플레인) ══╪════
· L3 연결(peering/TGW) 불필요, CIDR 중복 허용 │
· IAM auth policy 평가(SigV4) + TLS ──────────────────────────┘
· Gateway API Controller가 K8s 리소스 ↔ Lattice 리소스 동기화
Pod는 link-local 대역(169.254.171.0/24)의 Lattice 데이터 플레인으로 트래픽을 보내며, 클러스터 보안 그룹에 Lattice 관리형 prefix list 인바운드 허용만 추가하면 됩니다. 두 VPC가 동일한 CIDR을 사용해도 통신이 성립하며, 이는 AWS 공식 블로그의 데모로 검증된 동작입니다(참고 자료 2번, 확인 2026-07-16).
인증·인가는 IAM auth policy로 처리합니다. EKS Pod Identity가 발급하는 세션 태그(eks-cluster-name, kubernetes-namespace, kubernetes-pod-name)를 조건으로 사용하면 클러스터·네임스페이스·Pod 단위 ABAC 인가가 가능합니다. IAM 인증을 켜면 요청은 SigV4 서명이 필요하며, SDK 서명 또는 서명 프록시(예: Envoy 사이드카를 서명 전용으로 주입) 중 하나를 선택합니다.
4축 평가.
| 축 | 평가 | 근거 (확인 2026-07-16) |
|---|---|---|
| 기능 | HTTP/HTTPS·gRPC 라우팅, 가중치 트래픽 분할, 커스텀 도메인, IAM 기반 세밀 인가. TCP는 TLS passthrough로 지원하되 제약 있음(6장). UDP 미지원. Kiali급 메시 관측성 없음 | Lattice FAQ·TLS 리스너 문서 |
| 안정성 | 데이터 플레인이 AWS 인프라 내장 — 고객이 패치·장애 대응할 컴포넌트가 컨트롤러뿐. AZ당 서비스별 10 Gbps·10,000 RPS 기본 한도(상향 가능), 연결 수명 10분 상한 | Lattice quotas 문서 |
| 운영편의성 | 4개 후보 중 유일하게 컨트롤 플레인이 클러스터 밖. 사이드카 없음, 인증서 수명주기 관리 없음(ACM 위임), 업그레이드 대상은 경량 컨트롤러 1개. 대신 AWS quota·기능 릴리스 속도에 종속 | Gateway API Controller 배포 가이드 |
| 비용 | 종량제: 서비스당 $0.025/시간 + 처리량 $0.025/GB + 요청 요금(시간당 30만 건 초과분 $0.10/100만 건, us-east-1 기준). 크로스 AZ 추가 요금 없음. 트래픽이 클수록 비용이 비례 증가 — 대용량 환경은 사전 시뮬레이션 필수. 리전별 단가 상이(확인 필요) | Lattice 요금 페이지 |
적합한 환경. 클러스터 간 트래픽이 HTTP/gRPC 중심이고, 멀티 VPC·멀티 계정 경계를 넘어야 하며, 메시 컨트롤 플레인 운영 인력을 확보하기 어려운 조직. App Mesh 이탈 조직 중 관리형 모델을 유지하려는 경우의 AWS 공식 경로이기도 합니다.
4.2 Cilium ClusterMesh — eBPF · 사이드카리스 · 자체 운영
동작 방식. Cilium(2026-07-16 기준 안정 버전 1.19)의 ClusterMesh는 CNI 계층에서 멀티클러스터를 해결합니다. 클러스터마다 clustermesh-apiserver(내장 etcd 포함)가 상태를 노출하고, 각 클러스터의 cilium-agent가 이를 구독해(v1.16부터 KVStoreMesh 캐시 경유가 기본) 원격 엔드포인트를 로컬 eBPF 맵에 반영합니다. 동일한 이름의 Service에 service.cilium.io/global: "true"를 붙이면 클러스터 간 로드밸런싱이 활성화됩니다.
Cluster A (PodCIDR 10.1.0.0/16) Cluster B (PodCIDR 10.2.0.0/16)
┌──────────────────────────────┐ ┌──────────────────────────────┐
│ Pod A ─► eBPF (커널) │ │ eBPF ─► Pod B │
│ ▲ clustermesh-apiserver ◄─┼── 상태 ────┼─► clustermesh-apiserver ▲ │
│ └── cilium-agent (구독/캐시) │ 동기화 │ cilium-agent ──────────┘ │
└───────────────┼──────────────┘ └────────────────┼─────────────┘
└────────── Pod-to-Pod 직통 (VPC peering/TGW) ┘
전제: 비중복 PodCIDR + 노드 간 직접 IP 도달성 + 동일 datapath 모드
프록시 홉 없이 Pod-to-Pod 직통이므로 데이터 플레인 오버헤드와 지연이 후보 중 가장 낮습니다. 다만 전제 조건이 엄격합니다 — 전 클러스터 비중복 PodCIDR, 노드 간 직접 IP 도달성(VPC peering 또는 TGW), 전 클러스터 동일 datapath 모드, 클러스터 ID(1–255)·이름 사전 설계(사후 변경 시 전체 워크로드 재시작 필요). 모두 upstream 공식 문서 기준입니다(확인 2026-07-16).
4축 평가.
| 축 | 평가 | 근거 (확인 2026-07-16) |
|---|---|---|
| 기능 | L3/L4 완전 지원(TCP/UDP 포함 — 프로토콜 제약 없음), global service 기반 디스커버리·failover. L7은 노드당 Envoy 경유로 지원하나 클러스터 간 L7 표현력은 Istio 대비 제한적. SPIFFE 상호 인증은 Beta이며 ClusterMesh와 호환 불가 — 전 구간 워크로드 신원 요건에는 부적합 | Cilium ClusterMesh·mutual auth 문서 |
| 안정성 | 데이터 플레인은 커널 eBPF로 성숙. 단 CNI 자체가 메시를 겸하므로 Cilium 장애 = 클러스터 네트워킹 장애로 반경이 가장 큼. cacheTTL 기본값 0(원격 클러스터 단절 시 stale 엔드포인트 무기한 유지)은 운영 시 조정 필요 | Cilium global services 문서 |
| 운영편의성 | 클러스터마다 cilium-agent·operator·clustermesh-apiserver를 고객이 운영. EKS에서 Cilium CNI는 AWS 공식 지원 대상이 아님 — AWS 문서는 "EC2 노드에서 지원되는 CNI는 VPC CNI뿐"이며 대체 CNI는 벤더(Isovalent) 상용 지원 확보를 권고. EKS Auto Mode는 대체 CNI 미지원. VPC CNI chaining 모드는 L7 정책·IPsec 미지원이라 full 교체가 사실상 전제 | EKS alternate CNI 문서, Cilium chaining 문서 |
| 비용 | 라이선스 비용 없음(OSS), AWS 추가 서비스 요금 없음. 대신 L3 연결 비용(peering 또는 TGW $0.05/시간/연결 + $0.02/GB)과 CNI 교체·운영을 감당할 전담 인력 비용이 실질 원가. 상용 지원(Isovalent) 계약 시 라이선스 비용 발생 | TGW 요금 페이지 |
적합한 환경. 이미 Cilium CNI를 표준으로 운영 중이고(또는 전환을 확정했고), 클러스터 간 트래픽에 순수 TCP/UDP 비중이 크며, 최저 지연이 요구되고, CNI 수준 장애를 감당할 네트워킹 전담 역량이 있는 조직. Cilium을 쓰지 않는 조직이 멀티클러스터 통신만을 위해 CNI를 교체하는 것은 권장하지 않습니다.