Définir un service canonique
Remarque : Les services canoniques sont automatiquement pris en charge dans les versions 1.6.8 et ultérieures de Cloud Service Mesh.
Les services canoniques sont un groupe de charges de travail qui mettent en œuvre les mêmes services et API. Pour les types de charges de travail compatibles, Cloud Service Mesh crée automatiquement des ressources de service canonique en fonction du service depuis le serveur d'API Kubernetes. Cette page explique quels libellés définissent automatiquement les services canoniques et comment ajuster manuellement les limites de vos services. Les types d'instances de charge de travail actuellement compatibles sont les suivants :
- Pods Kubernetes (y compris via des déploiements Kubernetes, des services d'exécution Kube, etc.)
- Instances de machine virtuelle
- Services externes au maillage (en particulier, les ressources ServiceEntry dont l'emplacement est
MESH_EXTERNAL
)
Qu'est-ce qui définit les services canoniques ?
Cloud Service Mesh détermine l'appartenance au service canonique en lisant le
service.istio.io/canonical-name
libellé
sur la ressource de configuration Kubernetes associée à chaque instance de charge de travail:
- Pour les pods, le libellé se trouve dans la ressource de pod Kubernetes.
- Pour les VM, le libellé figure dans la ressource Istio WorkloadEntry.
- Pour les services externes, le libellé figure dans la ressource Istio ServiceEntry.
Les services canoniques ont le même Espace de noms Kubernetes que leurs instances de charge de travail associées et ne peuvent pas s'étendre sur plusieurs espaces de noms.
Règles d'ajout automatique de libellés
Cloud Service Mesh regroupe automatiquement vos charges de travail basées sur des pods et des VM dans des services canoniques sans aucune action de votre part. Vous n'avez à intervenir que dans les cas suivants :
- pour ajuster les libellés afin d'améliorer leur lisibilité pour les utilisateurs ;
- pour ignorer le comportement par défaut.
Ajout automatique de libellés dans les pods Kubernetes
Les services canoniques se concentrent sur les libellés Kubernetes app.kubernetes.io/name
et app
. Notez que le premier de ces libellés est prioritaire.
Si vous utilisez l'un de ces deux libellés sur vos charges de travail, aucune action supplémentaire n'est nécessaire.
Ajout automatique de libellés dans les machines virtuelles
Pour créer des services canoniques sur vos VM, vous devez ajouter celles-ci à un maillage de services en configurant une ressource WorkloadEntry sur votre serveur d'API Kubernetes.
Ajout manuel de libellés
Pour appliquer ou remplacer manuellement une étiquette de service canonique, appliquez la méthode
Étiquette service.istio.io/canonical-name
pour une ressource de charge de travail compatible
de configuration.
Pour qu'un service externe soit reconnu comme un service canonique, vous devez étiqueter manuellement l'entrée de service applicable.
Ajout manuel de libellés dans les pods Kubernetes
Pour déployer plusieurs pods simultanément à l'aide d'un
Déploiement
Définissez l'étiquette service.istio.io/canonical-name
sur PodTemplateSpec:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
namespace: my-namespace
spec:
replicas: 3
template:
metadata:
labels:
service.istio.io/canonical-name: my-service
spec:
containers:
...
Pour appliquer un libellé au service canonique d'un pod unique, ajoutez le libellé service.istio.io/canonical-name
à la section labels
de la configuration de pod :
apiVersion: v1
kind: Pod
metadata:
name: my-test-pod
namespace: my-namespace
labels:
service.istio.io/canonical-name: my-service
spec:
...
Ajout manuel de libellés dans les machines virtuelles
Pour appliquer un libellé au service canonique d'une seule VM/WorkloadEntry, ajoutez le libellé service.istio.io/canonical-name
à la section "labels" de votre configuration WorkloadEntry :
apiVersion: networking.istio.io/v1alpha3
kind: WorkloadEntry
metadata:
name: my-vm-123
namespace: my-namespace
labels:
service.istio.io/canonical-name: my-service
spec:
...
Ajouter manuellement un libellé aux services externes
Pour étiqueter le service canonique d'un seul service externe ou d'une seule entrée de service, ajoutez la classe
Remplacement du libellé service.istio.io/canonical-name
aux "libellés" de votre
Configuration de ServiceEntry:
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: example-com
namespace: my-namespace
labels:
service.istio.io/canonical-name: an-external-service
spec:
location: MESH_EXTERNAL
...
Étape suivante
- En savoir plus sur les services canoniques
- En savoir plus sur les bonnes pratiques en matière de services canoniques