4 min read | by Jordi Prats
minikube has many built-in applications and services that may be easily deployed by just enabling them. We can get a list using minikube addons list
This is the list we would get on minikube v1.15.1:
$ minikube addons list
|-----------------------------|----------|--------------|
| ADDON NAME | PROFILE | STATUS |
|-----------------------------|----------|--------------|
| ambassador | minikube | disabled |
| csi-hostpath-driver | minikube | disabled |
| dashboard | minikube | disabled |
| default-storageclass | minikube | enabled ✅ |
| efk | minikube | disabled |
| freshpod | minikube | disabled |
| gcp-auth | minikube | disabled |
| gvisor | minikube | disabled |
| helm-tiller | minikube | disabled |
| ingress | minikube | enabled ✅ |
| ingress-dns | minikube | disabled |
| istio | minikube | disabled |
| istio-provisioner | minikube | disabled |
| kubevirt | minikube | disabled |
| logviewer | minikube | disabled |
| metallb | minikube | disabled |
| metrics-server | minikube | disabled |
| nvidia-driver-installer | minikube | disabled |
| nvidia-gpu-device-plugin | minikube | disabled |
| olm | minikube | disabled |
| pod-security-policy | minikube | disabled |
| registry | minikube | disabled |
| registry-aliases | minikube | disabled |
| registry-creds | minikube | disabled |
| storage-provisioner | minikube | enabled ✅ |
| storage-provisioner-gluster | minikube | disabled |
| volumesnapshots | minikube | disabled |
|-----------------------------|----------|--------------|
For example, to enable a nginx ingress controller, it is as easy as:
$ minikube addons enable ingress
🔎 Verifying ingress addon...
🌟 The 'ingress' addon is enabled
We will be able to see that it creates a deployment in the kube-system namespace:
$ kubectl get deploy -n kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
coredns 1/1 1 1 23d
ingress-nginx-controller 1/1 1 1 7m47s
metrics-server 1/1 1 1 23d
We can test it by creating an Ingress for an existing service, for example, for jenkins:
$ kubectl get svc -n jenkins
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
jenkins ClusterIP 10.104.250.250 <none> 8080/TCP 20d
jenkins-agent ClusterIP 10.103.0.136 <none> 50000/TCP 20d
The ingress yaml would look like follows:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: jenkins
namespace: jenkins
spec:
rules:
- host: jenkins.minikube
http:
paths:
- backend:
serviceName: jenkins
servicePort: 8080
As usual, we just need to apply it using kubectl apply
$ kubectl apply -f ingress_jenkins.yaml
ingress.extensions/jenkins created
To be able to connect we will have to get minikube IP to connect to. This IP is shown for each ingress we have configured:
$ kubectl get ingress -n jenkins
NAME CLASS HOSTS ADDRESS PORTS AGE
jenkins <none> jenkins.minikube 192.168.49.2 80 2m30s
Now we can either add this IP to the /etc/hosts file or, just for testing pruposes, use the proxy option with curl:
$ curl -Ix 192.168.49.2:80 jenkins.minikube
HTTP/1.1 403 Forbidden
Date: Wed, 23 Dec 2020 16:05:12 GMT
Content-Type: text/html;charset=utf-8
Content-Length: 793
Connection: keep-alive
X-Content-Type-Options: nosniff
Set-Cookie: JSESSIONID.54dc3858=node01465y36cnwkvv16ydy2lc4w3623345.node0; Path=/; HttpOnly
Expires: Thu, 01 Jan 1970 00:00:00 GMT
X-Hudson: 1.395
X-Jenkins: 2.263.1
X-Jenkins-Session: 6f93b017
X-Hudson-CLI-Port: 50000
X-Jenkins-CLI-Port: 50000
X-Jenkins-CLI2-Port: 50000
X-You-Are-Authenticated-As: anonymous
X-You-Are-In-Group-Disabled: JENKINS-39402: use -Dhudson.security.AccessDeniedException2.REPORT_GROUP_HEADERS=true or use /whoAmI to diagnose
X-Required-Permission: hudson.model.Hudson.Read
X-Permission-Implied-By: hudson.security.Permission.GenericRead
X-Permission-Implied-By: hudson.model.Hudson.Administer
Disable it it's just as easy as enabling it:
$ minikube addons disable ingress
🌑 "The 'ingress' addon is disabled
Posted on 30/12/2020