I would like to do two things with MicroK8s:
- Route the host machine (Ubuntu 18.04) ports 80/443 to Microk8s
- Use something like the simple ingress defined in the kubernetes.io docs
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
When using a LoadBalancer (aka metallb) there is an important step missing in almost all docs:
The ingress-controller needs to be exposed to the metallb LoadBalancer.
This can be done by a yaml as well but its way easier to use the cli.
After days of googling i finally came across this tutorial video that opened my eyes.
https://www.youtube.com/watch?v=xYiYIjlAgHY
If I understood you correctly, there are a few ways you might be looking at.
One would be MetalLB which you already mentioned.
You can read the detailed implementation A pure software solution: MetalLB
Another way would be Over a NodePort Service
You can also use host network
You have to also remember that if you edit the configuration inside the
POD
, it will be gone if the Pod is restarted or it crashes.I hope this helps you to determine which way to go with your idea.