← Back to Projects

Inside-Out Ingress Troubleshooting

Proving an AKS-hosted web stack healthy, layer by layer, when users saw a block page

Platform: AKS + NGINX Ingress
Stack: SPA, API gateway, OIDC
Type: Investigation
Role: Investigator

Overview

A production web portal showed some users a generic request blocked by policy page instead of the app. Firewall, WAF and DNS changes were all being suggested. Before touching anything, I tested every layer from the inside out. Ingress, the app, the API gateway and identity were all healthy. Something in the client's network path was answering before the cluster ever saw the request.

Architecture

BrowserClient networkweb security agentDNSInternal LBNGINX ingressSPA podsAPI gatewayIdentity (OIDC)
Each layer was tested. The block came from the client-side agent.

Layer-by-Layer Results

LayerTestResult
Ingresscurl -I http://<app> via the ingress IP308 → HTTPS 200, correct page, no block text
App configFetched the SPA's real runtime config fileOnly expected hosts, and all of them resolve
API gatewayCalled every route without a tokenNearly all returned 401 quickly (healthy). One returned 404
IdentityOIDC discovery document200 in milliseconds
Client pathCompared protocolsThe block only happened on plain HTTP, where NGINX always redirects. Something upstream answered first
test from inside the cluster's trust boundary
# Bypass DNS and any client-side interceptor entirely
kubectl -n <ns> port-forward svc/<web-app> 8080:80
curl -s localhost:8080/<runtime-config-path> | jq '.endpoints'

Findings

  1. The platform was healthy at every layer.
  2. The block was client-side. A web security agent on the user's device intercepted plain-HTTP requests.
  3. The NXDOMAIN hostnames were red herrings. The deployed app never used those legacy aliases, but a stale CORS allow-list still listed them.
  4. One real bug: one API route returned 404 even though its backend pods were healthy. It was a gateway routing fault.
  5. Config hygiene: the production SPA config still had a development flag set.

Key Outcomes

Lessons Learned

Conclusion

Sometimes the most valuable result is "it isn't the platform", backed by evidence from every layer, so the right team can fix the right thing.

Technologies Used

AKSNGINX Ingress ControllerKubernetes Serviceskubectl port-forwardOpenID ConnectAPI Gatewaycurljq

About this case study: this write-up is drawn from my hands-on platform engineering experience. Organisation names, system names, figures and timelines have been changed or generalised, and all code, configuration and queries are illustrative examples written for this page.

← Crash-Loops with Three DNS Root CausesSilent Failure Modes in Shared Helm Charts →
← Back to Projects Get in Touch