
Microk8s comes with an internal loadbalancer: metallb (
https://microk8s.io/docs/addons)
For project status and documentation: https://metallb.universe.tf/
My problem with this addon: It is very easy to install - but i found nearly nothing about the configuration, so that is will work...
The only source was https://opensource.com/article/20/7/homelab-metallb
So here everthing from the beginning:
# microk8s.enable metallb
You have to add an ip range after you hit enter. This should be some ips, which are not in use and which your DHCP should not assign to other devices.
You can check this range afterwards via:
# kubectl describe configmaps -n metallb-system
Name: kube-root-ca.crt
Namespace: metallb-system
Labels: <none>
Annotations: <none>
Data
====
ca.crt:
----
-----BEGIN CERTIFICATE-----
MIIDA..........=
-----END CERTIFICATE-----
Events: <none>
Name: config
Namespace: metallb-system
Labels: <none>
Annotations: <none>
Data
====
config:
----
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.178.230-192.168.178.240
Events: <none>
After this you have to write this yaml to connect your application to the metallb:
apiVersion: v1
kind: Service
metadata:
name: kuard2
namespace: kuard2
spec:
selector:
app: kuard2
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: LoadBalancer
Fairly easy, but if you do not know where to start, this is almost impossible. Next step is to deploy this yaml:
# kubectl apply -f loadbalancer.yaml -n kuard2
To get the loadbalancer ip you have to issue this command:
# kubectl describe service kuard2 -n kuard2
Name: kuard2
Namespace: kuard2
Labels: <none>
Annotations: <none>
Selector: app=kuard2
Type: LoadBalancer
IP Families: <none>
IP: 10.152.183.119
IPs: 10.152.183.119
LoadBalancer Ingress: 192.168.178.230
Port: <unset> 80/TCP
TargetPort: 8080/TCP
NodePort: <unset> 31298/TCP
Endpoints: 10.1.243.220:8080,10.1.243.221:8080
Session Affinity: None
External Traffic Policy: Cluster
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal IPAllocated 6m31s metallb-controller Assigned IP "192.168.178.230"
Normal nodeAssigned 6m31s metallb-speaker announcing from node "ubuntu"
And then your service is reachable with
wget http://192.168.178.240:80 or any browser, which can connect to this ip.