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.

../_images/traefik-overview.png

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

../_images/traefik-router.png

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 .

A noter que le routage peut être effectué de manière assez fine grâce aux nombreuses règles disponibles.

Middlewares

../_images/traefik-middlewares.png

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

../_images/traefik-services.png

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>