Kubernetes Ingress on Windows minikube — common errors + fixes
ERR_CONNECTION_TIMED_OUT, ingress ADDRESS shows 127.0.0.1, hostname unreachable — the full troubleshooting guide for exposing an Ingress on Windows minikube.
Setting up nginx-ingress on Windows minikube with Docker driver? Common outcome:
ERR_CONNECTION_TIMED_OUT — hello.192-168-49-2.nip.io took too long to respond.
The tutorial works on Mac/Linux but breaks on Windows. Here’s every reason it fails and the exact fixes.
Standard setup that fails
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-ingress
spec:
ingressClassName: nginx
rules:
- host: hello.192-168-49-2.nip.io
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: hello-svc
port:
number: 80
Deployment + Service running fine. Ingress applied. Browser times out.
Diagnose first
Check the Ingress ADDRESS:
kubectl get ingress
Output:
NAME CLASS HOSTS ADDRESS PORTS AGE
hello-ingress nginx hello.192-168-49-2.nip.io 127.0.0.1 80 13m
The critical clue: ADDRESS shows 127.0.0.1, not 192.168.49.2.
On Windows with Docker driver, minikube exposes the ingress-nginx controller on localhost — not the minikube IP.
Why the browser times out
The hostname hello.192-168-49-2.nip.io:
- Browser asks DNS: what IP is this?
- nip.io resolves to
192.168.49.2 - Browser tries to reach
192.168.49.2:80 - Fails — that IP is Docker-internal, unreachable from Windows
The ingress is fine. The hostname just points to an IP the browser can’t reach.
Fix 1 — Match hostname to ADDRESS
If ADDRESS is 127.0.0.1, use a hostname that resolves to 127.0.0.1:
- host: hello.127-0-0-1.nip.io # nip.io resolves this to 127.0.0.1
Apply:
kubectl apply -f ingress.yaml
Browser: http://hello.127-0-0-1.nip.io → works.
No admin, no hosts file edit, no tunneling.
Fix 2 — minikube tunnel (needs admin)
If ADDRESS is <pending> or shows minikube IP but browser still can’t reach:
Open new admin PowerShell:
minikube tunnel
Leave it running. It creates a route from Windows loopback to minikube’s internal network.
Downside: needs admin. Corporate laptops often block this.
Fix 3 — Prove ingress works via curl
Before browser troubleshooting, confirm the ingress routes correctly:
curl -H "Host: hello.192-168-49-2.nip.io" http://127.0.0.1
Returns HTML? → Ingress works. Browser routing is the only issue.
Returns 404? → Ingress rule doesn’t match. Check YAML for host/path typos.
Connection refused? → nginx-ingress controller not running. Check:
kubectl get pods -n ingress-nginx
Fix 4 — Two ingresses fighting for same host
Applying two Ingress objects with the same host + path produces:
Error from server (BadRequest): admission webhook denied the request:
host "hello.192-168-49-2.nip.io" and path "/" is already defined in
ingress default/hello-ingress
Fix: delete the old one first:
kubectl delete ingress hello-ingress
kubectl apply -f ingress-tls.yaml
Or change hostname on one so both coexist.
The key rule
On Windows minikube with Docker driver, always check kubectl get ingress ADDRESS column.
Match your hostname to that ADDRESS via nip.io:
- ADDRESS
192.168.49.2→ hostname<name>.192-168-49-2.nip.io - ADDRESS
127.0.0.1→ hostname<name>.127-0-0-1.nip.io
Alternative — hyperv driver instead of docker
If Windows Pro is available:
minikube delete
minikube start --driver=hyperv
With hyperv driver, minikube IP is directly reachable from Windows. No tunnel needed, no localhost mapping tricks.
Downside: hyperv requires Windows Pro/Enterprise. Windows Home users are stuck with docker driver.
Debug checklist
Before spending hours on this:
kubectl get pods -n ingress-nginx— controller running?kubectl get ingress— ADDRESS populated?curl -H "Host: <yourhost>" http://<address>— ingress works?- If curl works but browser doesn’t → hostname/DNS issue → use matching nip.io hostname
What NOT to do
- Don’t edit
/etc/hostsfor local dev — messy, easy to forget cleanup - Don’t disable firewall — the connection isn’t blocked, it’s misrouted
- Don’t try to change minikube IP — not user-configurable on docker driver
- Don’t reinstall minikube unless truly broken
Summary
Windows minikube ingress issues are almost always: hostname resolves to an IP the browser can’t reach.
Match the hostname to the Ingress ADDRESS via nip.io. That fixes 90% of cases without admin privileges.
DevOps YAML Pack
36 production-ready configs — Kubernetes, Docker Compose, GitHub Actions, Terraform, Helm, Ansible. Every file heavily commented. Copy, paste, ship.
Get the pack — ₹499 →