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