DevOps

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:

  1. Browser asks DNS: what IP is this?
  2. nip.io resolves to 192.168.49.2
  3. Browser tries to reach 192.168.49.2:80
  4. 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:

  1. kubectl get pods -n ingress-nginx — controller running?
  2. kubectl get ingress — ADDRESS populated?
  3. curl -H "Host: <yourhost>" http://<address> — ingress works?
  4. If curl works but browser doesn’t → hostname/DNS issue → use matching nip.io hostname

What NOT to do

  • Don’t edit /etc/hosts for 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.

Recommended

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 →
Never miss an article