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. .. image:: images/traefik-overview.png :align: center 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 ---------------- .. image:: images/traefik-router.png :align: center La ressource de base pour accéder à un service en https est l'`IngressRoute `_ , qui peut être définie simplement comme ceci : .. code-block:: apiVersion: traefik.io/v1alpha1 kind: IngressRoute metadata: name: mon-ingressroute spec: entryPoints: - websecure routes: - match: Host(`super-app..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 ---------------- .. image:: images/traefik-middlewares.png :align: center 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 ---------------- .. image:: images/traefik-services.png :align: center 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: ``.`` 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 .. code-block:: kubectl create secret generic certificate-exemple-fr --from-file=tls.crt=./mon_cert.pem --from-file=tls.key=./ma_clé.key -n * Créer l'IngressRoute associée à ``exemple.fr`` et indiquer le nom du secret dans la section ``tls.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 type ``CNAME`` ou ``A`` vers le point d'entrée du cluster. Pour cela, contactez votre référent DRI.