Diagnostic step 1
Confirm the client uses HTTP/2 and correct host header: run openssl s_client -connect LB:PORT -servername service.example.com and observe ALPN protocols, or use grpcurl with -authority and -insecure flags to test.
Generated Oct 3, 2026, 12:35:03 AM
Confirm the client uses HTTP/2 and correct host header: run openssl s_client -connect LB:PORT -servername service.example.com and observe ALPN protocols, or use grpcurl with -authority and -insecure flags to test.
Temporarily configure the LB to use TCP passthrough to a single ingress node and use TLS passthrough (not terminate) so TLS and HTTP/2 are preserved; test gRPC after ensuring server cert is valid. If passthrough succeeds, LB termination is the issue and LB settings must preserve HTTP/2 and host header.
Add a distinct ingress rule that matches the LB’s observed Host header (or set ingress to accept both hostnames) to rule out hostname mismatch; do not delete production rules — apply in a test namespace.
Enable nginx-ingress debug logging and capture the full request headers on ingress to see Host, :scheme, and HTTP version. Check ingress-controller ConfigMap for use-http2 and proxy protocol settings.
If LB cannot preserve HTTP/2 semantics, consider switching to a TCP/L4 load balancer or using a gRPC-aware gateway (Envoy/Contour) that explicitly supports gRPC proxying. If debugging shows LB rewrites and vendor docs are unclear, escalate to cloud provider support with packet traces (no sensitive payload) and ingress logs. Avoid changing TLS/keys in production without backups.