사이드카 패턴(Sidecar Pattern)은 주 애플리케이션 컨테이너 옆에 보조 컨테이너를 배치해 공통 기능(로깅, 프록시, 모니터링)을 분리하는 마이크로서비스 아키텍처 패턴이다.
구조
┌─────────────── Pod ───────────────┐
│ ┌──────────────┐ ┌───────────┐ │
│ │ 메인 앱 │ │ 사이드카 │ │
│ │ (비즈니스) │◄─┤ (프록시) │ │
│ │ │ │ │ │
│ └──────────────┘ └───────────┘ │
│ 공유 볼륨, localhost 네트워크 │
└───────────────────────────────────┘
yaml
apiVersion: v1
kind: Pod
spec:
containers:
# 메인 애플리케이션
- name: app
image: my-app:1.0
ports:
- containerPort: 8080
# 사이드카: Envoy 프록시
- name: envoy-proxy
image: envoyproxy/envoy:v1.26
ports:
- containerPort: 9090
volumeMounts:
- name: envoy-config
mountPath: /etc/envoy
# 사이드카: 로그 수집기
- name: log-collector
image: fluent/fluent-bit:2.0
volumeMounts:
- name: app-logs
mountPath: /var/log/app
volumes:
- name: app-logs
emptyDir: {}
주요 사용 사례
1. 서비스 메시 (Istio/Linkerd):
앱 ← → Envoy 사이드카 ← → 메시
TLS 종단, 로드 밸런싱, 서킷 브레이커 자동화
2. 로그 수집:
앱 → 로컬 파일 → Fluentd 사이드카 → ELK
3. 설정 동기화:
앱 ← ConfigMap → Vault Agent 사이드카
4. 모니터링:
앱 ← → Prometheus 익스포터 사이드카
사이드카 vs 다른 패턴
| 패턴 | 위치 | 특징 |
|---|
| 사이드카 | Pod 내부 | 앱과 생명주기 공유 |
| 앰배서더 | Pod 내부 | 외부 통신 전문화 |
| 어댑터 | Pod 내부 | 인터페이스 변환 |
| DaemonSet | 노드 단위 | 전체 노드에 배포 |
관련 개념