Que sont les services Kubernetes ?
Un service Kubernetes est l’abstraction logique d’un groupe de pods déployés dans un cluster (qui remplissent tous la même fonction).
Les pods étant éphémères, ce type de service permet d'attribuer un nom et une adresse IP unique (clusterIP) à un groupe de pods qui assurent des fonctions spécifiques (services Web, traitement d’images, etc.). Tant que le service exécute cette adresse IP, elle ne change pas. Les services définissent également des règles d’accès les concernant.

État de Kubernetes

Mise en œuvre de Kubernetes
Quelle est la différence entre un service Kubernetes et un déploiement Kubernetes ?
Dans l’environnement Kubernetes, le déploiement est une méthode de lancement d’un pod avec des applications conteneurisées qui permet de s'assurer que le nombre de répliques nécessaire est toujours en cours d'exécution sur le cluster.
Quant au service, il est chargé d’exposer une interface à ces pods, ce qui permet l’accès au réseau depuis l’intérieur du cluster ou entre des processus externes et le service.
Quels sont les composants d’un service Kubernetes ?
Les services Kubernetes connectent un ensemble de pods à un nom de service abstrait et à une adresse IP. Ils assurent la détection et le routage entre les pods. Par exemple, les services connectent le front-end d’une application à son back-end, chacun s’exécutant dans des déploiements distincts sur un cluster. Les services utilisent des libellés et des sélecteurs pour mettre les pods en correspondance avec d’autres applications. Les principaux attributs d’un service Kubernetes sont les suivants :
- Un sélecteur de libellés qui localise les pods
- L’adresse IP clusterIP et le numéro de port affecté
- Les définitions des ports
- Le mappage facultatif des ports entrants sur un targetPort
Les services peuvent être définis sans sélecteurs de pod. Par exemple, pour diriger un service vers un autre service dans un espace de noms ou un cluster différent.
Quels sont les types de services Kubernetes ?
- ClusterIP. Expose un service accessible uniquement à partir du cluster.
- NodePort. Expose un service via un port statique sur l’adresse IP de chaque nœud.
- LoadBalancer. Expose le service via l’équilibreur de charge du fournisseur de Cloud.
- ExternalName. Mappe un service sur un champ externalName prédéfini en renvoyant une valeur pour l’enregistrement CNAME.
Qu’est-ce que le service ClusterIP de Kubernetes ?
ClusterIP est le type de service par défaut utilisé pour exposer un service sur une adresse IP interne au cluster. L’accès est autorisé uniquement à partir du cluster.
Qu’est-ce qu’un service Kubernetes Headless ?
Les services qui n’ont pas besoin d’équilibrage de charge et qui n’exposent qu’une seule adresse IP peuvent créer un service headless en spécifiant « None » comme clusterIP.
Les services headless peuvent être définis à l’aide de sélecteurs, auquel cas des enregistrements de terminaux sont créés dans l’API pour modifier le DNS afin de renvoyer les adresses pointant vers les pods qui exposent le service. Les services headless sans sélecteurs ne créent pas d’enregistrements de terminaux. Le système DNS configure soit l’enregistrement CNAME, soit un enregistrement pour les terminaux portant le même nom que le service.
Qu’est-ce qu’un service Kubernetes NodePort ?
Les NodePorts sont des ports ouverts utilisés sur chaque nœud de cluster. Kubernetes achemine le trafic entrant sur un NodePort vers le service, même si ce dernier ne s’exécute pas sur ce nœud. NodePort, qui sert de base à d’autres méthodes d’ingress plus stratégiques telles que les équilibreurs de charge, est utile dans le cadre du développement.
Qu’est-ce qu’un service Kubernetes ExternalName ?
Les services ExternalName sont similaires aux autres services Kubernetes à la différence près qu’au lieu d’être accessibles via une adresse clusterIP, ils renvoient un enregistrement CNAME avec une valeur définie dans le paramètre externalName: lors de la création du service.
Qu’est-ce qu’un service Kubernetes LoadBalancer ?
Pour les clusters s’exécutant chez des fournisseurs de Cloud public comme AWS ou Azure, la création d’un service LoadBalancer fournit l’équivalent d’un service clusterIP, en l’étendant à un équilibreur de charge externe spécifique au fournisseur de Cloud. Kubernetes crée automatiquement l’équilibreur de charge, fournit des règles de pare-feu si nécessaire, et renseigne le service avec l’adresse IP externe affectée par le fournisseur de Cloud.
Mode opératoire des services Kubernetes
Les services pointent simplement vers les pods à l’aide de libellés. Dans la mesure où les services ne sont pas spécifiques à un nœud, un service peut pointer à tout moment vers un pod, quel que soit l’emplacement où il s’exécute dans le cluster. En exposant une adresse IP de service ainsi qu’un nom de service DNS, l’application est accessible par l’une ou l’autre méthode tant que le service est actif.
Comment définir un service Kubernetes ?
Les services, comme tous les objets Kubernetes, sont définis dans le fichier YAML. Supposons que vous déployiez des pods exécutant un service back-end pour traiter les données provenant d’un front-end Web. Pour exposer un service nommé « service-backend » dans le déploiement « deployment-backend », la syntaxe est la suivante :
apiVersion: v1
kind: Service
metadata:
name: service-backend
spec:
ports:
- port: 4000
protocol: TCP
targetPort: 333
selector:
run: deployment-backend
type: ClusterIP
Le service « service-backend » est créé et n’importe quel pod du cluster peut y accéder via son port 333 à l’adresse http://service-backend:4000, ou sur l’adresse IP du cluster via le port 4000.
Les services Kubernetes peuvent également être créés à l’aide de la commande kubectl expose, qui ne nécessite pas de fichier YAML. Le même service peut être créé à l’aide de la commande suivante :
kubectl expose deployment deployment-backend - - port=333- - target-port=4000 - - name=service-backend
Comment accéder à un service Kubernetes ?
Il y a deux manières de détecter un service Kubernetes :
DNS (méthode la plus courante) : Il s’agit de la méthode recommandée pour détecter les services. Pour utiliser cette méthode, un serveur DNS doit avoir été installé sur le cluster. Le serveur DNS surveille l’API Kubernetes et, lorsqu’un nouveau service est créé, son nom devient disponible pour faciliter la résolution des demandes des applications.
Variable ENV : Cette méthode repose sur l’ajout de variables d’environnement par le kubelet pour chaque service actif, pour chaque nœud sur lequel s’exécute un pod.
Solutions et produits connexes
Laboratoires : Modernisation des applications
Migrez vos applications dans le Cloud en quelques semaines seulement.
Tanzu Kubernetes for Operations
La base d’une infrastructure de conteneurs multicloud moderne.
Tanzu Application Platform
Une expérience de développeur multicloud optimale sur Kubernetes.