De standaard installatie van K3s installeert een aantal standaard componenten en één daarvan is de Traefik Ingress Controller.
Het manifest bestand voor Traefik is te vinden in /var/lib/rancher/k3s/server/manifests/traefik.yaml
en wordt aangemaakt iedere keer als de K3s server wordt herstart.
Een voordeel van deze standaard installatie van Traefik als load-balancer is dat Kubernetes in een ‘on-premise‘ omgeving geen load-balancer heeft, in tegenstelling tot Kubernetes in een cloud-provider omgeving. Traefik voorziet hierin en maakt het mogelijk om in de ‘on-premise’ omgeving toch een load-balancer service te gebruiken.
De manifest file voor Traefik zorgt ervoor dat een Daemonset wordt aangemaakt die pods creëert op elke node. Deze pods fungeren dan als proxy voor services die aangeroepen worden.
$ kubectl get pods -n kube-system -l app=svclb-traefik
NAME READY STATUS RESTARTS AGE
svclb-traefik-4pp5b 2/2 Running 0 52d
svclb-traefik-4zdsl 2/2 Running 0 52d
svclb-traefik-9wqz9 2/2 Running 0 52d
Indien de node een extern IP-adres heeft dan gebruikt de Traefik-service dit IP-adres.
$ kubectl get svc traefik -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
traefik LoadBalancer 10.43.14.215 192.168.178.50,192.168.178.51,192.168.178.52 80:32606/TCP,443:32006/TCP 52d
Voorbeeld
Er is een service voor een simple-nginx pod en deze dient nu via een Ingress toegankelijk gemaakt te worden voor de buitenwereld.
$ kubectl get svc simple-nginx -n simple-nginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE simple-nginx ClusterIP 10.43.122.198 80:31426/TCP 52d
Zoals je ziet is het type service hier ‘ClusterIP’ en niet ‘LoadBalancer’. Echter, op het moment dat een Ingress aangemaakt wordt:
$ kubectl get ingress simple-nginx-ingress -n simple-nginx -o yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: simple-nginx-ingress namespace: simple-nginx spec: rules: - host: my.simple-nginx.nl http: paths: backend: service: name: simple-nginx port: number: 80 path: / pathType: ImplementationSpecific
zal de nginx-ingress controller de ingress ‘oppakken’ en het verkeer proxy’en waardoor de simple-nginx bereikt kan worden.
$ kubectl -n simple-nginx get ingress simple-nginx-ingress NAME CLASS HOSTS ADDRESS PORTS AGE simple-nginx-ingress <none> my.simple-nginx.nl 192.168.178.50,192.168.178.51,192.168.178.52 80 36d