mirrord
mirrord copied to clipboard
gRPC traffic is not mirrored when using the Linkerd service mesh
Bug Description
When debugging a mirrored C# (.Net 8) micro service in Rider, breakpoints for incoming gRPC requests are not hit.
My service listens for HTTP requests on port 8080 and for gRPC requests on port 5000. I see that HTTP handlers are mirrored properly (well, at least the /healthz
endpoint which is called periodically by the k8s probe). But the gRPC requests are not. Those gRPC requests actually come into the ingress (Contour/Envoy) as grpc-web requests, which are translated to gRPC by Envoy. Then, Envoy sends a meshed request to my service on port 5000.
Removing the Linkerd proxy from my mirrored pod fixes the issue (my breakpoints are hit)
Steps to Reproduce
- Have a Contour ingress, injected with the Linkerd proxy
- Have a gRPC service in a pod that is also injected by the Linkerd proxy
- Use mirrord to mirror the service's traffic
- Make a grpc-web call to the Contour ingress
- Observe that the mirrored process doesn't receive the request
- Remove the Linkerd proxy from the gRPC service pod
- Make a grpc-web call to the Contour ingress
- Observe that the mirrored process does receive the request
Backtrace
No response
Relevant Logs
No response
Your operating system and version
macOS 14.4.1 (23E224)
Local process
A C# (.Net 8) process
Local process version
No response
Additional Info
No response