BS
Avril 14 2025
Mise à jour le 30 août 2025

Kubernetes Services expliqués : Guide du débutant sur la communication en cluster

Kubernetes

Dans l'article précédent Guide étape par étape pour déployer et gérer Kubernetes, nous avons couvert les fondamentaux de Kubernetes: son architecture, ses composants clés (tels que les pods, les déploiements et les services) et les principes généraux de déploiement et de gestion des clusters. Nous allons maintenant approfondir l'utilisation de Pods—les plus petites unités exécutables dans Kubernetes. Pour gérer efficacement leur communication et leur disponibilité, Kubernetes Usages Services, dont l’objectif général a été mentionné plus haut.

Dans cet article, nous explorerons les fonctionnalités des services à travers des exemples pratiques : leurs types (ClusterIP, NodePort, LoadBalancer), les configurations de manifeste YAML et les cas d'utilisation pour garantir une communication stable entre les composants de l'application.

Kubernetes Services revisités

Tout d’abord, rappelons ce que Kubernetes Services En bref, ce sont des objets qui fournissent un accès stable aux applications d'un cluster, même lorsque les pods changent dynamiquement. Plus précisément, Kubernetes Services constituent un mécanisme essentiel pour assurer une communication réseau stable entre les composants applicatifs dans un environnement de cluster en constante évolution. En termes simples, les services agissent comme « points d'entrée stables » à un groupe de Pods, même si ces derniers sont recréés, mis à l'échelle ou déplacés entre nœuds. Voici une illustration des principaux types de services dans K8s :

Image 1 - Services K8s

Problèmes traités par Kubernetes Les services

