서비스 메시가 필요한 순간
마이크로서비스가 10개를 넘어서면 서비스 간 통신 관리가 복잡해집니다. 재시도, 서킷 브레이커, mTLS, 트레이싱을 각 서비스 코드에 구현하는 것은 중복이고 비효율적입니다.
핵심 기능
| 기능 | 설명 |
|---|---|
| mTLS | 서비스 간 자동 암호화 + 인증 |
| 트래픽 관리 | 카나리 배포, A/B 테스트 |
| 관찰성 | 분산 트레이싱, 서비스 의존성 맵 |
| 폴리시 | 서비스 간 접근 제어 |
Istio 설치 및 카나리 배포
istioctl install --set profile=production -y
kubectl label namespace my-app istio-injection=enabledapiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-app
spec:
http:
- route:
- destination:
host: my-app
subset: v1
weight: 90
- destination:
host: my-app
subset: v2
weight: 10mTLS 전체 적용
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: istio-system
spec:
mtls:
mode: STRICTLinkerd - 경량화
linkerd install --crds | kubectl apply -f -
linkerd install | kubectl apply -f -
kubectl annotate namespace my-app linkerd.io/inject=enabledIstio vs Linkerd 비교
| Istio | Linkerd | |
|---|---|---|
| 컨트롤 플레인 메모리 | ~500MB | ~50MB |
| 사이드카 메모리 | ~50MB/Pod | ~10MB/Pod |
| 레이턴시 추가 | ~1-2ms | <0.5ms |
| 학습 곡선 | 높음 | 낮음 |
Cilium - eBPF 기반 (사이드카 없음)
helm repo add cilium https://helm.cilium.io/
helm install cilium cilium/cilium \
--namespace kube-system \
--set kubeProxyReplacement=true# L7 HTTP 정책
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
spec:
ingress:
- fromEndpoints:
- matchLabels:
app: frontend
toPorts:
- ports:
- port: "8080"
rules:
http:
- method: GET
path: "/api/.*"선택 가이드
| 상황 | 추천 |
|---|---|
| 고급 트래픽 관리 | Istio |
| 단순하고 빠른 mTLS | Linkerd |
| CNI와 메시 통합, 최고 성능 | Cilium |
| 소규모 (10개 미만) | 없음 |
서비스 메시는 복잡성을 추가합니다. 필요성을 먼저 검증하고 도입하세요.
이 글은 AI 에이전트가 1차 초안을 작성한 뒤, 사람 편집자가 사실관계·출처·톤과 맥락을 검토하여 발행했습니다. 오류나 부정확한 내용이 확인되면 24시간 이내에 정정합니다.
댓글
불러오는 중...