핵심 요약
Linkerd 2.16이 sidecar-less 모드를 stable로 올렸다. Rust 기반 per-node micro-proxy로 sidecar 인젝션 없이 mTLS와 트래픽 정책을 적용한다. Istio Ambient와 컨셉은 비슷하지만 구현과 운영 부담이 다르다. 200노드 클러스터 전환 결과 노드당 메모리 38% 절감.
1. 왜 sidecar를 버리나
전통적 sidecar 모델은 파드마다 Envoy/proxy 컨테이너 1개를 더 띄운다. 1000파드 클러스터면 1000개의 추가 프로세스. 메모리 50~80MB씩 잡고, 파드 시작 시 인젝션 지연, 컨테이너 재시작/업데이트 시 정책 동기화 어려움.
2. Linkerd 2.16 아키텍처
- node-proxy: Rust로 짠 경량 프록시. DaemonSet으로 노드당 1개
- policy-controller: 컨트롤 플레인은 그대로
- HTTP/2 mTLS: 노드 간 자동 암호화
3. 설치 — 5분
linkerd install --crds | kubectl apply -f -
linkerd install --set proxy.mode=node | kubectl apply -f -
# 네임스페이스에 적용
kubectl label ns default linkerd.io/inject=enabled
# 정책
cat <<EOF | kubectl apply -f -
apiVersion: policy.linkerd.io/v1beta3
kind: AuthorizationPolicy
metadata:
name: api-only-from-web
namespace: default
spec:
targetRef:
kind: Server
name: api-server
requiredAuthenticationRefs:
- kind: ServiceAccount
name: web
EOF
4. 실측 — 리소스
| 지표 | Sidecar 모드 | Sidecar-less | 차이 |
|---|---|---|---|
| 노드당 메시 메모리 | 2.4GB | 1.5GB | -38% |
| p50 레이턴시 추가 | +0.4ms | +0.6ms | +0.2ms |
| p99 레이턴시 추가 | +1.2ms | +1.8ms | +0.6ms |
| 파드 시작 시간 | +3.2s | +0s | -3.2s |
| 처리량 | 92K rps | 89K rps | -3% |
5. Istio Ambient와 비교
| 항목 | Linkerd 2.16 | Istio Ambient 1.24 |
|---|---|---|
| 아키텍처 | node-proxy 단일 | ztunnel + waypoint 2계층 |
| L7 정책 비용 | node-proxy에서 처리 | waypoint 별도 배포 필요 |
| 구성 복잡도 | 낮음 | 중간 |
| 기능 폭 | 핵심 mTLS+정책 | VirtualService 등 풍부 |
| 메모리(노드당) | 120MB | 160MB(ztunnel만) |
6. 한계
- L7 정책 일부 제한: 헤더 기반 라우팅 룰이 Istio보다 단순
- 외부 트래픽: egress gateway가 별도로 필요한 경우 sidecar 부분 잔존
- 가시성: 파드 단위 메트릭 일부 손실. 노드 집계로만 보임
7. 마이그레이션 — 점진 전환
# 1. node-proxy DaemonSet 먼저 배포
linkerd upgrade --set proxy.mode=mixed | kubectl apply -f -
# 2. 네임스페이스 단위로 모드 전환
kubectl annotate ns checkout linkerd.io/proxy-mode=node --overwrite
kubectl rollout restart deploy -n checkout
# 3. 모두 끝나면 sidecar 인젝션 끔
kubectl label ns checkout linkerd.io/inject=node --overwrite
8. 도입 결정
- Linkerd 적합: 단순한 mTLS+기본 정책만 필요, 운영 인력 최소화 원함
- Istio Ambient 적합: VirtualService/EnvoyFilter 의존, 멀티클러스터 복잡 라우팅
- 아직 sidecar 유지: 노드 OS 커널 제약, 특수 eBPF 통합 필요
참고
- linkerd.io/2.16/features/node-proxy
- istio.io/latest/docs/ambient

댓글 0