GH GambleHub

서비스 메시: Istio, Linkerd

서비스 메시: Istio, Linkerd

1) 서비스 메시는 무엇이며 언제 필요한가

서비스 메쉬는 코드 재 작성없이 서비스 간 엔드-투-엔드 mTLS, 라우팅, 내결함 및 관찰 성을 제공하는 네트워크 데이터/제어 평면 계층입니다.

목표:
  • 기본 보안 (제로 트러스트, 서비스 아이덴티티, 액세스 정책).
  • 교통 관리 (Canary/Blue-Green, A/B, 그림자).
  • 신뢰성 (레트라, 타임 아웃, 회로 파괴).
  • 관찰 가능성 (메트릭, 로그, 트레일).
  • 운영 표준화 (코드로서의 정책, GitOps).
메쉬를 할 때:
  • 다국어 및 mSL 요구 사항이있는 많은 마이크로 서비스.
  • 응용 프로그램을 변경하지 않고 고급 라우팅/실험 시나리오가 필요합니다.
  • 네트워크 수준에는 감사/정책 요구 사항이 있습니다.

2) Istio vs Linkerd-간단한 비교

측면이스 티오링커 드
프록시특사 (L7)녹색 프록시 (L7 계정 http/grpc) + 미니멀리스트
설치IstioOperator/helm'linkerd install '/helm
안전mSL, 권한 부여 정책, 피어 인증, WASM-(PHP 3 = 3.0.6, PHP 4)
트래픽 관리미덕 서비스, DestinationRule, 게이트웨이, 인보 이필터서비스 프로파일, 트래 피스 플리트 (SMI), 재 시도/타임 아웃
관찰 가능Prometheus, Telemetry API, 특사 액세스 로그, OpenTelemetry'linkerd viz' (탭/엣지/루트), 프로 메테우스, OTEL 통합
멀티 클러스터기본 멀티 클러스터, 동서 게이트웨이'linkerd multicluster' (게이트웨이 + 서비스 미러)
배포 모델사이드카) Ambient Mesh (ztunnel + waypoint)사이드카
복잡성기능적으로 풍부하고 단단합니다더 단순하고 더 최소한의 오버 헤드
확장 성WASM/EnvoyFilter, 외부 승인자더 제한적이지만 예측 가능

3) 아키텍처 및 배포 모델

3. 1 사이드카 메쉬 (클래식)

각 포드는 프록시 사이드카를받습니다.
장점: 성숙도, 전체 L7 제어.
단점: CPU/RAM 오버 헤드, 고갈/디버깅의 복잡성.

3. 2 Istio Ambient Mesh

필요에 따라 노드 + 웨이 포인트 프록시 (L7) 의 ztunnel (L4).
장점: 저렴한 비용과 복잡성, 점진적인 L7 포함.
단점: 웨이 포인트없이 모든 L7 케이스를 사용할 수있는 것은 아닙니다.

4) 정체성 및 mTLS (제로 트러스트)

4. SPIFFE/SPIRE 및 인증서 1 개

각 운동에는 SPIFFE ID: 'spiffe ://cluster' 가 할당됩니다. 로컬/ns/NS/sa/SA '.
인증: 서비스 간 상호 TLS.
키 회전 - 자동으로 (짧은 TTL).

4. 2 Istio (피어 인증 + DestinationRule)

yaml apiVersion: security. istio. io/v1 kind: PeerAuthentication metadata: { name: default, namespace: payments }
spec:
mtls: { mode: STRICT }
apiVersion: networking. istio. io/v1 kind: DestinationRule metadata: { name: payments-dr, namespace: payments }
spec:
host: payments. svc. cluster. local trafficPolicy:
tls: { mode: ISTIO_MUTUAL }

4. 3 Linkerd-mSL 기본값

'linkerd 설치 후 사용 가능' + 'linkerd 주입'.
클러스터-자체 트러스트 앵커, 자동 회전.

5) 교통 관리

5. 1 Istio: VirtualService (노선, 카나리아)

yaml apiVersion: networking. istio. io/v1 kind: VirtualService metadata: { name: payments }
spec:
hosts: ["payments"]
http:
- route:
- destination: { host: payments, subset: v1 } # stable weight: 90
- destination: { host: payments, subset: v2 } # canary weight: 10 retries: { attempts: 2, perTryTimeout: 300ms }
timeout: 2s
DestinationRule (LB/CB):
yaml apiVersion: networking. istio. io/v1 kind: DestinationRule metadata: { name: payments }
spec:
host: payments subsets:
- name: v1 labels: { version: v1 }
- name: v2 labels: { version: v2 }
trafficPolicy:
loadBalancer: { simple: LEAST_CONN }
outlierDetection:
consecutive5xx: 5 interval: 5s baseEjectionTime: 30s maxEjectionPercent: 50

