Injecter des proxys side-car avec Anthos Service Mesh

Ce document explique comment configurer l'injection de proxys side-car avec Anthos Service Mesh afin d'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. Cela fournit les fonctionnalités d'Anthos Service Mesh sans avoir à repenser vos applications de production pour participer à un maillage de services.

L'injection automatique du proxy side-car (injection automatique) se produit lorsque Anthos Service Mesh détecte un libellé 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 Anthos 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. Le libellé que vous ajoutez varie selon que vous avez déployé Anthos Service Mesh géré ou que vous avez installé le plan de contrôle intégré au cluster. Le libellé est utilisé par le webhook d'injecteur side-car pour associer les side-cars injectés à une révision spécifique du plan de contrôle.

Pour activer l'injection automatique, procédez comme suit :

Dans le cluster

  1. 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-1129-3-5788d57586-bljj4   1/1     Running   0          23h   app=istiod,istio.io/rev=asm-1129-3,istio=istiod,pod-template-hash=5788d57586
    istiod-asm-1129-3-5788d57586-vsklm   1/1     Running   1          23h   app=istiod,istio.io/rev=asm-1129-3,istio=istiod,pod-template-hash=5788d57586

    Dans le résultat, sous la colonne LABELS, notez la valeur du libellé de révision istiod, qui suit le préfixe istio.io/rev=. Dans cet exemple, la valeur est asm-1129-3.

  2. 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, et REVISION 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 ne portait pas précédemment le libellé istio-injection, auquel on s'attend dans de nouvelles installations d'Anthos Service Mesh ou de nouveaux déploiements. Étant donné que l'injection automatique échoue si un espace de noms possède à la fois le istio-injection et le libellé de révision, toutes les commandes kubectl label de la documentation Anthos Service Mesh incluent la suppression du libellé istio-injection.

  3. Redémarrez les pods concernés en suivant la procédure décrite dans la section suivante.

Maillage de services géré

  1. 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, la valeur de la colonne NAME est le libellé REVISION qui correspond à la version disponible pour la version d'Anthos Service Mesh. Appliquez ce libellé à vos espaces de noms et supprimez le libellé istio-injection (s'il existe). Dans la commande suivante, remplacez REVISION par le libellé de révision indiqué ci-dessus et remplacez NAMESPACE 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 ne portait pas précédemment le libellé istio-injection, auquel on s'attend dans de nouvelles installations d'Anthos Service Mesh ou de nouveaux déploiements. Étant donné que l'injection automatique échoue si un espace de noms possède à la fois le istio-injection et le libellé de révision, toutes les commandes kubectl label de la documentation Anthos Service Mesh incluent la suppression du libellé istio-injection.

  2. Redémarrez les pods concernés en suivant la procédure décrite dans la section suivante.

  3. Si vous avez également déployé le plan de données géré 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.

  1. 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
  2. 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 :