How to access applications running within minikube
There are two major categories of services in Kubernetes:
- NodePort
- LoadBalancer
NodePort access with Minikube
A NodePort service is the most basic way to get external traffic directly to your service. NodePort, as the name implies, opens a specific port, and any traffic that is sent to this port is forwarded to the service.
Getting the NodePort using the service command: We also have a shortcut for fetching the minikube IP and a service’s NodePort:
$ minikube service –url
Example of NodePort
Step - 1: Create a Kubernetes deployment
$ kubectl create deployment hello-minikube1 --image=k8s.gcr.io/echoserver:1.4
Step - 2: Create a Kubernetes service type NodePort
$ kubectl expose deployment hello-minikube1 --type=NodePort --port=8080
Step - 3: Check Node Port
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-minikube1 NodePort 10.100.238.34 <none> 8080:31389/TCP 3s
Step - 4: Run service tunnel
$ minikube service hello-minikube1 --url
Step - 5: To determine the NodePort for your service, you can use a kubectl command like this (note that nodePort begins with lowercase n in JSON output):
$ kubectl get service <service-name> --output='jsonpath="{.spec.ports[0].nodePort}"'
Connect to LoadBalancer services with Minikube
A LoadBalancer service is the standard way to expose a service to the internet. With this method, each service gets its own IP address.
Using minikube tunnel
Services of type LoadBalancer can be exposed via the minikube tunnel command. It must be run in a separate terminal window to keep the LoadBalancer running. Ctrl-C in the terminal can be used to terminate the process at which time the network routes will be cleaned up
minikube tunnel creates a network route on the host to the service using the cluster’s IP address as a gateway. The tunnel command exposes the external IP directly to any program running on the host operating system.
Note: The command requires root rights (sudo) because it creates a network configuration.
Tunnel is used to expose the service from inside of VM where minikube is running to the host machine’s network. Works with LoadBalancer service type.
Example of LoadBalancer with Minikube tunnel
Step 1 - Run the tunnel in a separate terminal
It will ask for a password.
$ minikube tunnel
minikube tunnel runs as a process, creating a network route on the host to the service CIDR of the cluster using the cluster’s IP address as a gateway. The tunnel command exposes the external IP directly to any program running on the host operating system.
tunnel output example
Password:
Status:
machine: minikube
pid: 39087
route: 10.96.0.0/12 -> 192.168.64.194
minikube: Running
services: [hello-minikube]
errors:
minikube: no errors
router: no errors
loadbalancer emulator: no errors
Step 2 - Create a Kubernetes deployment
$ kubectl create deployment hello-minikube1 --image=k8s.gcr.io/echoserver:1.4
Step 3 - Create a Kubernetes service with type LoadBalancer
kubectl expose deployment hello-minikube1 --type=LoadBalancer --port=8080
Step 4 - Check the external IP
$ kubectl get svc
$ kc get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-minikube1 LoadBalancer 10.96.184.178 10.96.184.178 8080:30791/TCP 40s
Note that without minikube tunnel, Kubernetes will show the external IP as “pending”.
Step 5 - Try in your browser
Open in your browser (ensure there is no proxy set)
http://REPLACE_WITH_EXTERNAL_IP:8080
Each service will get its own external IP.
- Installing Jupyter: Get up and running on your computer - November 2, 2024
- An Introduction of SymOps by SymOps.com - October 30, 2024
- Introduction to System Operations (SymOps) - October 30, 2024