5. 2 Linkerd: 서비스 프로파일 + 트래 피스 플리트

yaml apiVersion: linkerd. io/v1alpha2 kind: ServiceProfile metadata:
name: payments. default. svc. cluster. local spec:
routes:
- name: POST /withdraw condition:
method: POST pathRegex: "/withdraw"
isRetryable: true timeout: 2s apiVersion: split. smi-spec. io/v1alpha2 kind: TrafficSplit metadata: { name: payments }
spec:
service: payments backends:
- service: payments-v1 weight: 90
- service: payments-v2 weight: 10

6) 침입/탈출 및 API 게이트웨이

Istio Gateway (ingress/egress) -들어오는/나가는 트래픽, TLS 종료, mTLS 통과를 제어합니다.
Linkerd는 기존 수입 컨트롤러 (NGINX/Contour/Traefik) 와 함께 작동합니다. 출구-네트워크 정책/출구 게이트웨이 패턴을 통해.
탈출 정책: 도메인 화이트리스트, SNI 정책, 직접 인터넷 금지.

7) 승인 및 정책

7. 1 Istio AuthorizationPolicy (RBAC/ABAC)

yaml apiVersion: security. istio. io/v1 kind: AuthorizationPolicy metadata: { name: allow-withdraw, namespace: payments }
spec:
selector: { matchLabels: { app: payments } }
action: ALLOW rules:
- from:
- source:
principals: ["spiffe://cluster. local/ns/api/sa/gateway"]
to:
- operation:
methods: ["POST"]
paths: ["/withdraw"]
when:
- key: request. auth. claims[role]
values: ["cashout"]

7. 2 링커드 정책 (서버 + 서버 인증)

yaml apiVersion: policy. linkerd. io/v1beta3 kind: Server metadata: { name: payments-server, namespace: payments }
spec:
podSelector: { matchLabels: { app: payments } }
port: 8080 apiVersion: policy. linkerd. io/v1beta3 kind: ServerAuthorization metadata: { name: allow-gateway, namespace: payments }
spec:
server: { name: payments-server }
client:
meshTLS:
identities: [".ns. api. serviceaccount. identity. linkerd. cluster. local"]

8) 관찰 및 원격 측정

8. 1 메트릭

Istio Telemetry API → Prometheus: 'istio _ 요청 _ total', 'istio _ 요청 _ 지속 시간 _ million _ bucket', 'istio _ tcp _ reseed _ bytes _ total'.
Linkerd viz: '요청 _ total', 대기 시간 p50/p95/p99, 'success _ rate'.

8. 2 개의 트레일과 로그

W3C 추적 컨텍스트를 푸시하십시오.
Istio/Envoy → OTLP 달력 OpenTelemetry Collector; Linkerd-사이드카 로거/앱 SDK를 통해.

8. 인스턴스 3 개

추적 점프를 위해 지속 시간 히스토그램에 trace _ id를 추가하십시오.

9) 속도 제한, WAF, 사용자 정의 필터

Istio: 로컬 요금 제한, eksternal 요율 제한 서비스 (Redis) 및 WAF 논리 (Lua/WASM) 에 대한 EnvoyFilter/WASM.
Linkerd: 제한된 기본 지원; 속도 제한 - 수입/게이트웨이 수준에서.

10) 멀티 클러스터

Istio: 동서 게이트웨이, 공유 PKI 또는 트러스트 번들, ServiceEntry, Federation을 통한 서비스 발견.
Linkerd: 'linkerd 멀티 클러스터 링크', 클러스터 당 게이트웨이, 서비스 미러 контролле).

사용 사례: 자산 지역, 교통 현지화, 연합 제로 트러스트.

11) 성능 및 비용

사이드카 메쉬: 포드 당 CPU/RAM 오버 헤드, 대기 시간 증가 (일반적으로 정상 상태에서 홉 당 + 1-3ms).
주변 (Istio): L4의 소비 감소, L7이 시작됩니다.
Linkerd: 경량 프록시는 일반적으로 오버 헤드가 적지 만 L7 기능은 적습니다.
연습: p95/CPU 전후를 측정하고 SLO 게이트를 열화하도록 유지하십시오.

12) 안전

어디서나 mTLS, 짧은 TTL, 자동 회전.
'승인 정책: ALLOW all' 금지에 대한 코드 (OPA/Gatekeeper, Kyverno) 로서의 정책.
비밀-선언문이 아닌 CSI/Vault를 통해.
탈출 제어: 기본적으로 거부되는 명시 적 허용 목록.
환경에 대한 별도의 신뢰 도메인 (prod/stage).

