Proving an AKS-hosted web stack healthy, layer by layer, when users saw a block page
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.
| Layer | Test | Result |
|---|---|---|
| Ingress | curl -I http://<app> via the ingress IP | 308 → HTTPS 200, correct page, no block text |
| App config | Fetched the SPA's real runtime config file | Only expected hosts, and all of them resolve |
| API gateway | Called every route without a token | Nearly all returned 401 quickly (healthy). One returned 404 |
| Identity | OIDC discovery document | 200 in milliseconds |
| Client path | Compared protocols | The block only happened on plain HTTP, where NGINX always redirects. Something upstream answered first |
# 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'
index.html and misleads you.401 from an API gateway is a healthy signal. Know what healthy looks like for each layer.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.
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.