Routing, Ingress en Let's Encrypt

Nu je een statische site, webapplicatie of beide hebt draaien. Is het wel fijn om deze bereikbaar te hebben met een Let's Encrypt certificaat. In deze handleiding gaan we dit voor elkaar proberen te krijgen. Dit doen we door:

  • Helm te installeren
  • Traefik installeren
  • Traefik gebruiken

Traefik is een Ingress-controller, deze verwerkt aanvragen als een soort router. Hier zit ook Let's Encrypt bij in, en is uit te bereiden met een aantal interessante opties. Een alternatief is de veelgebruikte Nginx Ingress-controller.

Helm

Helm is een package manager voor Kubernetes zoals apt, yum, chocolatey, brew voor de verschillende besturingssystemen. Kijk hier op voor de officiële documentatie of gebruik het tabblad voor jou OS:

Linux
macOS
Windows
Debian / Ubuntu
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
brew install helm
choco install kubernetes-helm
curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
sudo apt-get install apt-transport-https --yes
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

Traefik installeren

Om Traefik te installeren hebben we een aantal zaken nodig:

  • een secret voor de SSL-certificaten
  • de Traefik-helm repository
  • een values.yaml-bestand met de Traefik instellingen
  • installeren maar!

Secret

Het secret is een leeg object waar Traefik certificaten en de aanvraag status in bewaart. Installeer het met met kubectl apply -f secret.yaml

Helm repository

Ook Helm gebruikt repositories voor haar pakketten. Om deze te installeren voor je de volgende commando's uit:

helm repo add traefik https://helm.traefik.io/traefik
helm repo update

Traefik configuratie

Het values.yaml bestand is iets uitgebreider, hierin staan alle instellingen voor de Traefik applicatie. Alle standaardwaarden van een Helm installatie zitten in het values.yaml bestand van het pakket. Hier vind je alle standaard waarden van Traefik. Met een eigen values.yaml bestand overschrijven we deze waarden. Dit wordt gegenereed met het volgende script (op linux). Of kopier de regels van providers: tot en met de regel voor EOF in een nieuw bestand (values.yaml) en pas de waarden $K8S_NAMESPACE en $LETSENCRYPT_EMAIL aan. Dit script...

  • laat je de verschillende Traefik input gebruiken
  • verwijst naar het net aangemaakte secret
  • configureerd Let's Encrypt
  • zorgt ervoor dat het op het shared cluster werkt
  • configureerd de poorten voor de LoadBalancer

Traefik installeren

Dit is in onze demo omgeving niet meer dan: helm upgrade --install traefik traefik/traefik -f values.yaml --skip-crds
De Custom Resource Definitions hebben wij al voor je geïnstalleerd, hier heb je geen rechten toe.

Voor een eigen cluster gebruik je: helm upgrade --install traefik traefik/traefik -f values.yaml

Traefik gebruiken

Traefik heeft een dashboard waarbij je alle routes en regels kunt zien, deze is als volgt te bereiken op http://localhost:9000/dashboard/

kubectl port-forward deployment/traefik 9000:9000

Om het IP van Traefik te vinden kun je dit commando uitvoeren:

kubectl get services

Naar dit IP-adres kun je domeinnamen laten verwijzen, in Traefik kun je regels aanmaken die de domeinnaam aan de goede service koppelt. Wanneer je dit gedaan hebt kunnen we de route(s) aanmaken vervang example.com met jouw domeinnaam: Bovenstaand voorbeeld werkt alleen op entrypoint web, in values.yaml hebben we ook entrypoint websecure gedefinieerd. Deze poort gebruikt in deze configuratie standaard Let's Encrypt certificaten. Om een verbinding naar dezelfde service te creëren, maken we het volgende aan (zoek de verschillen): Deze regels kun je dan op je Traefik dashboard actief zien, en als er problemen zijn laat deze dit ook weten. Ook kun je kubectl get ingressroutes uitvoeren om hier een lijst van op te vragen. Je kunt standaard redirect naar websecure inschakelen in het values.yaml bestand, door bij ports de regels met web: en redirectTo: websecure te activeren. Wil je de controle per hostname? Dan kun je Traefik Middleware gebruiken. Deze middleware biedt extra functionaliteit, zo kun je ook bijvoorbeeld HTTP Authenticatie hiermee aanzetten en nog veel meer. De redirect stel je als volgt in: Als het goed is heb je nu wat kennis over Kubernetes om een applicatie online te krijgen. Ga lekker spelen en mocht je een overzichtje nodig hebben met wat kubectl commando's kijk dan even op de cheatsheet pagina!

Kubectl Cheatsheet