13) 릴리스 및 SLO 게이팅과의 통합

Canary/Blue-Green은 메시 경로로 구현됩니다 (예 참조).
Argo 롤아웃 분석의 메트릭 분석 (Prometheus/SpanMetrics) -연소 율/p95/5xx의 히치 하이킹/롤백.
Grafana의 릴리스 주석: 비교 '버전 = 안정적인' 카나리아 '.

14) 반 패턴

메쉬 "어디서나 한 번에" → 인프라 충격을 포함하십시오.
프록시 → TSDB/로그 스토리지에 과부하가 걸리는 메트릭/로그의 카디널리티를 무시하십시오.
PERMISSIVE/불투명 모드로 mTLS를 영원히 남겨 두십시오.
게이트웨이/응용 프로그램 대신 EnvoyFilter 내에서 복잡한 WAF/비즈니스 로직을 만들어보십시오.
탈출 정책 없음-인터넷 유출/규정 준수 우회.
': 15000' 디버그가있는 프록시가 외부에 열립니다.

15) 구현 점검표 (0-60 일)

0-15 일

모델 선택: 로드 프로파일에 의하여 Sidecar vs Ambient (Istio )/Linkerd.
1-2 중요 서비스에 대한 기본 인증 정책 인 mSL STRICT를 사용하십시오.
기본 경로 (타임 아웃/재 시도), RED/SLO 대시 보드.

16-30 일

카나리아/트래픽 스 플리트, 핫 트랙에서 특이 치 감지/회로 파손.
OTEL 통합: 트레일 + Exemplars; 경고 연소율.
탈출 게이트웨이 및 도메인 화이트리스트; 기본값으로 거부합니다.

31-60 일

다중 클러스터 링크 (필요한 경우), 페더레이션 트러스트.
Code неAuthorizationPolicy/ServerAuthorization으로서의 정책.
게임 데이: 사고 및 경로/정책 롤백 시뮬레이션.

16) 성숙도 지표

mSL (STRICT/자동 회전) 서비스 범위는 서비스의 95% 이상입니다.

카나리아/프로그레시브를 통한 트래픽 비율은 80% 이상으로 방출됩니

기준선의 평균 오버 헤드 p95 <+ 5% (최적화 후).
허가없이 0 개의 출구, 기본 AuthZ를 사용한 100% 서비스.
"일정에서 추적까지" RCA는 2 분 (p50) 입니다.

17) "코드로서의 정치" 의 예

게이트 키퍼 (prod in permISSIVE)

yaml apiVersion: constraints. gatekeeper. sh/v1beta1 kind: K8sIstiomTLSStrict metadata: { name: deny-permissive-prod }
spec:
match:
kinds: [{ apiGroups: ["security. istio. io"], kinds: ["PeerAuthentication"] }]
namespaces: ["prod-"]
parameters:
allowedModes: ["STRICT"]

Kyverno (VS/DR에 필요한 레이블)

yaml apiVersion: kyverno. io/v1 kind: ClusterPolicy metadata: { name: require-mesh-labels }
spec:
rules:
- name: vs-dr-labels match:
any:
- resources:
kinds: ["VirtualService","DestinationRule"]
validate:
message: "owner and service labels required"
pattern:
metadata:
labels:
owner: "?"
service: "?"

18) 운영 팁

버전 정책 및 경로 (semver), GitOps를 통한 프로모션.
프록시 관찰 가능성: 개별 "프록시 채도" 대시 보드 (CPU/heap, retries, 429/503).
카디널리티 예산: '경로', '코드', '대상' -템플릿 만 표시합니다.
네트워크 제한/네임 스페이스 할당량 (NetworkPolicy/LimitRange).
명령 문서: 런북 "mSL 경로/정책/키를 롤백하는 방법".

19) 결론

Istio와 Linkerd는 서비스 간 통신의 안전, 신뢰성 및 가시성을 표준화하는 동일한 작업을 수행하지만 다양한 깊이와 소유 비용으로 수행합니다.

풍부한 L7 기능과 유연한 정책이 필요합니다. Istio를 사용하십시오 (간접비를 줄이려면 Ambient를 고려하십시오).

단순성과 작은 오버 헤드가 필요합니다-Linkerd를 사용하십시오

선택한 메시: 기본적으로 mTLS를 활성화하고, 코드로 라우팅을 관리하고, 메트릭을 트랙과 연관시키고, 출구를 닫고, SLO 게이팅을 릴리스에 추가하십시오. 그런 다음 네트워크 계층은 "블랙 박스" 가되지 않으며 안정성과 변화 속도를위한 예측 가능한 도구가됩니다.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

Telegram
@Gamble_GC
통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.