Home > Back-end >  Can you expose your local minikube cluster to be accessible from a browser without editing etc/hosts
Can you expose your local minikube cluster to be accessible from a browser without editing etc/hosts

Time:06-12

I am following this tutorial for how to expose your local cluster for external access. I only need to be able to check my application from browser, without exposing the app to the Internet.

> kubectl get service web
NAME   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
web    NodePort   10.98.217.114   <none>        8080:32718/TCP   10m

> minikube service web --url
http://192.168.49.2:32718

Followed the guide until the etc/hosts part. I set up the ingress:

> kubectl get ingress
NAME              CLASS   HOSTS              ADDRESS        PORTS   AGE
example-ingress   nginx   hello-world.info   192.168.49.2   80      96s

For various reasons I cannot edit the etc/hosts file on my Windows machine, it says another process is using it. However, neither 192.168.49.2 nor http://192.168.49.2:32718 in the browser returns anything, as well as curl 192.168.49.2 (and with :32718). I don't think that should be expected, as the hosts file merely forwards hello-world.info to the IP, I should be able to access my app with just the IP. What am I missing here?

Kubectl v1.24.1 (kustomize v4.5.4, server v1.23.3), Minikube v1.25.2, Windows 10, Minikube with the Docker driver.

CodePudding user response:

Okay my solution to the problem was this: port-forward to the ingress-controller pod (not to the ingress itself object, because it doesn't seem to be possible)

Sample ingress file for a service named "web":

# example-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web
                port:
                  number: 8080

Run it with

kubectl apply -f example-ingress.yaml

Check that it's running

> kubectl get ingress
NAME              CLASS   HOSTS   ADDRESS        PORTS   AGE
example-ingress   nginx   *       192.168.49.2   80      23h

If you ssh into minikube (minikube ssh), you can curl 192.168.49.2:80 and it returns the proper output.

Output nginx-controller pods:

> kubectl get pod -n ingress-nginx
NAME                                       READY   STATUS      RESTARTS      
AGE
ingress-nginx-admission-create-56gbc       0/1     Completed   0             
46h
ingress-nginx-admission-patch-fqf92        0/1     Completed   0             
46h
ingress-nginx-controller-cc8496874-7znt5   1/1     Running     4 (39m ago)   
46h

Forward port to it:

> kubectl port-forward ingress-nginx-controller-cc8496874-7znt5 8080:80 -n ingress-nginx

Then check out localhost:8080. If it returns nginx 404, then your Ingress.yaml setup is probably wrong. Otherwise works for me.

  • Related