Kubernetes, également connu sous le nom de K8s, est un système d’orchestration open-source pour automatiser le déploiement, la mise à l’échelle et la gestion d’applications conteneurisées. Sa portabilité, sa flexibilité et ses capacités de mise à l’échelle automatique en font un système largement utilisé. Par-dessus toutes ses fonctionnalités exceptionnelles, l’option de création d’enregistrements DNS pour les services et les pods le rend imbattable par rapport aux autres systèmes logiciels. Le service DNS de Kubernetes vous permet de contacter des services avec des noms DNS cohérents au lieu d’adresses IP.
Prérequis
Pour tirer le meilleur parti de ce tutoriel et mieux comprendre le service DNS de Kubernetes, assurez-vous de vous rafraîchir la mémoire avec les bases de Kubernetes. Vous bénéficierez également de la lecture de l’ Aperçu des terminologies, composants et concepts DNS pour acquérir une meilleure compréhension des concepts DNS. De plus, un aperçu de l’écosystème Docker et les bases de la technologie de conteneurisation seront un grand avantage.
Qu’est-ce qu’un système DNS ?
Le Domain Name System (DNS) est un mécanisme permettant d’associer divers types d’informations à des noms faciles à retenir, tels que des adresses IP. L’utilisation d’un système DNS pour traduire les noms de requêtes en adresses IP permet aux utilisateurs finaux d’atteindre facilement et sans effort leur nom de domaine cible. La plupart des clusters Kubernetes incluent un service DNS interne configuré par défaut pour offrir une approche légère de la découverte de services. Même lorsque des pods et des services sont créés, supprimés ou déplacés entre des nœuds, la découverte de services intégrée simplifie l’identification et la communication des applications avec les clusters Kubernetes.
Dans les versions récentes de Kubernetes, les spécificités techniques du service DNS de Kubernetes ont changé. Ce tutoriel vise à présenter à la fois les implémentations kube-dns et CoreDNS du service DNS de Kubernetes. Nous comprendrons en détail les enregistrements DNS de Kubernetes et démontrerons comment fonctionne le DNS de Kubernetes.
Qu’est-ce qui est inclus dans le service DNS de Kubernetes ?
Auparavant, le service DNS de Kubernetes était basé sur kube-dns avant la sortie de la version 1.11. Cependant, la sécurité et la confidentialité restaient une préoccupation sérieuse. Plus tard, la communauté Kubernetes a introduit CoreDNS dans la nouvelle version 1.11 pour résoudre les problèmes de sécurité et de stabilité de kube-dns.
Quelle que soit la version du logiciel que vous utilisez pour gérer les enregistrements DNS, kube-dns et CoreDNS fonctionnent de manière similaire :
- Un kube-dns service et un ou plusieurs pods sont créés.
- Le kube-dns service surveille l’API Kubernetes pour détecter les événements liés aux services et aux points de terminaison et modifie ses entrées DNS de manière appropriée. Lorsque vous modifiez ces services Kubernetes et leurs pods associés à l’aide d’opérations de création, d’édition ou de suppression, ces événements sont déclenchés automatiquement.
- Kubelet attribue l’adresse IP de cluster du service kube-dns à chaque nouveau pod dans l’option etc/resolv.conf nameserver, ainsi que les paramètres de search appropriés pour permettre des noms d’hôte plus courts :
|
1 2 3 |
nameserver 10.32.0.10 search namespace.svc.cluster.local svc.cluster.local cluster.local options ndots:5 |
-
Les applications conteneurisées peuvent alors résoudre des noms d’hôte comme example-service.namespace vers l’adresse IP de cluster appropriée.
Un aperçu des enregistrements DNS de Kubernetes
Comprenons mieux les enregistrements DNS de Kubernetes à l’aide d’un exemple. L’enregistrement DNS A complet pour un service Kubernetes ressemblera à :
service.namespace.svc.cluster.local
Un pod aurait un enregistrement dans ce format, qui représenterait l’adresse IP réelle du pod :
10.32.0.125.namespace.pod.cluster.local
De plus, des enregistrements SRV sont créés pour les ports spécifiés d’un service Kubernetes :
|
1 |
_port-name._protocol.service.namespace.svc.cluster.local |
Par conséquent, votre application ou microservice peut interroger un nom d’hôte simple et cohérent pour atteindre d’autres services ou pods sur le cluster, grâce au mécanisme de découverte de services intégré basé sur le DNS.
Résolution de noms d’hôte plus courts et recherche de domaines
Vous n’aurez pas toujours besoin d’utiliser le nom d’hôte complet pour accéder à un autre service en raison des suffixes de domaine de recherche définis dans le resolv.conf fichier. Si vous contactez un service dans le même espace de noms, vous pouvez simplement l’appeler par son nom :
|
1 |
other-service |
Ajoutez other-service à la requête si le service se trouve dans un espace de noms différent :
|
1 |
other-service.other-namespace |
Vous devrez utiliser au moins les éléments suivants si vous ciblez un pod :
|
1 |
pod-ip.other-namespace.pod |
Seuls les suffixes .svc sont automatiquement complétés dans le fichier resolv.conf par défaut. Par conséquent, il est essentiel de spécifier les paramètres jusqu’à .pod. Ensuite, passons en revue les subtilités des deux autres implémentations DNS de Kubernetes que nous avons découvertes jusqu’à présent.
Implémentation DNS de Kubernetes
La version 1.11 de Kubernetes a fourni un nouveau logiciel pour gérer le service kube-dns , comme mentionné dans la section précédente. La raison principale de cette nouvelle mise à jour était d’améliorer les performances et la sécurité du service. Commençons par l’intégration de kube-dns depuis le début.
-
kube-dns
Dans la version précédente de Kubernetes 1.11, le service kube-dns avait trois conteneurs fonctionnant dans un pod kube-dns dans l’espace de noms kube-system . Jetez un coup d’œil aux trois conteneurs ci-dessous :
- kube-dns : un conteneur qui exécute SkyDNS et fonctionne comme un service de résolution de requêtes DNS.
- dnsmasq : les réponses de SkyDNS sont mises en cache par dnsmasq, un résolveur et cache DNS léger et courant.
- sidecar : un conteneur aux côtés du service qui effectue le rapport de métriques et réagit aux contrôles de santé.
CoreDNS a été créé à la suite de vulnérabilités de sécurité dans Dnsmasq et de problèmes de performances d’évolutivité avec SkyDNS.
-
CoreDNS
En tant que nouveau service DNS Kubernetes, CoreDNS a été promu en disponibilité générale (General Availability) dans Kubernetes 1.11. Cela signifie qu’il est prêt pour la production et sera utilisé par de nombreux outils d’installation et fournisseurs Kubernetes gérés comme service DNS de cluster par défaut.
CoreDNS est un serveur DNS flexible et extensible qui agit comme un cluster DNS Kubernetes. Il remplit toutes les fonctionnalités du système précédent. Un conteneur DNS est responsable de la résolution et de la mise en cache des requêtes DNS. CoreDNS répond aux contrôles de santé et fournit des métriques dans un seul conteneur. De plus, il corrige quelques défauts mineurs et offre de nouvelles capacités pour résoudre les problèmes de performances et de sécurité :
- Certains conflits entre l’utilisation de stubDomains et de services externes ont été résolus.
- En randomisant l’ordre dans lequel certaines entrées sont renvoyées, CoreDNS peut améliorer la répartition de charge par permutation circulaire (round-robin) basée sur le DNS.
- En améliorant l’itération sur chacun des suffixes de domaine de recherche définis dans resolv.conf, une fonctionnalité appelée autopath peut améliorer les temps de réponse DNS lors de la résolution de noms d’hôte externes.
- Même si le pod n’existe pas, kube-dns 10.32.0.125.namespace.pod.cluster.local résoudra toujours vers 10.32.0.125. CoreDNS propose un mode de validation des pods qui ne résoudra que si un pod avec l’adresse IP et l’espace de noms corrects existe.
Pour approfondir vos connaissances sur les endpoints, autopaths, et wildcards, consultez un tutoriel sur la façon dont Kubernetes permet de lire les données de zone de son cluster.
Customization Features
Kubernetes vous permet de configurer les pods DNS et de personnaliser la résolution DNS du cluster, grâce au service de personnalisation DNS de KubernetesLes administrateurs peuvent exploiter ces services pour modifier les serveurs de noms amont ou les suffixes de domaine de recherche définis dans resolv.conf. Surtout, il existe une fonctionnalité complémentaire pour personnaliser les pods et les conteneurs à l’aide de l’option dnsConfig :

