Kennismaking met Traefik v2 Ingress Controller in Kubernetes
Traefik v1 naar Traefik v2
Een Previder PaaS+ Kubernetes cluster kan worden geïnstalleerd met NGINX, Traefik of HAProxy ingress controllers. In deze techblog zullen we ingaan op Traefik.
Op dit moment ondersteunen alle Kubernetes-versies Traefik v1, maar vanaf K8s-versie 1.21.2 zal Traefik v2 worden gebruikt.
Een aantal interne componenten van Traefik zijn opnieuw ontworpen bij de overgang van v1 naar v2. Hieronder bespreken we de belangrijkste componenten.
Geen Frontends en Backends in Traefik v2
De basisconcepten zoals frontend en backend zijn vervangen door een combinatie van routers, services en middleware. Bij Traefik v1 wordt de router beschouwd als de vervanging van de frontend en de service neemt de rol van de backend over. Elke router verwijst naar een service.
Om de flexibiliteit te vergroten bij het aanpassen van de requests voordat ze naar de services worden verzonden, zijn in Traefik v2 middleware-componenten aan de routers gekoppeld. Deze middleware kan aan elkaar gekoppeld worden om aan elke situatie te voldoen. Bovendien kan elke router dan worden gekoppeld aan de gewenste middleware-instantie.
Middleware in Traefik v2
Er zijn meerdere middlewares beschikbaar. Naast het bedienen van traditionele ingangen voor HTTP-verzoeken, maken sommige middleware-entiteiten het mogelijk om de verzoekparameters te wijzigen, de HTTP-headers aan te passen, sommige zijn verantwoordelijk voor redirect-logica, sommige voegen authenticatiemogelijkheden toe, enzovoort.
Voordat het verzoek naar de service wordt verzonden, kan het worden aangepast met middleware(s) die aan een router zijn gekoppeld.
Een paar voorbeelden van middlewares die worden gebruikt bij het routeren van verzoeken:
- stripPrefix - maakt het mogelijk om een voorvoegsel uit het pad te verwijderen. Deze middleware moet worden gebruikt als uw backend het pad "/" bedient, maar extern moet worden blootgesteld met een specifiek voorvoegsel, bijvoorbeeld "/foo". Deze middleware vervangt de frontend.rule.type annotatie in Traefik v1.
http:
middlewares:
test-stripprefix:
stripPrefix:
prefixes:
- "/foo"
- basicAuth wordt gebruikt voor het implementeren van basisautorificatie. Bijvoorbeeld:
http:
middlewares:
test-auth:
basicAuth:
users:
- "user1:$apr1$Kveg6cv0$yJn5mwyfBy7luzZ9Fi1AH0"
- "user2:$apr1$w70ASLDx$1UJmrFL/lVoltjmAz4UDH/"
Deze middleware is een alternatief voor het specificeren van credentials via Kubernetes Secrets en beperkt de toegang tot de services:
En is een vervanging voor de Traefik v1 annotatie:
traefik.ingress.kubernetes.io/auth-type: "basic"
Meerdere Middlewares tegelijkertijd in Traefik v2
Het gebruik van Middleware (evenals andere routeringscomponenten) is optioneel. De routeringslogica kan ofwel meerdere middlewares gebruiken, of helemaal geen. Bijvoorbeeld, in de onderstaande Ingress behandelt één middleware authenticatiedoeleinden, en een andere verwijdert een voorvoegsel van de brondirectory.
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: monitoring-prometheus-alertmanager
namespace: kubernetes-monitoring
annotations:
kubernetes.io/ingress.class: traefik
traefik.ingress.kubernetes.io/router.middlewares:
kubernetes-monitoring-alert-auth@kubernetescrd,
kubernetes-monitoring-alert-prefix@kubernetescrd
spec:
rules:
- http:
paths:
- path: /prometheus-alert
pathType: Prefix
backend:
service:
name: monitoring-prometheus-alertmanager
port:
number: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: alert-auth
namespace: kubernetes-monitoring
spec:
basicAuth:
secret: monitoring-prometheus
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: alert-prefix
namespace: kubernetes-monitoring
spec:
stripPrefix:
prefixes:
- /prometheus-alert
Leveranciers in Traefik v2
Traefik v2 introduceert het concept van een leverancier. Dit is een infrastructuurcomponent die informatie verstrekt over routering aan Traefik. Zodra Traefik een wijziging detecteert, worden de routes automatisch bijgewerkt. De Kubernetes Ingress Traefik provider biedt de normale functionaliteit van een Kubernetes Ingress-controller.
Naast de standaard Ingress ondersteunt PaaS+ nu ook een IngressRoute, wat de implementatie is van een Traefik HTTP-router in de vorm van een aangepaste brondefinitie (CRD). Deze implementatie verbetert de toegankelijkheid van K8S-clusters zonder dat er annotaties geschreven hoeven te worden. Je kunt vertrouwd raken met een voorbeeld van hoe je IngressRoute kunt gebruiken in onze K8s-opslagplaats (repository).
Services op Traefik v2
Traefik v2 ondersteunt naast alle andere functies specifieke services die verantwoordelijk zijn voor het configureren van hoe de daadwerkelijke Kubernetes-services bereikt moeten worden die uiteindelijk de inkomende verzoeken zullen afhandelen.
http:
services:
my-service:
loadBalancer:
servers:
- url: "http://<private-ip-server-1>:<private-port-server-1>/"
- url: "http://<private-ip-server-2>:<private-port-server-2>/"
Daarnaast biedt Traefik een reeks interne services. Een voorbeeld daarvan is te vinden in het configuratiebestand van de PaaS+ KS-opslagplaats, waar toegang wordt geboden tot een ingebouwde Traefik v2-dashboarddienst via IngressRoute.
Bekijk zelf de wijzigingen binnen Traefik Ingress Controller
Dit zijn slechts enkele van de belangrijkste wijzigingen in de nieuwe Traefik v2-implementatie binnen PaaS+ Kubernetes v1.21.2+ Je kunt de volledige lijst met wijzigingen vinden in de officiële documentatie met betrekking tot de overgang van Traefik v1 naar v2.
Begin nu zelf met een Kubernetes-service die automatisch kan worden ingezet, geschaald en bijgewerkt met behulp van het Previder PaaS+. Probeer 30 dagen gratis op Previder PaaS! Of probeer Kubernetes as a Service.