Service Mesh we trafik syýasaty
1) Näme üçin Hyzmat Mesh gerek?
Service Mesh - kody täzeden ýazmazdan birmeňzeş mümkinçilik berýän gündogar-günbatar traffigi üçin infrastruktura gatlagy:- Howpsuzlyk: mTLS, şahadatnamalaryň awtomatiki berilmegi/aýlanmagy, hyzmatlaryň şahsyýeti.
- Trafik syýasaty: L7 marşrutlaşdyrylmagy, kanar/AV synaglary, zaýalanma we durnuklylyk.
- Syn edilişi: metrikler, loglar, yzarlamalar, her çagyryşda altyn signallar.
- Amallar: ähli diller/framworkler üçin birmeňzeş syýasatlar.
API şlýuzyndan tapawudy: şlýuz - demirgazyk-günorta perimetri; mesh - toparyň/guramanyň içinde gündogar-günbatar. Köplenç bilelikde işleýärler.
2) Arhitektura: tekizlikler we nagyşlar
Data Plane: sidecar-proxy (Envoy/Linkerd-proxy/haproxy).
Control Plane: konfigurasiýalary (ugurlary, syýasatlary, şahadatnamalary) paýlaýar, ýagdaýy saklaýar, hyzmat diskowerlerini çap edýär.
Şahsyýet: adatça SPIFFE ID we awtomatiki X.509 şahadatnamalary (SPIRE/gurlan CA).
Giriş/çykyş nokatlary: serhet akymlaryna gözegçilik etmek üçin ingress/egress-gateway.
Giriş usullary: her birine sidecar; täze durmuşa geçirişlerde per-düwün/ambient-modalar.
3) Howpsuzlyk syýasaty we zero-trust
1. mTLS by default: şifrlemek we birek-biregi tassyklamak service service.
2. AuthN/AuthZ:- AuthN: Diňe CA mesh-a (SPIFFE) berlen şahsyýetlere ynanýarys.
- AuthZ: "kime we nädip edip biler" deklaratiw düzgünleri (RBAC/ABAC).
- Rugsat berlen domenler/kiçi torlar; egress-gateway arkaly mejbury çykyş.
- Belliklerden göni netijeleri blokirlemek.
3. Izolýasiýa we egress-gözegçilik:
4. Syrlaryň aýlanmagy: gysga ömürli şahadatnamalar, proksiniň awtomatiki gaýtadan konfigurasiýasy.
yaml apiVersion: security. istio. io/v1beta1 kind: PeerAuthentication metadata: { name: default, namespace: istio-system }
spec:
mtls: { mode: STRICT }
Istio (mysal: diňe inventory → billing gRPC-de):
yaml apiVersion: security. istio. io/v1beta1 kind: AuthorizationPolicy metadata: { name: billing-allow, namespace: prod }
spec:
selector: { matchLabels: { app: billing } }
rules:
- from:
- source: { principals: ["spiffe://corp. local/ns/prod/sa/inventory"] }
to:
- operation: { ports: ["8080"], methods: ["POST"], paths: ["/proto. Billing/"] }
4) Trafik syýasaty: durnuklylyk we marşrut
4. 1 Wagt we retralar
Timeouts: jaň etmek hökmanydyr (connect/read/overall).
Retries: diňe dempotent amallary üçin; backoff + jitter; per-try timeout çäkleri.
yaml apiVersion: networking. istio. io/v1beta1 kind: VirtualService metadata: { name: orders }
spec:
hosts: ["orders"]
http:
- route:
- destination: { host: orders, subset: v1, port: { number: 8080 } }
timeout: 5s retries:
attempts: 2 perTryTimeout: 2s retryOn: "5xx,connect-failure,reset"
4. 2 Circuit Breaker и outlier detection
CB: apstrimleri gorap, birmeňzeş haýyşlary/baglanyşyklary çäklendirýär.
Outlier: ýalňyşlyklar/gizlinlik sebäpli "erbet" ýagdaýlary zyňýar.
yaml apiVersion: networking. istio. io/v1beta1 kind: DestinationRule metadata: { name: orders }
spec:
host: orders trafficPolicy:
connectionPool:
http: { http1MaxPendingRequests: 1024, maxRequestsPerConnection: 100 }
outlierDetection:
consecutive5xxErrors: 5 interval: 5s baseEjectionTime: 30s maxEjectionPercent: 50
4. 3 Kanareýa we şertler boýunça
Weighted: traffigi tereziler boýunça bölmek v1/v2.
Header-based: baýdaklar/cookie/tenant → täze wersiýa zyňmak.
Session affinity: açar heşi (ulaltmak bilen seresaplylyk bilen).
yaml http:
- match: [{ headers: { "x-experiment": { exact: "new" } } }]
route: [{ destination: { host: orders, subset: v2 } }]
- route:
- destination: { host: orders, subset: v1, weight: 90 }
- destination: { host: orders, subset: v2, weight: 10 }
4. 4 Fault Injection we degradasiýa
Durnuklylyk synagy we SLO üçin gijikdirmeler/ýalňyşlyklar.
yaml fault:
delay: { fixedDelay: 300ms, percentage: { value: 10 } }
abort: { httpStatus: 503, percentage: { value: 1 } }
5) Tor serhetleri: ingress/egress we daşarky hyzmatlar
Ingress-gateway: tora daşarky müşderiler üçin ýeke-täk giriş nokady; WAF/OIDC/ratelimits bilen integrasiýa.
Egress-gateway: Rugsat berlen hostlaryň sanawy bilen merkezi çykyş, TLS barlagy, telemetriýa ýazgysy.
ServiceEntry: mesh (syýasatlar we mTLS-origination ulanylýar) bölegi hökmünde daşarky SNI/host yglan edýär.
yaml apiVersion: networking. istio. io/v1beta1 kind: ServiceEntry metadata: { name: payments-external }
spec:
hosts: ["api. payments. com"]
ports: [{ number: 443, name: https, protocol: TLS }]
resolution: DNS location: MESH_EXTERNAL
6) Multi-cluster, multi-network we gibrid
Umumy PKI/ynam domeni: toparlaryň arasynda SPIFFE-şahsyýetler.
Endpoint discovery: sebitleriň arasynda hyzmat toplary; lokal prioritet we failover.
Zonal izolýasiýa: per-sebitleýin syýasatlar, çäkler we ileri tutulýan ugurlar.
WM in mesh: legacy/Stateful ulgamlaryny proxy we şol bir syýasata birikdirmek.
7) Synlamak, SLO we işlemek
Метрики: `requests_total`, `request_duration_ms{p50,p95,p99}`, `5xx_rate`, `retry_attempts`, `cb_state`, `mTLS_authz_denied`.
Giriş girelgeleri: gurluş, 'traceparent', 'user/tenant', 'response _ flags'.
Treýsing: awto-sanjym sözbaşylary (W3C Trace Context), sampler, hop derejesinde uklamak.
SLO: p99/marşrutdaky ýalňyşlyklar boýunça maksatlar (service → service).
Alertler: '5xx', 'reset', 'outlier _ ejections', mTLS (handshake failures).
8) Öndürijiligi we bahasy
Sidecar bellikleri goşýar (CPU/RAM/latency). Optimizirlemek:- Dänelik: zerur ýerlerde syýasaty goşmak; hemme ýerde agyr süzgüçleri açmaň.
- Howuzlar: ýollary (möhüm/fon) dürli ugurlara we çäklere bölmek.
- Profillemek: p99 "sowuk" ugurlarda, telemetriýanyň göwrümi (rate-limit log/trays).
- Ambient/sidecarless düzgünlerini göz öňünde tutuň, eger olar goldanylsa we talaplara laýyk gelse.
9) Howpsuzlyk we gabat gelmek
Iň az zerur giriş: ugurlary we usullary aç-açan çözmek.
Neýspeýsler/tenantlar boýunça syýasatlar: tor/ygtyýarlylyk çäkleri.
Açarlaryň aýlanmagy/SA: meýilleşdirilen we gyssagly; gysga TTL şahadatnamalary.
PII/syrlar: bloglarda/söwdalarda gizlenmek; simdäki/ýeke-täk şifrlemek.
Audit: kim, haçan we haýsy syýasaty üýtgetdi; iki basgançakly agram.
10) K8s derejesi bilen integrasiýa
Mesh-syýasatlar NetworkPolicy-iň ornuny tutmaýar.
Ingress/egress-gateway-da PodSecurity/PSA-ny aşaky derejä asyp bolýar.
NRA/awtoskeyling: retraini/SV-ni göz öňünde tutuň - olar ýüküni üýtgedýärler.
Goýberiş meýilnamalary: WirtualService arkaly kanar agramy + SLO boýunça awtomatiki mahabat.
11) Girizmegiň çek-sanawy
- Ynam çäkleri kesgitlenildi we STRICT mTLS goşuldy.
- AuthZ syýasatlary girizildi: kime, haýsy portlarda/usullarda.
- timeouts/retries we outlier detection sazlandy, idempotent ýollary kesgitlenildi.
- Kanareýanyň ugurlary we rollback meýilnamasy ýazylýar; fault-injection - diňe prot däl.
- Egress-gateway we ServiceEntry arkaly daşarky garaşlylyk ýüze çykaryldy.
- Metrikler, ýazgylar, ýollar sazlandy; daşbordlar we alertler p99/5xx/CB.
- per-tenant/namespace kwotalary/çäkleri göz öňünde tutulýar.
- Runbooks taýýarlandy: şahadatnama syzmagy, CA şowsuzlygy, akymyň peselmegi, köpçülikleýin 503/RESET.
- Multi-cluster meýilnamasy (umumy PKI, ýerli ileri tutulýan ugurlar, DR-ssenariler).
- Synag günleri: control plane ýykylmagy, sidecar duralgasy, toruň döwülmegi, "zäherli" akym.
12) Anti-patternler
Mesh "hemme ýerde we birbada" marşrutlary we SLO → gymmat kynçylyk.
Ähli usullar üçin standart retralar → iki gezek täsir etmek we traffigiň göçmegi.
Öçürilen mTLS "wagtlaýyn" → hemişelik galýar.
Şlýuzsiz egress → maglumatlaryň syzmagy/hasaba alynmadyk garaşlylyk.
Ähli hyzmatlar üçin bir global syýasat → ýalan howpsuzlyk we ýalan hereketler.
Nol observability: mesh açdyk, ýöne metrikleri/söwdalary ýygnamaýarys - manysyny ýitirýäris.
13) Çalt reseptler
Linkerd: mTLS we policy serwer boýunça açmak
yaml apiVersion: policy. linkerd. io/v1beta1 kind: Server metadata: { name: billing, namespace: prod }
spec:
podSelector: { matchLabels: { app: billing } }
port: 8080 apiVersion: policy. linkerd. io/v1beta1 kind: ServerAuthorization metadata: { name: billing-allow-inventory, namespace: prod }
spec:
server: { name: billing }
client:
meshTLS:
identities: ["inventory. prod. serviceaccount. identity. linkerd. cluster. local"]
Consul (L7 intent + splitter)
hcl
Kind = "service-router"
Name = "orders"
Routes = [{
Match { HTTP { PathPrefix = "/v1" } }
Destination { Service = "orders" }
}]
Kind = "service-splitter"
Name = "orders"
Splits = [
{ Weight = 90, ServiceSubset = "v1" },
{ Weight = 10, ServiceSubset = "v2" }
]
14) FAQ
Kiçijik topara mesh gerekmi?
Eger 3-5 hyzmat bar bolsa - köplenç ýok. Gowy ingress we durnuklylyk kitaphanalaryndan başlaň. mTLS, bitewi syýasatlar we kody üýtgetmezden yzarlamak zerurlygy ýüze çykanda tory birikdiriň.
Bahasyna nädip gözegçilik etmeli?
Möhüm ýollarda bellikleri (CPU/RAM/latency) ölçäň, artykmaç süzgüçleri öçüriň, ýazgylaryň/treýsleriň göwrümini azaldyň, howpsuz ýerlerde sidecarsyz re modeimleri ulanyň.
Mesh we el bilen sazlanan proxy päsgel berip bolarmy?
Hawa, ýöne goşa marşrutdan/gaýtalanýan retraýlardan gaça duruň. Bir ýer hakykat - control plane.
Has möhüm zat: howpsuzlyk ýa-da öndürijilik?
Howpsuzlyk (mTLS, AuthZ). Öndürijilik connection pools, outlier detection, maksatly ugurlar arkaly gazanylýar.
15) Netijeler
Service Mesh, hyzmatlaryň arasyndaky ulgamy ýeke-täk syýasatlar bilen programmirlenýän gatlaga öwürýär: şifrlemek we şahsyýet, inçe marşrut we durnuklylyk, telemetriýa we kwotalar. Möhüm ýollardan başlaň, STRICT mTLS we aç-açan AuthZ-i açyň, wagt/retrauslar/SV beriň, egresi dolandyryň, p99 we 5xx ölçäň, oýun günlerini geçiriň. Şonda mesh garaşylmadyk çeşmä däl-de, relizleriň ygtybarlylygyny we tizligini güýçlendiriji bolar.