Accéder aux applications via Traefik¶
L’ingress manager en place sur KNS est Traefik, il permet de configurer l’accès depuis l’extérieur aux applications hébergées sur le cluster via des ressources dédiées.
A noter que si les points d’entrée TCP et UDP sont supportés, ils doivent faire l’objet d’une demande spécifique auprès de nos équipes.
Actuellement seul l’entrypoint websecure
est disponible pour le trafic https (les requêtes http sont redirigées automatiquement).
IngressRoute¶
La ressource de base pour accéder à un service en https est l”IngressRoute , qui peut être définie simplement comme ceci :
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: mon-ingressroute
spec:
entryPoints:
- websecure
routes:
- match: Host(`super-app.<domaine>.fr`) && Path(`/test`)
kind: Rule
services:
- name: mon-service
port: 8080
On notera que l’exemple ci-dessus utilise l’entrée wildcard *.kns.dri.fr* disponible sur le cluster, qui permet de créer des entrées DNS disponibles instantanément.
Une référence complète des champs disponibles peut être trouvée là.
A noter que le routage peut être effectué de manière assez fine grâce aux nombreuses règles disponibles.
Middlewares¶
De nombreux Middlewares Traefik sont disponibles afin de fournir les fonctionnalités de base d’un reverse-proxy, comme par exemple :
mettre en place une whitelist d’ip
mettre en place une BasicAuth
utiliser des pages d’erreur custom
mettre en place une redirection
Et bien d’autres encore, qui sont disponibles ici.
Traefik Services¶
Une abstraction optionnelle est fournie par Traefik via les Traefik Services, qui permettent de définir un service chapeau redirigeant ensuite sur plusieurs services Kubernetes.
Cela donne accès aux fonctionnalités suivantes :
Canary deployments via un loadbalancing pondéré
Shadow Deployment via le
mirroring
Communication au sein du namespace¶
Pour les services déployés au sein du même namespace, il est recommandé de ne pas passer par une IngressRoute mais d’adresser le service directement afin d’éviter un intermédiaire et de surcharger inutilement l’IngressManager.
Pour ce faire, des entrées DNS sont disponibles par défaut pour tous les pods déployés: <nom du service>.<namespace>
Urls personnalisées¶
Pour utiliser non pas une entrée DNS inclue dans le wildcard du cluster mais une entrée personnalisée (exemple: exemple.fr
), trois étapes sont nécessaires :
Créer un secret portant le certificat associé à l’url
kubectl create secret generic certificate-exemple-fr --from-file=tls.crt=./mon_cert.pem --from-file=tls.key=./ma_clé.key -n <mon namespace>
Créer l’IngressRoute associée à
exemple.fr
et indiquer le nom du secret dans la sectiontls.secretName
(cf https://doc.traefik.io/traefik/routing/providers/kubernetes-crd/#kind-ingressroute)Modifier l’entrée DNS de votre domaine
exemple.fr
pour faire une redirection de typeCNAME
ouA
vers le point d’entrée du cluster. Pour cela, contactez votre référent DRI.