Injecter des proxys side-car avec Cloud Service Mesh
Ce document explique comment configurer l'injection du proxy side-car avec Cloud Service Mesh pour améliorer la sécurité, la fiabilité et l'observabilité du réseau. Ces fonctions sont extraites du conteneur principal de l'application et implémentées dans un proxy commun hors processus (le side-car), fourni sous la forme d'un conteneur séparé dans le même pod. Vous bénéficiez ainsi les fonctionnalités de Cloud Service Mesh sans avoir à repenser votre pour qu'elles participent à un maillage de services.
L'injection automatique du proxy side-car (injection automatique) se produit lorsque Cloud Service Mesh détecte une étiquette d'espace de noms que vous configurez pour le pod de la charge de travail. Le proxy intercepte tout le trafic entrant et sortant vers les charges de travail, et communique avec Cloud Service Mesh.
Activer l'injection side-car automatique
La méthode recommandée pour injecter des proxys side-car est d'utiliser l'injecteur side-car automatique basé sur les webhooks, mais vous pouvez mettre à jour manuellement la configuration Kubernetes de vos pods.
Pour activer l'injection automatique, vous devez ajouter un libellé à vos espaces de noms en utilisant les libellés d'injection par défaut, si le tag par défaut est configuré, ou bien le libellé de révision.
L'étiquette que vous ajoutez varie également selon que vous avez déployé ou non
Cloud Service Mesh géré (avec le
l'API du parc ou avec
asmcli
) ou
installé le plan de contrôle du cluster. Le libellé est utilisé par le side-car
webhook d'injecteur pour associer les side-cars injectés à un plan de contrôle particulier
la révision.
Pour activer l'injection automatique, procédez comme suit :
Dans le cluster
Exécutez la commande suivante pour localiser le libellé de révision sur
istiod
:kubectl -n istio-system get pods -l app=istiod --show-labels
La sortie ressemble à ceci :
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-1187-26-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-1187-26,istio=istiod,pod-template-hash=5788d57586 istiod-asm-1187-26-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-1187-26,istio=istiod,pod-template-hash=5788d57586
Dans le résultat, sous la colonne
LABELS
, notez la valeur du libellé de révisionistiod
, qui suit le préfixeistio.io/rev=
. Dans cet exemple, la valeur estasm-1187-26
.Appliquez le libellé de révision aux espaces de noms et supprimez le libellé d'injection Istio (le cas échéant). Dans la commande suivante,
NAMESPACE
est le nom de l'espace de noms dans lequel vous souhaitez activer l'injection automatique, etREVISION
est le libellé de révision noté à l'étape précédente.kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
Vous pouvez ignorer le message
"istio-injection not found"
dans le résultat. Cela signifie que l'espace de noms n'avait pas auparavant Le libelléistio-injection
, qui est attendu dans les nouvelles de Cloud Service Mesh ou de nouveaux déploiements. Comme l'injection automatique le comportement n'est pas défini lorsqu'un espace de noms possède à la foisistio-injection
et l'étiquette de révision, toutes les commandeskubectl label
du Dans la documentation de Cloud Service Mesh, vous assurez explicitement qu'un seul de ces éléments est défini.Redémarrez les pods concernés en suivant la procédure décrite dans la section suivante.
Maillage de services géré
Exécutez la commande suivante pour localiser les versions disponibles :
kubectl -n istio-system get controlplanerevision
Le résultat ressemble à ce qui suit :
NAME AGE asm-managed 6d7h
Dans le résultat, sélectionnez la valeur sous la colonne
NAME
qui correspond au LibelléREVISION
correspondant aux version disponible pour la version de Cloud Service Mesh. Appliquez ce libellé à vos espaces de noms et supprimez le libelléistio-injection
(s'il existe). Dans la commande suivante, remplacezREVISION
par le libellé de révision indiqué ci-dessus et remplacezNAMESPACE
par le nom de l'espace de noms dans lequel vous souhaitez activer l'injection automatique :kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
Vous pouvez ignorer le message
"istio-injection not found"
dans le résultat. Cela signifie que l'espace de noms n'avait pas auparavant Le libelléistio-injection
, qui est attendu dans les nouvelles de Cloud Service Mesh ou de nouveaux déploiements. Comme l'injection automatique le comportement n'est pas défini lorsqu'un espace de noms possède à la foisistio-injection
et l'étiquette de révision, toutes les commandeskubectl label
du Dans la documentation de Cloud Service Mesh, vous assurez explicitement qu'un seul de ces éléments est défini.Redémarrez les pods concernés en suivant la procédure décrite dans la section suivante.
Si vous avez également déployé le plan de données géré par Google facultatif, annotez l'espace de noms
demo
comme suit :kubectl annotate --overwrite namespace YOUR_NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
Redémarrer les pods pour mettre à jour les proxys side-car
Avec l'injection automatique de side-car, vous pouvez mettre à jour les side-cars pour les pods existants avec un redémarrage du pod :
Le redémarrage des pods varie selon qu'ils ont été créés dans le cadre d'un déploiement ou non.
Si vous avez utilisé un déploiement, redémarrez le déploiement pour redémarrer tous les pods avec des side-cars :
kubectl rollout restart deployment -n YOUR_NAMESPACE
Si vous n'avez pas utilisé de déploiement, supprimez les pods. Ils sont automatiquement recréés avec les side-cars :
kubectl delete pod -n YOUR_NAMESPACE --all
Vérifiez que tous les pods de l'espace de noms disposent de side-cars injectés :
kubectl get pod -n YOUR_NAMESPACE
Dans l'exemple de résultat suivant, qui concerne la commande précédente, la colonne
READY
indique qu'il existe deux conteneurs pour chacune de vos charges de travail : le conteneur principal et le conteneur du proxy side-car.NAME READY STATUS RESTARTS AGE YOUR_WORKLOAD 2/2 Running 0 20s ...
Étapes suivantes
En savoir plus :
- Révisions du plan de contrôle Cloud Service Mesh
- Déployer des charges de travail
- Personnaliser l'injection