Aller au contenu

Mise en place de Traefik ingress

Comment mettre en place un ingress controller avec Traefik et un frontal load balancer HAPROXY.

Cet article est une continuité de l'article précédent: setup_k8s

Présentation

Le fournisseur Traefik Kubernetes Ingress est un contrôleur Kubernetes Ingress, c'est-à-dire qu'il gère l'accès aux services du cluster en prenant en charge la spécification Ingress.

traefik

Architecture

Voici l'architecture qu'on va mettre en place.

architecture

Configuration HAProxy

Installation des paquets

sudo apt update
sudo apt install -y haproxy

configuration HAProxy

frontend stats
        bind *:8080
        stats enable
        stats hide-version
        stats uri /
        stats realm Haproxy\ Statistics
        stats auth haproxy:SUPERMOTDEPASSE
        stats refresh 10s

Permet d'avoir des statistique.

Ajouter le contenu suivant:

# K8S ingress
listen k8s_ingress
  bind *:80
  bind *:443

  mode tcp
  balance leastconn
  server k8s-worker-00 1X.X.X.90

On déclare l'IP que MetalLB attribue à notre ingress: metallb

Pour aller plus loin...

Tu pourrais avoir un second haproxy avec KeepAlived afin d'avoir un load balancer de secours.

Article: Plannification d'écriture...

Configuration ingress - Traefik

Installation HELM

On va créer notrer ingress avec HELM. On aura donc besoin de HELM.

curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] 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

Installer Traefik Kubernetes Ingress Controller

On récupère avec HELM les manifests :

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

On crée le namespace pour Traefik :

kubectl create ns traefik-ingress

Crée le fichier traefik-values.yaml, pour créer notre "DaemonSet" :

deployment:
  kind: DaemonSet
providers:
  kubernetesCRD:
    enabled: true
service:
  type: LoadBalancer
ingressRoute:
  dashboard:
    enabled: false
Et on fait l'installation avec HELM :

helm install --namespace=traefik-ingress traefik traefik/traefik --values=./traefik-values.yaml

Vérification

Les Pods sont en vies ?

kubectl -n traefik-ingress get pod

Sortie

cloud@control-00:~$ kubectl -n traefik-ingress get pod
NAME            READY   STATUS    RESTARTS   AGE
traefik-9kg6b   1/1     Running   0          52m
traefik-htwrh   1/1     Running   0          52m
traefik-mmmsx   1/1     Running   0          52m

Est-ce que le service de type LoadBalancer dispose d'une EXTERNAL-IP ?

kubectl -n traefik-ingress get svc

Sortie :

NAME      TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)                      AGE
traefik   LoadBalancer   10.102.5.171   10.10.100.90   80:30206/TCP,443:30182/TCP   54m

Chouette tout tourne !

Exposer un service (basique)

Crée ton petit pods :

kubectl run nginx --image=nginx
kubectl expose pod nginx --port=80

Crée le fichier mon-premier-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ing-traefik
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx
            port:
              number: 80
kubectl apply -f mon-premier-ingress.yaml

Utilise le EXTERNAL_IP du LoadBalancer (en haut) pour vérifier que ça fonctionne.

Pour aller plus loin...

Lis la documentation pour utiliser HTTPS, du Cerbot pour créer à la volée des certificats Lets Encrypt. Ou dynamiquement ajouter des entrées DNS dans CloudFlare.

Bref pour une prochaine fois.

×