Traefik is een populaire open-source reverse proxy en load balancer, ontworpen voor microservices en containerized applicaties. Traefik kan automatisch de services ontdekken die in een Kubernetes-cluster draaien en het verkeer naar deze services routeren met behulp van verschillende load balancing-algoritmes.
Traefik opereert voor andere services binnen je cluster. Met Traefik kun je meerdere applicaties op een Kubernetes-cluster hosten waarvan het verkeer verloopt via Traefik. Traefik kan dan als één enkele loadbalancer functioneren voor al deze applicaties en bovendien Let's Encrypt SSL-certificaten verstrekken.
In deze handleiding laten we zien hoe je Traefik installeert en gebruikt.
Voor deze handleiding heb je nodig:
- De Helm-package manager. Installeer Helm via onze Helm installatiehandleiding als je dat nog niet gedaan hebt.
- Een TransIP API private key. Schakel de API in en genereer een Key Pair zoals beschreven in deze handleiding.
Traefik installeren
Stap 1
Voeg de officiele Traefik repository toe en update je Helm-repositories om die te kunnen gebruiken:
helm repo add traefik https://helm.traefik.io/traefik helm repo update
Stap 2
Traefik kan Let's Encrypt certificaten genereren voor applicaties die via Traefik communiceren. In deze handleiding gaan we ervan uit dat je dit ook voor jouw use case wil gebruiken. Hiervoor gebruik je een acme dns challenge provider. Via onze API ondersteunen wij deze optie. Let wel dat de provider die je kiest deze functionaliteit moet ondersteunen en dat de domeinen die je gebruikt zijn geregistreerd bij die provider in het account dat je voor deze handleiding gebruikt.
Maak een directory aan waarin je je TransIP API key gaat opslaan, bijvoorbeeld:
mkdir transip
Maak vervolgens een bestand in de zojuist aangemaakte directory met daarin een private key van jouw account voor de TransIP API, bijvoorbeeld:
cat << EOF > transip/transip.key
-----BEGIN PRIVATE KEY-----
MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQDKoaYJtbVnJw58
PYGH8WIJ7ZjWd2lke0IbMV+dNGs=
-----END PRIVATE KEY-----
EOF
In dit voorbeeld is maar een klein fragment van een private key opgenomen. Jouw private key zal een stuk langer zijn.
Stap 3
Maak een namespace aan voor Traefik binnen je cluster:
kubectl create ns traefik
Stap 4
Genereer een secret op basis van jouw API Private Key die door Traefik gebruikt kan worden om met de TransIP API te communiceren. Vervang hier eventueel de volgende gegevens:
- -n traefik: Gebruik de naam van de namespace die je in stap 3 hebt aangemaakt.
- transip/transip.key: Verander naar de directory en bestandsnaam die je in stap 2 hebt aangemaakt.
kubectl create -n traefik secret generic transip-key --from-file transip/transip.key
Stap 5
Voor de installatie van Traefik gebruiken we in de volgende stap de officiële Helm Chart. Daarnaast maken we een paar aanpassingen; maak hiervoor een .yaml bestand aan, bijvoorbeeld:
nano traefik.yaml
Geef het bestand de inhoud hieronder, waarbij je twee velden aanpast:
- jouwaccount: Verander jouwaccount naar de naam van jouw TransIP-account.
- /transip/transip.key: Verander (indien nodig) naar de directory en bestandsnaam die je in stap 2 hebt aangemaakt.
additionalArguments:
- "--certificatesresolvers.myresolver.acme.dnschallenge.provider=transip"
- "--certificatesresolvers.myresolver.acme.dnschallenge.delaybeforecheck=120"
- "--certificatesresolvers.myresolver.acme.storage=/data/acme.json"
env:
- name: TRANSIP_ACCOUNT_NAME
value: jouwaccount
- name: TRANSIP_PRIVATE_KEY_PATH
value: /transip/transip.key
volumes:
- name: transip-key
mountPath: "/transip"
type: secret
rbac:
enabled: true
ports:
websecure:
tls:
enabled: true
dashboard:
enable: true
ingressRoute: false
podAnnotations:
prometheus.io/port: "8082"
prometheus.io/scrape: "true"
providers:
kubernetesIngress:
publishedService:
enabled: true
priorityClassName: "system-cluster-critical"
image:
name: "rancher/library-traefik"
tolerations:
- key: "CriticalAddonsOnly"
operator: "Exists"
- key: "node-role.kubernetes.io/control-plane"
operator: "Exists"
effect: "NoSchedule"
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"
Stap 6
Installeer de Traefik Helm Chart met het commando hieronder.
helm install -f traefik.yaml traefik traefik/traefik -n traefik
- helm install: Installeert de Helm Chart.
- -f traefik.yaml: Het bestand uit stap 5 waarmee we de installatie aanpassen.
- traefik: De naam van de Helm 'release', te controleren met het commando 'helm list'.
- traefik/traefik: Respectievelijk de naam van de repository en te installeren Helm Chart.
- -n traefik: De namespace waarin de Helm release wordt geïnstalleerd, zie stap 3.
De Traefik dashboard
Traefik komt met een webinterface waarmee je inzage krijgt in de status van je Kubernetes-cluster en het verkeer dat door je cluster verwerkt wordt. Het toont informatie over de routers en services die gebruikt worden om verkeer te verwerken en de gebruikte loadbalancing algoritmes. Het dashboard geeft je ook de mogelijkheid om logs en metrics te bekijken die door Traefik gegenereerd worden. Het dashboard is dus een handige tool voor het monitoren en troubleshooten van Traefik.
Om gebruik te maken van het Traefik dashboard gebuik je het volgende commando:
kubectl port-forward pod/traefik-6598fc985c-tg748 9000:9000 -n traefik
Vervang traefik aan het eind door de namespace waar Traefik zich in bevindt en traefik-6598f985-tg748 door de naam van de Traefik pod. Beide kun je controleren met respectievelijk de volgende commando's:
kubectl get ns
kubectl get pods -n traefik
Je kunt nu de Traefik dashboard bekijken in een browser vanaf de computer waarop je het eerste commando hebt uitgevoerd op het adres: http://127.0.0.1:9000/dashboard/