Design Service Mesh

Hard45 min
1 / 30
understanding9 min read

Problem Statement: Service Mesh Platform Design

How Problem Statement: Service Mesh Platform Design (understanding) informs Service Mesh architecture and interviewer depth.

Problem Statement: Service Mesh Platform Design

Design a service mesh for east-west microservice traffic on Kubernetes: mutual TLS, L7 routing, retries, circuit breaking, and unified observability without rewriting every service in a shared library.

Interviewers expect you to separate the control plane (Istiod, Linkerd destination, AWS App Mesh controller) from the data plane (Envoy sidecars, Linkerd micro-proxies). A strong answer states who owns the mesh (platform/SRE), how teams onboard workloads, and measurable outcomes: p99 sidecar latency < 3ms, 100% mTLS for in-mesh calls, trace sampling that does not drown the backend.

Core story

  1. Identity — SPIFFE/SPIRE or mesh CA issues short-lived certs per workload identity.
  2. Traffic policy — VirtualService/HTTPRoute sets timeouts, retries, fault injection, traffic splits.
  3. Telemetry — RED metrics, access logs, W3C trace propagation from sidecar without app changes.
  4. Progressive adoptionnamespace labels for injection, allowlists for legacy plaintext during migration.

Interview Focus

  • Quantify sidecar CPU/RAM and p99 latency tax before naming Istio or Linkerd
  • Explain mTLS identity (SPIFFE) and STRICT vs PERMISSIVE migration
  • Show bounded retries, timeouts, and outlier detection as overload protection
  • Describe Istiod HA, xDS propagation, and failure behavior when control plane degrades
javaOne Dark Pro
1public final class MeshRetryPolicy {
2 public int maxAttempts(boolean idempotent) {
3 return idempotent ? 2 : 1;
4 }
5 public long perTryTimeoutMs() { return 20L; }
6}
pythonOne Dark Pro
1from dataclasses import dataclass
2
3@dataclass
4class PeerTlsMode:
5 namespace: str
6 mode: str # STRICT | PERMISSIVE
7
8def allows_plaintext(mode: str) -> bool:
9 return mode == "PERMISSIVE"
typescriptOne Dark Pro
1interface VirtualRoute {
2 host: string;
3 subset: string;
4 weight: number;
5}
6
7export function canaryWeights(stable: number, candidate: number): VirtualRoute[] {
8 const total = stable + candidate;
9 return [
10 { host: "payments", subset: "stable", weight: stable / total },
11 { host: "payments", subset: "canary", weight: candidate / total },
12 ];
13}

How to open this one

The framing that lands for a service mesh is moving cross-cutting concerns — mTLS, retries, traffic shifting, observability — out of application code into a sidecar proxy controlled by a central control plane. Lead with the data-plane/control-plane split (Envoy sidecars enforcing policy pushed by the control plane) and the failure story that proves it: a control-plane outage must not break the data plane, so proxies keep their last-known config and keep serving. That shows you understand the mesh's value is uniform policy without touching app code.

Key Highlights

  • Separate mesh control plane from sidecar data plane
  • Budget sidecar CPU/RAM and p99 latency overhead explicitly
  • STRICT mTLS in prod; PERMISSIVE only for bounded migration
  • Bounded retries and outlier detection prevent retry storms
Staff+ signal
Link Problem Statement: Service Mesh Platform Design to blast radius and measurable recovery, not tool names alone.
Avoid
Treating Service Mesh as magic autoscaling without requests, limits, probes, or PDBs.

Section Rescue Kit

Buzzwords to use:

Mutual TLS (mTLS)xDS

Safe statements:

  • "I'll anchor Problem Statement: Service Mesh Platform Design to measurable mesh tax, mTLS coverage, and rollback via route weights."
  • "If pressed, I'll compare Istio vs Linkerd only after stating sidecar resource and SRE cost."
Design Service Mesh - System Design | WinJob | WinJob