Depuis que les Pods sont dans Kubernetes sont éphémères (leurs adresses IP changent lors des redémarrages, des mises à l'échelle ou des mises à jour), ce qui crée des défis pour les composants d'application (par exemple, frontend et backend) qui nécessitent une méthode de communication stable.

Kubernetes Les services résolvent ces problèmes grâce aux actions suivantes :
- Identifiants fixes: Les services attribuent une adresse IP stable (ClusterIP), DNS nom ou IP externe, indépendant du cycle de vie des Pods.
- Load Balancing: Le trafic est automatiquement réparti entre les pods sélectionnés via des étiquettes (par exemple, « app : backend »).
- Mise à jour automatique: Les services suivent dynamiquement les modifications dans l'ensemble des pods via EndpointSlices, en mettant à jour la liste des instances disponibles.

Core Kubernetes Types de services avec exemples

ClusterIP : pour l'accès interne aux pods du cluster

Exemple de configuration :

simple-service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app.kubernetes.io/name: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376

Commande pour créer le service :

kubectl apply -f simple-service.yaml

Vérification :

kubectl get services # Viewing ClusterIP
kubectl describe service/my-service # Details Service and Endpoints

LoadBalancer est conçu pour un accès public via un équilibreur de charge cloud.

Exemple de configuration :

# nodeport-service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-nodeport-service
spec:
type: NodePort
selector:
app.kubernetes.io/name: MyApp
ports:
- port: 80
targetPort: 9376
nodePort: 30007 # Optional (default: random port in range)

Commande pour créer le service :

kubectl apply -f nodeport-service.yaml

Accès:

curl http://:30007 # replace with node IP

ExternalName est conçu pour créer un lien vers une ressource externe via DNS CNAME.

Exemple de configuration :

# loadbalancer-service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-loadbalancer
spec:
type: LoadBalancer
selector:
app.kubernetes.io/name: MyApp
ports:
- port: 80
targetPort: 9376

Commande pour créer le service :

kubectl apply -f loadbalancer-service.yaml

Vérification de l'IP externe :

kubectl get service/my-loadbalancer -o wide # Viewing EXTERNAL-IP

Le service sans tête (sans ClusterIP) est conçu pour un accès direct aux pods sans équilibrage de charge.

Exemple de configuration :

# externalname-service.yaml
apiVersion: v1
kind: Service
metadata:
name: external-db
spec:
type: ExternalName
externalName: my.database.example.com

Commande pour créer le service :

kubectl apply -f externalname-service.yaml

Usage:
D'autres pods peuvent accéder à « external-db » en tant que DNS Le nom

Le service sans tête (sans ClusterIP) est conçu pour un accès direct aux pods sans équilibrage de charge.

Exemple de configuration :

# headless-service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-headless
spec:
clusterIP: None
selector:
app.kubernetes.io/name: MyApp
ports:
- port: 80
targetPort: 9376

Commande pour créer le service :

kubectl apply -f headless-service.yaml

DNS vérification:

nslookup my-headless.default.svc.cluster.local # Returns the IPs of all Pods

Exemples supplémentaires :

La configuration du service multiport est conçue pour simplifier la configuration des applications nécessitant plusieurs ports.

Configuration:

# multi-port-service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-multi-port
spec:
selector:
app.kubernetes.io/name: MyApp
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
- name: metrics
protocol: TCP
port: 9090
targetPort: 9090

Commande:

kubectl apply -f multi-port-service.yaml

La configuration du service sans sélecteur (EndpointSlices manuels) est utilisée pour s'intégrer aux ressources extérieures Kubernetes

Configuration du service :

# service-without-selector.yaml
apiVersion: v1
kind: Service
metadata:
name: my-external-service
spec:
ports:
- name: http
protocol: TCP
port: 80
targetPort: 9376

La configuration d'EndpointSlice est conçue pour une gestion flexible des points de terminaison (y compris les systèmes externes) :

Configuration:

# endpointslice.yaml
apiVersion: discovery.k8s.io/v1
kind: EndpointSlice
metadata:
name: my-service-1
labels:
kubernetes.io/service-name: my-external-service
addressType: IPv4
ports:
- name: http
protocol: TCP
port: 9376
endpoints:
- addresses: ["10.4.5.6"]
- addresses: ["10.1.2.3"]

commandes:

kubectl apply -f service-without-selector.yaml
kubectl apply -f endpointslice.yaml

Commandes utiles :

L'affichage de tous les services permet d'afficher une liste de tous les services dans l'espace de noms actuel :

kubectl get services

L'affichage des points de terminaison vise à afficher une liste de points de terminaison : les adresses IP et les ports des pods associés au service :

kubectl get endpoints

DNS la vérification d'un service est destinée à vérifier DNS résolution du nom du service au sein d'un Pod :

kubectl exec -it -- nslookup

La suppression d'un service vise à supprimer le service du cluster :

kubectl delete service/

FAQ: Kubernetes Services

  • Q1 : Qu'est-ce qu'un Kubernetes Un service?
    A1 : Un Kubernetes Un service est une abstraction qui fournit un accès réseau stable à un ensemble de pods. Les services assurent une communication fiable entre les composants, même lorsque les pods sont recréés, mis à l'échelle ou déplacés entre les nœuds.
  • Q2 : Pourquoi les services sont-ils nécessaires dans Kubernetes?
    A2 : Les pods sont éphémères, ce qui signifie que leurs adresses IP peuvent changer lors des redémarrages ou des mises à l'échelle. Les services résolvent ce problème en fournissant des adresses IP fixes. DNS noms ou adresses externes, ainsi que l'équilibrage de charge et les mises à jour automatiques des points de terminaison.
  • Q3 : Quels sont les principaux types de services dans Kubernetes?
    A3 : Les types de noyaux comprennent :
    ClusterIP - accès interne au cluster
    NodePort - expose le service sur un port statique sur chaque nœud
    LoadBalancer - s'intègre aux équilibreurs de charge des fournisseurs de cloud pour un accès externe
    ExternalName - mappe un service à un service externe DNS Le nom
    Service sans tête - accès direct au Pod sans équilibrage de charge
  • Q4 : Comment créer un Kubernetes Un service?
    A4 : Les services sont définis dans les manifestes YAML et appliqués à l'aide de kubectl apply -f . Vous spécifiez le type, le sélecteur (étiquettes) et les ports pour configurer la manière dont le trafic est acheminé vers les pods.
  • Q5 : Un service peut-il avoir plusieurs ports ?
    A5 : Oui. Les services multiports permettent d’exposer plusieurs ports à partir du même ensemble de pods, ce qui est utile pour les applications qui servent HTTP, des métriques et d’autres protocoles simultanément.
  • Q6 : Comment puis-je vérifier qu’un service fonctionne ?
    A6 : Utilisez des commandes telles que kubectl get services pour répertorier les services, kubectl describe service/ pour afficher les détails et nslookup à l'intérieur d'un Pod pour vérifier DNS résolution.
  • Q7 : Que faire si j’ai besoin de connecter un service à des points de terminaison externes ?
    A7 : Vous pouvez créer un service sans sélecteur et définir manuellement les points de terminaison via des objets EndpointSlice, permettant ainsi l'intégration avec des ressources extérieures au service. Kubernetes .
  • Q8 : Comment les services gèrent-ils l’équilibrage de charge ?
    A8 : Les services répartissent automatiquement le trafic entrant entre les pods sélectionnés en fonction des étiquettes, garantissant une charge uniforme et une haute disponibilité au sein du cluster.
Voter:
4 sur 5
Note moyenne : 4.5
Noté par : 2
1101 CT Amsterdam Pays-Bas, Herikerbergweg 292
+31 20 262-58-98
700 300
ITGLOBAL.COM NL
700 300

Vous pourriez aussi aimer...

Nous utilisons des cookies pour rendre votre expérience sur le Serverspace meilleur. En poursuivant votre navigation sur notre site, vous acceptez nos
Utilisation des cookies et Confidentialité.