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.

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

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.
×