Pod injection is replica blind
Stealing traffic from one pod behind an HPA is a coin flip, and pod filters cannot match a JWT claim.
Route only your requests to the service running on your laptop. Matched traffic reaches your debugger; everyone else stays on the real pods.
The goal is simple: drive the shared app and stop at a local breakpoint. In a locked-down, replicated service mesh, the usual interception points cannot reliably identify your request.
Stealing traffic from one pod behind an HPA is a coin flip, and pod filters cannot match a JWT claim.
Shared clusters often do not let developers install or operate a cluster-wide control plane.
VirtualService and HTTPRoute cannot inspect a JWT claim such as email.
Decode the token in a namespace-scoped relay, use the claim only as a routing hint, and dispatch a matching request to the connected developer.
The relay stays generic. Each laptop registers its own matching rule when its tunnel workers connect.
A VirtualService, HTTPRoute, or target-side EnvoyFilter sends the selected feed to the relay.
The relay extracts a JWT claim or HTTP header and resolves the first connected match.
The CLI forwards the request through its Kubernetes port-forward to your local service.
Unmatched traffic reaches the real target; in mirror modes, the real service always responds.
Caller-side modes are simpler. Target-side modes also catch clients without an Istio sidecar.
Compare the trade-offs| Mode | Coverage | Response |
|---|---|---|
divertdefault | Meshed callers | Local service |
mirrorobserve | Meshed callers | Real service |
inbound-divertall callers | Mesh + non-mesh | Local service |
inbound-mirrorall callers | Mesh + non-mesh | Real service |
Route on a stable JWT claim such as email, or use a plain HTTP header.
The CLI connects out through a client-go port-forward; the cluster never dials your machine.
Optional Gateway API routes catch selected browser traffic through a narrow header gate.
Expose HTTP, gRPC, Postgres, or another TCP service locally through the same connection.
The relay and routing objects stay in the target namespace, without a cluster-wide manager.
Ctrl-C removes routing before the relay so direct traffic is restored first.
Install the CLI, scaffold one config file, add your service and identity, then bring the intercept up.
Full walkthrough# install the laptop CLI brew install outprobe/outprobe # scaffold .outprobe.yaml outprobe init # set target, namespace, identity, and relay image # run the local app, then start the intercept outprobe up ready / matched requests now route to localhost:8080
Bring up the intercept while you debug, then restore direct routing with Ctrl-C.