GH GambleHub

Service Mesh: Istio, Linkerd

Service Mesh: Istio, Linkerd

1) Xidmət Mesh nədir və lazım olduqda

Service Mesh - kodu yenidən yazmadan xidmətlər arasında keçid mTLS, marşrutlaşdırma, nasazlıq və müşahidə təmin edən şəbəkə məlumat/idarəetmə müstəvisi təbəqəsidir.

Məqsədlər:
  • Standart təhlükəsizlik (zero-trust, xidmət kimliyi, giriş siyasəti).
  • Trafik nəzarəti (Canary/Blue-Green, A/B, shadowing).
  • Etibarlılıq (retras, taymaut, circuit breaking).
  • Müşahidə (metriklər, loqlar, treyslər).
  • Əməliyyat standartlaşdırma (kod kimi siyasət, GitOps).
mesh almaq zaman:
  • Polilinqvallıq və mTLS tələbi ilə bir çox mikroservis.
  • Tətbiqi dəyişdirmədən qabaqcıl marşrut/təcrübə ssenariləri lazımdır.
  • Şəbəkə səviyyəsində audit/siyasət tələbləri var.

2) Istio vs Linkerd - qısa müqayisə

AspektIstioLinkerd
ProxyEnvoy (L7)rust-proxy (L7 для http/grpc) + minimalist
QuraşdırmaIstioOperator/helm`linkerd install`/helm
TəhlükəsizlikmTLS, AuthorizationPolicy, PeerAuthentication, WASM-фильтрыmTLS default, sadə siyasətlər ('policy', 'server', 'serverauthorization')
Trafik menecmentiVirtualService, DestinationRule, Gateway, EnvoyFilterServiceProfile, TrafficSplit (SMI), retries/timeouts
MüşahidəPrometheus, Telemetry API, Envoy access logs, OpenTelemetry'linkerd viz' (tap/edges/routes), Prometheus, OTEL inteqrasiya
ÇoxlasterNative multi-cluster, east-west gateway`linkerd multicluster` (gateways + service mirror)
Yerləşdirmə modeliSidecar и Ambient Mesh (ztunnel + waypoint)Sidecar
MürəkkəblikFunksional cəhətdən zəngin, daha çətinDaha asan, daha minimalist, daha az overhead
GenişləndirilebilirlikWASM/EnvoyFilter, xarici avtorizatorlarDaha məhdud, lakin proqnozlaşdırıla bilən

3) Memarlıq və yerləşdirmə modelləri

3. 1 Sidecar mesh (klassik)

Hər Pod proxy-saidcar alır.
Üstünlüklər: yetkinlik, tam L7-nəzarət.
Mənfi cəhətləri: CPU/RAM, deploes/hata ayıklama.

3. 2 Istio Ambient Mesh

ztunnel (L4) node + waypoint proxies (L7) lazım.
Üstünlüklər: aşağı qiymət və mürəkkəblik, L7 tədricən daxil.
Mənfi cəhətləri: yeni, bütün L7-cases waypoint olmadan mövcuddur.

4) Kimlik və mTLS (zero-trust)

4. 1 SPIFFE/SPIRE və Sertifikatlar

Hər bir workload SPIFFE ID verilir: 'spiffe ://cluster. local/ns/NS/sa/SA`.
Autentifikasiya: xidmətlər arasında qarşılıqlı TLS.
Açarların rotasiyası - avtomatik (qısa TTL).

4. 2 Istio (PeerAuthentication + 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 - mTLS default

'linkerd install' + 'linkerd inject' sonra aktivləşdirilir.
Klasterlər - öz trust-anchor, rotasiya avtomatik.

5) Trafik menecmenti

5. 1 Istio: VirtualService (marşrutlar, kanareykalar)

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: ServiceProfile + TrafficSplit

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) Ingress/Egress və API şlüzləri

Istio Gateway (ingress/egress) - giriş/çıxış trafikini, TLS termination, mTLS passthrough idarə edir.
Linkerd mövcud ingress-controller (NGINX/Contour/Traefik) ilə işləyir; egress - NetworkPolicy/egress-gateway-patternlər vasitəsilə.
Egress siyasətləri: ağ domen siyahıları, SNI-policy, birbaşa internet qadağası.

7) Avtorizasiya və siyasət

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 Linkerd policy (server + serverauthorization)

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) Müşahidə və telemetriya

8. 1 Metrika

Istio Telemetry API → Prometheus: `istio_requests_total`, `istio_request_duration_milliseconds_bucket`, `istio_tcp_received_bytes_total`.
Linkerd viz: `request_total`, latency p50/p95/p99, `success_rate`.

8. 2 Treys və Logs

W3C Trace Context atın.
Istio/Envoy → OTLP в OpenTelemetry Collector; Linkerd - sidecar-loqgerlər/app-SDK vasitəsilə.

8. 3 nüsxələr (Exemplars)

«Jump-to-trace» üçün uzunluq histoqramlarına 'trace _ id' əlavə edin.

9) Rate limits, WAF, xüsusi filtrlər

Istio: EnvoyFilter/WASM üçün lokal rate limits, eksternal-rate-limit service (Redis), həmçinin WAF-məntiq (Lua/WASM).
Linkerd: məhdud yerli dəstək; rate limit - ingress/şlüz səviyyəsində.

10) Çoxklasterlik

