Traefik
Qu’est-ce que Traefik ?
Traefik est un reverse proxy et un load balancer moderne qui prend en charge les services de conteneurs.
Il est conçu pour fonctionner avec des conteneurs Docker, mais il peut également être utilisé avec des conteneurs non-Docker.
Traefik est un logiciel open source qui fournit un moyen simple et efficace de configurer un serveur proxy inverse pour les applications conteneurisées.
Configuration Traefik
Nous avons décidé d’utiliser helm pour déployer Traefik sur notre cluster Kubernetes et non avec la methodologie gitops car dans ce cas concret, nous avions besoin de plus de flexibilité pour la configuration de Traefik.
Installation de Traefik
helm repo add traefik https://helm.traefik.io/traefik
helm repo update
helm install traefik traefik/traefik --namespace traefikUne fois cela fait, il est possible de verifier l’installation de Traefik en utilisant la commande suivante:
kubectl get pods -n traefikVoici ce que cela devrait donner:
traefik on helm-version [?]
❯ k get pod -n traefik
NAME READY STATUS RESTARTS AGE
traefik-7d9b646484-vwhkk 1/1 Running 0 24hIl est aussi possible de regarder si le repo helm s’est correctement déployé.
helm status Voici ce que cela devrait donner:
traefik on helm-version [?]
❯ helm status traefik -n traefik
NAME: traefik
LAST DEPLOYED: Tue Jun 18 10:38:58 2024
NAMESPACE: traefik
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Traefik Proxy v3.0.2 has been deployed successfully on traefik namespace !
🚨 When enabling persistence for certificates, permissions on acme.json can be
lost when Traefik restarts. You can ensure correct permissions with an
initContainer. See https://github.com/traefik/traefik-helm-chart/blob/master/EXAMPLES.md#
use-traefik-native-lets-encrypt-integration-without-cert-manager
for more info. 🚨Configuration de Traefik
Pour configurer Traefik, il faut override le fichier values.yaml de Traefik. Voici notre fichier traefik-values.yaml:
additionalArguments:
# Pour configurer le certificatesresolvers
#
# DNS Challenge
# ---
- --certificatesresolvers.ovh.acme.dnschallenge.provider=ovh
- --certificatesresolvers.ovh.acme.email=matthieu.daniel.thomas.2@gmail.com
- --certificatesresolvers.ovh.acme.dnschallenge.resolvers=213.251.188.146,213.251.128.146
- --certificatesresolvers.ovh.acme.storage=/ssl-certs/acme-ovh.json
## Enable debug log for loki
logs:
general:
level: DEBUG
## expose entrypoints
ports:
web:
redirectTo:
port: websecure
websecure:
tls:
enabled: true
certResolver: ovh
env:
#
# DNS Challenge
# ---
## Authentification OVH
- name: OVH_ENDPOINT
valueFrom:
secretKeyRef:
key: OVH_ENDPOINT
name: ovh-credentials
- name: OVH_APPLICATION_KEY
valueFrom:
secretKeyRef:
key: OVH_APPLICATION_KEY
name: ovh-credentials
- name: OVH_APPLICATION_SECRET
valueFrom:
secretKeyRef:
key: OVH_APPLICATION_SECRET
name: ovh-credentials
- name: OVH_CONSUMER_KEY
valueFrom:
secretKeyRef:
key: OVH_CONSUMER_KEY
name: ovh-credentials
## Ingress custom pour le dashboard
ingressRoute:
dashboard:
enabled: true
# Stocakge des ACME
persistence:
enabled: true
name: ssl-certs
size: 1Gi
path: /ssl-certs
storageClass: local-path
## Patch traefik pour les permissions
deployment:
initContainers:
# issue: https://github.com/containous/traefik/issues/6972
- name: volume-permissions
image: busybox:1.36.1
command: ["sh", "-c", "touch /ssl-certs/acme.json && chmod
-v 600 /ssl-certs/acme.json"]
volumeMounts:
- name: ssl-certs
mountPath: /ssl-certs
# Mettre traefik en ingress controller par défaut
ingressClass:
enabled: true
isDefaultClass: trueEnsuite elle doit être configurée pour faire un challenge à OVH afin de valider le certificat SSL. Pour cela nous devons configurer des secrets dans le namespace traefik.
Exemple du fichier de secrets :
apiVersion: v1
kind: Secret
metadata:
name: ovh-credentials
namespace: traefik
type: Opaque
stringData:
OVH_ENDPOINT: ovh-eu
OVH_APPLICATION_KEY: ********
OVH_APPLICATION_SECRET: 4***************
OVH_CONSUMER_KEY: ae3**************
OVH_CLIENT_ID: ef******
OVH_CLIENT_SECRET: da*******Voici un exemple de certificat :
