Lorsque plusieurs services communiquent au sein d'un cluster Kubernetes, vous devez centraliser la gestion des fonctionnalités réseau telles que l'équilibrage de charge, la découverte de services, le contrôle du trafic, les nouvelles tentatives et les délais d'expiration, sans modifier le code de l'application. Alibaba Cloud Service Mesh (ASM) résout ce problème en injectant un proxy sidecar (une instance Envoy) à côté de chaque conteneur d'application. Le proxy sidecar intercepte tout le trafic entrant et sortant et applique les règles de routage ainsi que les politiques de gouvernance des services que le plan de contrôle Istio transmet en temps réel. Chaque service de votre application nécessite l'exécution d'un proxy sidecar dans son pod.
Pour ajouter des proxys sidecar à vos charges de travail, ajoutez un libellé à un namespace pour activer l'injection automatique, puis redémarrez les pods de ce namespace.
Fonctionnement de l'injection
Lorsque vous activez l'injection de proxy sidecar pour un namespace, ASM enregistre un webhook d'admission mutatif Kubernetes. À chaque création d'un pod dans ce namespace, le webhook ajoute un conteneur istio-proxy au pod. Après l'injection, un pod exécute deux conteneurs :
Conteneur d'application : votre service
Conteneur de proxy sidecar (
istio-proxy) : une instance Envoy qui intercepte tout le trafic HTTP entrant et sortant et communique avec le composant Pilot sur le plan de contrôle Istio
Comme l'injection a lieu lors de la création du pod, les pods existants ne reçoivent pas de proxy sidecar tant que vous ne les avez pas redémarrés.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Une instance ASM avec un cluster Kubernetes ajouté au maillage
kubectlconfiguré pour se connecter au clusterLes permissions nécessaires pour ajouter des libellés aux namespaces et redémarrer les charges de travail
Étape 1 : Activer l'injection automatique de proxy sidecar
Par défaut, l'injection automatique de proxy sidecar est désactivée pour tous les namespaces. Vous pouvez injecter manuellement un proxy sidecar en mettant à jour la configuration Kubernetes du pod correspondant, ou utiliser la fonctionnalité d'injection automatique. Pour activer l'injection automatique, ajoutez un libellé au namespace cible :
kubectl label namespace <namespace> istio-injection=enabled --overwrite
Remplacez <namespace> par le namespace de votre application. Si vous ne spécifiez pas ce paramètre, le namespace default est utilisé.
Vérifiez le libellé :
kubectl get namespace <namespace> --show-labels
La sortie doit inclure istio-injection=enabled.
Vous pouvez également activer l'injection de proxy sidecar via la console ASM. Pour plus d'informations, consultez la rubrique Gérer les namespaces globaux.
Étape 2 : Redémarrer les pods pour déclencher l'injection
Les proxys sidecar sont injectés uniquement lors de la création des pods. Pour injecter des proxys sidecar dans des charges de travail existantes, redémarrez-les.
Redémarrer un déploiement (recommandé)
Utilisez kubectl rollout restart pour effectuer un redémarrage progressif. Cette opération remplace graduellement les anciens pods par de nouveaux pods incluant le proxy sidecar :
kubectl rollout restart deployment <deployment-name> -n <namespace>
Redémarrer un pod spécifique
Pour redémarrer un pod individuel, exécutez la commande suivante :
kubectl get pod <pod-name> -n <namespace> -o yaml | kubectl replace --force -f -
Cette commande force la suppression et la recréation du pod, ce qui entraîne une brève interruption du trafic pour ce pod. Testez cette approche dans un environnement hors production au préalable pour vérifier que votre service tolère l'interruption. Effectuez plusieurs redémarrages pour confirmer la stabilité avant d'appliquer cette méthode en production.
Étape 3 : Vérifier l'injection du proxy sidecar
Après le redémarrage, confirmez que le proxy sidecar a bien été injecté.
Vérifier la colonne READY
Exécutez la commande suivante :
kubectl get pods -n <namespace>
Avant l'injection, les pods affichent 1/1 dans la colonne READY (conteneur d'application uniquement). Après l'injection, les pods affichent 2/2 (conteneur d'application + conteneur de proxy sidecar) :
NAME READY STATUS RESTARTS AGE
my-app-6b7d8f9c4d-abc12 2/2 Running 0 30s
my-app-6b7d8f9c4d-def34 2/2 Running 0 28s
Si un pod affiche toujours 1/1, vérifiez que le libellé du namespace est correctement défini et que le pod a été créé après l'ajout du libellé.
Confirmer la présence du conteneur istio-proxy
Pour une vérification détaillée, décrivez un pod spécifique :
kubectl describe pod <pod-name> -n <namespace>
Recherchez istio-proxy dans la section Containers de la sortie. Le conteneur istio-proxy correspond au proxy sidecar Envoy. Sa présence confirme que le pod fait partie du plan de données ASM.
Étapes suivantes
Politiques d'injection : contrôlez les pods qui reçoivent des proxys sidecar en utilisant des libellés et des sélecteurs. Vous pouvez également ajuster la configuration des ressources de l'injecteur sidecar en fonction de la taille et de la charge de votre cluster. Consultez la rubrique Configurer les politiques d'injection de proxy sidecar.
Paramètres du proxy sidecar : ajustez les limites de ressources, les hooks de cycle de vie, le mode d'interception du trafic et les paramètres d'observabilité via la console ASM. Consultez la rubrique Configurer les proxys sidecar.
Configuration basée sur les annotations : modifiez les ressources et le comportement du proxy sidecar (tels que la durée de vidage lors de la terminaison et la séquence de démarrage d'istio-proxy) en utilisant des annotations de pod. Consultez la rubrique Configurer un proxy sidecar en ajoutant des annotations de ressources.
Contourner les proxys sidecar : pour le trafic qui ne doit pas passer par les proxys sidecar, configurez des règles de contournement. Consultez la rubrique Configurer les paramètres permettant au trafic de contourner les proxys sidecar.