Ce document présente la découverte des services basée sur le DNS de Kubernetes, et son utilisation avec Kf.
Quand utiliser la découverte des services Kubernetes avec Kf
La découverte des services Kubernetes peut être utilisée par les applications qui doivent localiser les services externes de façon cohérente, indépendamment de l'endroit où l'application est déployée. Par exemple, une équipe peut souhaiter utiliser dans sa configuration un URI commun qui pointe toujours vers la passerelle SMTP locale, afin de dissocier le code de l'environnement dans lequel il est exécuté.
La découverte des services aide les équipes en charge des applications de différentes manières :
- Elle réduit la quantité de configurations par environnement.
- Elle dissocie les applications client et serveur.
- Elle autorise le transfert des applications vers de nouveaux environnements.
Vous pouvez utiliser la découverte des services Kubernetes dans les cas suivants :
- Les applications utilisent les configurations DNS de leur conteneur pour résoudre les hôtes.
- Les applications sont déployées avec leurs services externes dans le même cluster ou espace de noms Kubernetes.
- Les services externes possèdent un service Kubernetes associé. Kf crée ces services pour chaque application.
- Les règles de réseau Kubernetes autorisent le trafic entre une application et le service Kubernetes avec lequel elle doit communiquer. Kf crée ces règles dans chaque espace Kf.
N'utilisez pas la découverte des services Kubernetes dans les cas suivants :
- Les applications doivent basculer entre plusieurs clusters.
- Vous remplacez le résolveur DNS utilisé par votre application.
- Les applications nécessitent des types spécifiques d'équilibrage de charge.
Fonctionnement de la découverte des services Kubernetes
La découverte des services Kubernetes fonctionne en modifiant la configuration DNS des conteneurs exécutés sur un nœud Kubernetes. Lorsqu'une application recherche un nom de domaine non qualifié, le résolveur DNS local tente d'abord de résoudre le nom à l'intérieur du cluster local.
Les domaines à une seule partie (sans points) sont résolus en fonction des noms des services Kubernetes présents dans l'espace de noms du conteneur. Chaque application Kf crée un service Kubernetes portant le même nom. Ainsi, si deux applications Kf, par exemple ping et pong, sont déployées dans le même espace Kf, l'application ping peut utiliser l'URL http://pong pour envoyer du trafic vers l'autre service.
Les domaines comportant un seul point sont résolus en fonction des services Kubernetes situés dans l'espace de noms Kubernetes dont le nom correspond à la partie située après le point. Par exemple, si une base de données PostgreSQL dispose d'un service nommé customers dans l'espace de noms database, une application d'un autre espace de noms peut la résoudre à l'aide de postgres://customers.database.
Utilisation de la découverte des services avec Kf
La découverte des services basée sur le DNS de Kubernetes peut être utilisée dans toute application Kf. Chaque application Kf crée un service Kubernetes du même nom, et chaque espace Kf crée un espace de noms Kubernetes correspondant.
- Pour référer une application Kf dans l'espace actuel, utilisez
protocol://app-name. - Pour référer une application Kf dans un autre espace, utilisez
protocol://app-name.space-name. - Pour référer une application Kf dans l'espace actuel et écoutant sur un port personnalisé, utilisez
protocol://app-name:port. - Pour référer une application Kf dans un autre espace et écoutant sur un port personnalisé, utilisez
protocol://app-name.space-name:port.
Bonnes pratiques
Les applications ciblées par la découverte des services basée sur le DNS doivent faire l'objet de vérifications de l'état fréquentes afin de s'assurer qu'elles sont ajoutées et retirées rapidement du pool d'hôtes acceptant des connexions.
Les applications utilisant la découverte des services basée sur le DNS ne doivent pas mettre en cache les adresses IP des services résolus, car leur stabilité n'est pas garantie.
Si des services spécifiques à l'environnement existent en dehors du cluster, ils peuvent être résolus à l'aide du DNS Kubernetes en configurant les services Kubernetes ExternalName. Ces services Kubernetes offrent les mêmes capacités de résolution, mais renvoient un enregistrement CNAME pour rediriger les requêtes vers une autorité externe.
Comparaison avec Eureka
Eureka est un équilibreur de charge Open Source côté client créé par Netflix. Il est couramment utilisé avec l'agent de service Spring Cloud Services. Eureka a été conçu comme un équilibreur de charge régional et un mécanisme de découverte des services pour les services exécutés dans un environnement où les perturbations fréquentes des charges de travail peuvent provoquer l'instabilité des adresses IP.
Eureka a été conçu suivant un modèle client/serveur. Les clients s'enregistrent auprès du serveur pour indiquer les noms auxquels ils souhaitent être associés et envoient régulièrement des pulsations au serveur. Le serveur autorise tous les clients connectés à résoudre les noms.
En général, dans Kubernetes, il est recommandé d'utiliser le DNS de Kubernetes plutôt qu'Eureka pour les raisons suivantes :
- Le DNS fonctionne avec tous les langages de programmation et applications, sans nécessiter de bibliothèques.
- La vérification de l'état existante pour votre application est réutilisée, ce qui permet de réduire les différentes combinaisons d'erreurs possibles.
- Kubernetes gère le serveur DNS, ce qui réduit le nombre de dépendances sur lesquelles vous devez vous appuyer.
- Le DNS de Kubernetes suit les mêmes règles et contraintes RBAC que les autres ressources de Kubernetes.
Dans certains cas, le déploiement d'un serveur Eureka peut être bénéfique :
- Vous avez besoin de découverte des services entre Kubernetes et des applications basées sur des VM.
- Vous avez besoin d'un équilibrage de charge basé sur le client.
- Vous avez besoin de vérifications de l'état indépendantes.
Étapes suivantes
- En savoir plus sur la découverte des services dans GKE.
- Découvrez l'annuaire des services, une offre gérée semblable à celle d'Eureka.