La mise à jour de cette configuration forcera une réécriture du fichier resolv.conf d’un pod, permettant aux modifications de prendre effet. La configuration ci-dessus créera un fichier contenant les lignes nameserver 203.0.113.44 et search custom.dns.local, ce qui se transfère directement aux options normales de resolv.conf .
Conclusion
Dans ce tutoriel, nous vous avons présenté les bases du service DNS de Kubernetes et son implémentation dans différentes versions. Les enregistrements DNS de Kubernetes ont également été abordés à l'aide d'un exemple. De plus, nous avons mis en évidence certaines options de configuration supplémentaires pour personnaliser les pods et résoudre les requêtes DNS. Cela couvre les bases du service DNS de Kubernetes, mais votre apprentissage ne doit pas s'arrêter là. Consultez la documentation officielle de Kubernetes pour en savoir plus sur le sujet.
Pour approfondir vos connaissances en DevOps et plonger dans les bases de Kubernetes, consultez les tutoriels suivants sur notre blog:
- Introduction à Helm : gestionnaire de paquets pour Kubernetes
- Comment installer et utiliser Kubernetes sur Ubuntu 20.04
- Déployer une application PHP sur un cluster Kubernetes avec Ubuntu 18.04
Bonne informatique !
Commentaires
Aucun commentaire pour l'instant. Soyez le premier.