Pour les services Kubernetes, diverses configurations de port distinctes sont disponibles, y compris le port, Targetport et Nodeport. Le service Kubernetes est accessible via le port choisi du cluster, et d'autres pods peuvent communiquer avec ce serveur à l'aide du port configuré. Sur Targetport, le service enverra des demandes et les pods les écouteront. Ce port devra également être ouvert pour l'application de votre conteneur. Si le champ de port n'est pas fourni, Nodeport est utilisé par défaut. Nous allons expliquer comment exposer les ports à Kubernetes dans cet article. Vous devez comprendre le pod et le déploiement pour suivre les exercices pratiques sur ce sujet.
Assurez-vous que Kubectl soit installé. Vous aurez également besoin d'un cluster Kubernetes, ainsi que de l'outil de ligne de commande Kubectl configuré pour se connecter avec lui. Pour commencer, ouvrez le groupe Minikube, qui est installé sur votre Ubuntu 20.04 LTS OS. Pour exécuter Minikube, exécutez la commande de démarrage Minikube sur la ligne de commande.
Créez un fichier avec la commande tactile.
La gousse.Le fichier yaml est créé, comme indiqué dans la capture d'écran qui l'accompagne.
Maintenant, faites un pod nginx avec la spécification du port de conteneur suivant:
En conséquence, il est accessible à partir de n'importe quel nœud de votre cluster. Examinez les nœuds sur lesquels le pod fonctionne et utilisez les commandes ci-dessous pour le faire.
Pour voir l'état complet des pods Kubernetes, vous pouvez exécuter la commande get pod comme mentionné ci-dessous.
Avec la commande indiquée dans la capture d'écran, vous pouvez vérifier les adresses IP de vos pods.
Vous pouvez Ssh dans n'importe quel nœud présent dans votre cluster et boucler les deux adresses IP. Il convient de noter que les conteneurs n'utilisent pas le port 80 sur le nœud, et il n'y a pas de règles NAT spécifiques en place pour diriger le trafic vers le pod. Cela signifie que vous pouvez exécuter de nombreux nginx-pods sur le même nœud, chacun avec son port de conteneur, et y accéder via IP à partir de tout autre pod ou nœud dans le cluster. Les ports peuvent toujours être exposés aux interfaces du nœud hôte, tout comme Docker, bien que cette exigence soit considérablement réduite en raison du modèle de mise en réseau.
Comment créer un service?
Ainsi, sur un espace d'adressage plat à l'échelle de la grappe, nous avons des pods exécutant nginx. Vous pouvez théoriquement communiquer directement avec ces pods, mais que se passe-t-il si l'un d'eux meurt? Les pods périront en conséquence, et le déploiement en générera de nouveaux avec des adresses IP alternatives. Le problème qu'un service résout est celui-ci.
Un service Kubernetes est un ensemble logique de pods qui font tous la même tâche et s'exécutent quelque part dans votre cluster. Lorsqu'un service est créé, il reçoit une adresse IP spécifique, et cette adresse est fixée tout au long de l'existence du service et ne changera pas. Les pods peuvent être définis pour communiquer avec le service, avec la certitude que la communication sera équilibrée à un pod membre du service. Avec Kubectl Expose, vous pouvez créer un service pour vos deux répliques Nginx:
Un ensemble de pods prend en charge un service. Les points de terminaison donnent accès à ces gousses. La sélection du service sera évaluée régulièrement, avec les résultats publiés dans un objet de points de terminaison nommé My-Nginx. Si un pod meurt, il est séparé des points de terminaison. Après cela, il est remplacé par de nouvelles pods par le même sélecteur.
Comment accéder au service?
Les variables d'environnement et le DNS sont les deux méthodes de base pour trouver un service à Kubernetes. Le premier nécessite l'addon de cluster coredns, alors que le second ne.
Variables d'environnement
Le kubelet crée une collection de variables d'environnement pour chaque service actuel lorsqu'un pod démarre sur un nœud. En conséquence, il pourrait y avoir des difficultés dans le processus de commande. Examinez l'environnement de vos pods Nginx en cours d'exécution (le nom de votre pod diffère) pour comprendre pourquoi:
$ kubectl exec my-nginx-3800858182-jr4a2 - printenv | service grep
Il convient de noter que votre service n'est pas mentionné. Parce que vous avez fait les répliques avant le service, c'est le cas. Cette étape pourrait réduire l'ensemble de votre service si ça ne fonctionnait pas. En détruisant les deux pods et en attendant que le déploiement les recréait, nous pouvons accomplir la tâche correctement. Le service est présent avant les répliques cette fois. Cela vous fournira une propagation de service au niveau du planificateur pour vos pods, ainsi que les variables d'environnement appropriées:
DNS
Kubernetes a un service d'addition de cluster DNS qui attribue automatiquement les noms DNS à d'autres services. Vous pouvez voir s'il s'exécute sur votre cluster en exécutant la commande suivante:
$ kubectl obtenir des services kube-dns --Namespace = kube-system
Conclusion
Dans cet article, vous avez appris que pour les services Kubernetes, il existe différentes configurations de port distinctes, y compris le port, Targetport et Nodeport. De plus, nous avons inclus une description complète de la façon dont vous pouvez exposer avec succès les ports à Kubernetes.