I would like to do two things with MicroK8s:
My end goal is to create a single node Kubernetes cluster that sits on the Ubuntu host, then using ingress to route different domains to their respective pods inside the service.
I've been attempting to do this with Microk8s for the past couple of days but can't wrap my head around it.
The best I've gotten so far is using MetalLB to create a load balancer. But this required me to use a free IP address available on my local network rather than the host machines IP address.
I've also enabled the default-http-backend
and attempted to export and edit these config files with no success.
As an example this will work on Minikube
once the ingress add on is enabled, This example shows the base Nginx server image at port 80 on the cluster IP:
# ingress-service.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
# - host: nginx.ioo
- http:
paths:
- path: /
backend:
serviceName: nginx-cluster-ip-service
servicePort: 80
# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
component: nginx
template:
metadata:
labels:
component: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
# nginx-cluster-ip-service
apiVersion: v1
kind: Service
metadata:
name: nginx-cluster-ip-service
spec:
type: ClusterIP
selector:
component: nginx
ports:
- port: 80
targetPort: 80
Update the annotation to be kubernetes.io/ingress.class: public
For MicroK8s v1.21, running
microk8s enable ingress
Will create a DaemonSet
called nginx-ingress-microk8s-controller
in the ingress
namespace.
If you inspect that, there is a flag to set the ingress class:
- args:
... omitted ...
- --ingress-class=public
... omitted ...
Therefore in order to work with most examples online, you need to either
--ingress-class=public
argument so it defaults to nginx
kubernetes.io/ingress.class: nginx
to be kubernetes.io/ingress.class: public