Istio: east-west gateway, ümumi PKI və ya trust-bundle, ServiceEntry, Federation vasitəsilə xidmət discovery.
Linkerd: `linkerd multicluster link`, gateway per cluster, service-mirror контроллер.

Use-cases: aktiv-aktiv regionlar, trafikin lokallaşdırılması, federal sıfır-trust.

11) Performans və dəyəri

Sidecar mesh: hər Pod-da CPU/RAM overhed, artan gecikmə (adətən steady-state-də hop-da + 1-3 ms).
Ambient (Istio): L4 üçün daha az istehlak, L7 nöqtə ilə açılır.
Linkerd: yüngül proxy adətən daha az overhead, lakin daha az ekstremal L7 imkanları.
Təcrübə: əvvəl/sonra p95/CPU ölçün, deqradasiya üçün SLO geytaları saxlayın.

12) Təhlükəsizlik

mTLS hər yerdə, qısa TTL, avtomatik rotasiya.
Policy as Code (OPA/Gatekeeper, Kyverno) qadağalar üçün 'authorizationPolicy: ALLOW all'.
Sirlər - CSI/Vault vasitəsilə, manifestlərdə deyil.
Egress-control: deny-by-default, aydın allow-vərəqlər.
Ətraf mühit üçün ayrı-ayrı trust domains (prod/stage).

13) Relizlər və SLO Gating ilə inteqrasiya

Canary/Blue-Green mesh marşrutları ilə həyata keçirilir (nümunələrə baxın).
Argo Rollouts AnalysisTemplate-da metriklərin təhlili (Prometheus/SpanMetrics) - burn-rate/p95/5xx-də avtomatik stop/geri dönüş.
Qrafana-da buraxılış şərhləri: müqayisə 'version = stable' canary '.

14) Anti-nümunələr

mesh «hər yerdə və dərhal» → şok infrastruktur.
proxy → həddindən artıq TSDB/log-dən metrik/log kardinallığına məhəl qoymayın.
mTLS-i PERMISSIVE/opaque rejimində əbədi buraxın.
gateway/app əvəzinə EnvoyFilter daxilində mürəkkəb WAF/biznes məntiqi etməyə çalışın.
Heç bir egress siyasəti - internetə sızma/komplayens aşma.
s 'proxy: 15000' debug açıq.

15) Giriş çek siyahısı (0-60 gün)

0-15 gün

Model seçimi: Sidecar vs Ambient (Istio )/Linkerd yükləmə profili.
1-2 kritik xidmətlər üçün mTLS STRICT, əsas avtorizasiya siyasətlərini daxil edin.
Əsas marşrutlar (timeout/retries), RED/SLO daşbordları.

16-30 gün

Canary/TrafficSplit, isti yollarda outlier detection/circuit breaking.
OTEL inteqrasiya: treys + Exemplars; burn-rate alertləri.
Egress-gateways və ağ domen siyahıları; deny-by-default.

31-60 gün

Çoxklasterli link (lazım olduqda), federation trust.
Policy as Code на AuthorizationPolicy/ServerAuthorization.
Game-day: hadisənin simulyasiyası və marşrutların/siyasətlərin geri qaytarılması.

16) Yetkinlik metrikası

mTLS-in əhatə dairəsi (STRICT/auto-rotate) xidmətlərin 95% -ni ≥.
Kanarya/proqressiv relizlər vasitəsilə trafik payı ≥ 80%.
Orta overhead p95 <+ 5% baza xətti (optimallaşdırdıqdan sonra).
0 icazəsiz açıq egress, baza AuthZ ilə 100% xidmətlər.
RCA «qrafikdən trasa» ≤ 2 dəqiqə (p50).

17) «kod kimi siyasət» nümunələri

Gatekeeper (məhsulda PERMISSIVE qadağası)

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 üçün məcburi labels)

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) Əməliyyat şuraları

Siyasətləri və marşrutları versiya edin (semver), GitOps vasitəsilə promosyon.
Proxy müşahidə: ayrı-ayrı daşbordlar «proxy saturation» (CPU/heap, retries, 429/503).
Büdcə kardinallığı: 'route', 'code', 'destination' işarələri yalnız şablonlardır.
namespace (NetworkPolicy/LimitRange) səviyyəsinə şəbəkə limitləri/kvotalar.
Komanda sənədləşdirilməsi: runbook «mTLS marşrutları/siyasət/açarları geri necə».

19) Nəticə

Istio və Linkerd bir problemi həll edir - xidmətlərarası kommunikasiyaların təhlükəsizliyini, etibarlılığını və görünüşünü standartlaşdırmaq - lakin bunu müxtəlif dərinlik və sahib olma dəyəri ilə edirlər.

Zəngin L7 imkanları və çevik siyasətlərə ehtiyacınız var - Istio-nu götürün (yükləri azaltmaq üçün Ambient-i nəzərdən keçirin).
Sadəlik və kiçik overhead lazımdır - Linkerd götürün.

Hansı mesh seçdiyinizdən asılı olmayaraq: mTLS-i default olaraq açın, marşrutu kod kimi idarə edin, metrləri treyslərlə əlaqələndirin, egresi bağlayın və buraxılışlara SLO geytinq əlavə edin. Sonra şəbəkə təbəqəsi «qara qutu» olmağı dayandıracaq və sabitlik və dəyişmə sürətinin proqnozlaşdırıla bilən alətinə çevriləcəkdir.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

Telegram
@Gamble_GC
İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.