
Summary of scenarios
Useful references:
Scenario 1 — Gateway exists but shows no address / Programmed = Unknown
Symptom: After applying a Gateway manifest theADDRESS field is empty and PROGRAMMED remains Unknown.
Inspect the files and object:
ngin) so the controller does not adopt or program it.
Fix: update gateway.yaml to use the correct spec.gatewayClassName (e.g. nginx) and reapply:
Scenario 2 — HTTPRoute applied but Gateway shows “Attached Routes: 0”
Symptom: An HTTPRoute exists, but the Gateway’s listener showsAttached Routes: 0.
Check the route:
Attached Routes: 0):
parentRefs and status:
parentRefs.name (gatew instead of gateway) — the controller cannot associate the HTTPRoute with the Gateway, so attachment and parent status are missing.
Fix: correct parentRefs.name in coffee-route.yaml to the Gateway name (gateway) and reapply:
Scenario 3 — TLS: Gateway can’t access Secret in another namespace (ReferenceGrant needed)
Symptom: Gateway’s HTTPS listener fails to resolve the TLS secret and shows:default namespace cannot reference a Secret in the certificate namespace by default. The Gateway API requires an explicit ReferenceGrant in the Secret’s namespace to allow cross-namespace references.
Fix: Create a ReferenceGrant in the Secret namespace (certificate) that allows the Gateway to reference the Secret. Example manifest (ref-grant.yaml):
Secret in the same namespace as the Gateway to avoid needing a ReferenceGrant. When cross-namespace references are required, ReferenceGrant is the recommended approach.
Scenario 4 — 404 Not Found: route exists but you requested the wrong path
Symptom: Gateway and HTTPRoute are accepted, but client requests return404 Not Found.
Verify Service and Pods:
/tea):
PathPrefix /coffee. Requests to /tea do not match and return 404.
Fix options:
- Use the correct path: request
/coffee. - Or update the HTTPRoute to include additional
matchesfor/teaor a broader prefix.
Scenario 5 — 500 Internal Server Error: backend port mismatch (BackendNotFound)
Symptom: The HTTPRoute is attached and accepted, but requests return500 Internal Server Error.
Reproduce the symptom:
808, but the Service exposes port 80. The controller cannot resolve the backend port, so NGINX cannot forward traffic and returns a 500.
Fix: update the HTTPRoute backendRefs.port to match the Service port 80. Example before/after:
Before (incorrect):
When troubleshooting Gateway API resources, start with status fields and controller messages — they are purposefully descriptive. Typical culprits are incorrect
GatewayClass names, typos in parentRefs, missing ReferenceGrant for cross-namespace Secrets, mismatched service ports, or incorrect route paths. Isolate whether the issue is control plane (controller not adopting), data plane (NGINX config/backends), or client-side (wrong hostname/path), then fix manifests or permissions and reapply.