Service Mesh — Istio & Linkerd›Modules · Cheat sheet & self-check

Modules · wrap-up

Cheat sheet & self-check

Every command from this section on one page.

01 · Why (and why not) a mesh

What a mesh gives

mTLS with workload identityEncryption + 'who is calling' for every hop
Authorization policiesAllow service A → B (by identity), not by IP
Traffic controlCanary splits, retries, timeouts, circuit breaking, fault injection
Uniform telemetryGolden signals for every service without code changes

What it costs

ResourcesProxies per pod (sidecar) or per node (ambient/ztunnel)
LatencyExtra proxy hops (typically sub-millisecond to a few ms each)
OperationsUpgrades, certificates, CRDs, debugging a new layer

02 · Istio architecture

Install & inspect

istioctl install --set profile=default (or profile=ambient)Install Istio (or use the Helm charts)
kubectl label namespace shop istio-injection=enabledSidecar mode: inject into new pods
kubectl label namespace shop istio.io/dataplane-mode=ambientAmbient mode: add a namespace to the mesh
istioctl waypoint apply -n shop --enroll-namespaceAmbient: add an L7 waypoint for the namespace
istioctl analyze -AFind configuration problems
istioctl proxy-status / istioctl proxy-config routes <pod>Is config pushed? What does this proxy know?

Core resources

PeerAuthentication / AuthorizationPolicy / RequestAuthenticationmTLS mode, access rules, JWT validation
VirtualService / DestinationRule (or Gateway API HTTPRoute)Routing and traffic policy
ServiceEntry / Sidecar / TelemetryExternal services, proxy scope, telemetry config

03 · Linkerd architecture

Install & check

linkerd check --preValidate the cluster before installing
linkerd install --crds | kubectl apply -f - && linkerd install | kubectl apply -f -Install CRDs, then the control plane (CLI method)
linkerd checkVerify the installation
kubectl annotate ns shop linkerd.io/inject=enabledInject proxies into new pods
linkerd viz install | kubectl apply -f - && linkerd viz dashboardMetrics extension and dashboard

Observe & debug

linkerd viz stat deploy -n shopSuccess rate, RPS, latency per deployment
linkerd viz top deploy/cart -n shopLive top requests
linkerd viz tap deploy/cart -n shopStream live requests (metadata)
linkerd viz edges deploy -n shopWhich connections are mTLS'd, by identity

04 · mTLS & identity

Identity

spiffe://cluster.local/ns/shop/sa/cartIstio SPIFFE ID (trust domain / namespace / service account)
cart.shop.serviceaccount.identity.linkerd.cluster.localLinkerd identity name
One service account per workloadIdentities are only as fine-grained as service accounts

Istio mTLS & authz

PeerAuthentication mtls.mode: PERMISSIVE → STRICTAccept both, then only mTLS
PeerAuthentication in istio-system (root namespace)Mesh-wide default
AuthorizationPolicy: from.source.principals: [cluster.local/ns/shop/sa/frontend]Allow by identity
istioctl x describe pod <pod>Effective mTLS/policy for a pod

05 · Traffic management

Routing

HTTPRoute backendRefs weights: 90 / 10Canary split (Gateway API; Istio and Linkerd)
VirtualService http.route[].weight + DestinationRule subsetsCanary split (Istio API)
Argo Rollouts / FlaggerAutomate canary steps with metric analysis

Resilience

timeout: 2s (per route)Never wait forever
retries: attempts: 2, perTryTimeout: 500ms, retryOn: connect-failure,refused-stream,unavailableRetry only safe failures
connectionPool + outlierDetection (DestinationRule)Circuit breaking and ejecting bad endpoints
fault: delay / abort (VirtualService)Inject failures to test behaviour

06 · Mesh observability

Istio metrics

istio_requests_total{reporter, source_workload, destination_workload, response_code}Request counts
istio_request_duration_milliseconds_bucketLatency histogram
reporter="destination" (server side) vs "source" (client side)Avoid double counting

Linkerd & tools

request_total, response_total, response_latency_ms_bucketLinkerd proxy metrics
linkerd viz stat / routes / edgesCLI golden signals
KialiIstio service graph, config validation

07 · Upgrades & production patterns

Istio revision upgrade

istioctl install --set revision=1-26-0Install the new control plane alongside the old
istioctl tag set prod-stable --revision 1-26-0 --overwritePoint a stable tag at the new revision
kubectl label ns shop istio.io/rev=prod-stable --overwrite (remove istio-injection)Namespaces follow the tag
kubectl rollout restart deploy -n shopMove pods to the new sidecar
istioctl uninstall --revision 1-25-2Remove the old control plane when empty

Linkerd & general

linkerd upgrade | kubectl apply -f - (or helm upgrade)Upgrade the control plane
linkerd check --proxyCheck proxies' versions and health
Upgrade one minor at a time; read release notesSupported paths