Options de configuration depods Google Kubernetes Engine avec injection Envoy automatique

Ce guide fournit des informations sur les options et les tâches supplémentaires associées à l'injecteur side-car Envoy automatique.

Ajouter des proxys side-car aux charges de travail existantes

Une fois que vous avez installé l'injecteur side-car sur vos clusters, les proxys side-car sont automatiquement injectés dans des pods créés dans les espaces de noms activés. Si des charges de travail sont déjà en cours d'exécution avant l'activation de l'injecteur side-car, vous devez les redémarrer pour que l'injection aboutisse.

Pour les pods gérés par un objet Deployment, DaemonSet ou StatefulSet, vous pouvez exécuter la commande suivante :

# Deployment
kubectl rollout restart daemonset/DEPLOYMENT_NAME --namespace NAMESPACE

# DaemonSet
kubectl rollout restart deployment/DAEMONSET_NAME --namespace NAMESPACE

# StatefulSet
kubectl rollout restart statefulset/STATEFULSET_NAME --namespace NAMESPACE

Si vous n'avez utilisé aucun des contrôleurs ci-dessus pour déployer vos pods, vous devez les supprimer individuellement. Ils sont ensuite automatiquement recréés avec de nouveaux proxys side-car.

kubectl delete pod POD_NAME -n NAMESPACE

Vérifiez qu'un conteneur de proxy side-car a été injecté dans chacun de vos pods :

kubectl get pods -n NAMESPACE

Par exemple, avec le client Busybox créé ci-dessus, vous devriez voir 2/2 pods en cours d'exécution, un pour l'application Busybox elle-même et un pour le proxy side-car Envoy injecté :

NAME                      READY   STATUS    RESTARTS   AGE
busybox-c54f578c9-c9fk4   2/2     Running   183        7d15h

Remplacement d'injection

Par défaut, l'activation d'un espace de noms active l'injection du proxy side-car pour tous les pods résidents. L'injection peut également être configurée de manière sélective pour différents champs d'application afin de répondre à des besoins spécifiques. Par exemple, des valeurs de remplacement doivent être utilisées pour éviter l'injection de proxy side-car pour les services gRPC sans proxy.

Notez que les remplacements d'injection ne s'appliquent que lorsque l'espace de noms est activé et qu'ils prennent effet selon la priorité suivante : Annotations de pod > NeverInjectSelector > AlwaysInjectSelector > Règle par défaut

Activer/Désactiver l'injection pour des pods individuels spécifiques

Utilisez l'annotation de pod suivante pour activer ou désactiver l'injection d'un pod spécifique dans un espace de noms activé :

...
metadata:
  annotations:
    sidecar.istio.io/inject: "true" / "false"

Activer/Désactiver l'injection de groupes de pods spécifiques

L'injecteur side-car peut être configuré pour toujours ou ne jamais injecter des pods dans les espaces de noms activés en fonction d'un tableau de sélecteurs de libellés Kubernetes. Par exemple, utilisez les commandes suivantes pour configurer l'injecteur side-car pour ne pas injecter de proxy side-car si le pod possède le libellé "run=client" :

kubectl edit configmap -n istio-control istio-sidecar-injector

...
config: |-
  policy: enabled
  alwaysInjectSelector:
    []

  neverInjectSelector:
    - matchLabels:
        run: client
...

Les déploiements d'injecteurs side-car existants doivent être redémarrés pour que cette configuration prenne effet.

Configurer les métadonnées du proxy side-car

Pour être compatibles avec les fonctionnalités supplémentaires de Traffic Director, les proxys side-car peuvent hériter de métadonnées spécifiques de leurs pods d'encapsulation. Par exemple, incluez l'annotation suivante dans votre spécification de déploiement pour appliquer le libellé "version=v2" à ses proxys side-car injectés.

...
metadata:
  annotations:
    cloud.google.com/proxyMetadata: '{"version": "v2"}'

Le filtrage des configurations permet ensuite à Traffic Director de ne partager un sous-ensemble de configuration qu'avec les proxys spécifiques qui correspondent à cette étiquette "version=v2".

Pour que cette configuration prenne effet, vous devez redémarrer les déploiements existants.

Annotations de pod compatibles

Traffic Director accepte les annotations de pod suivantes pour l'injection side-car. Bien que d'autres annotations d'injecteur side-car puissent fonctionner, la liste suivante décrit les annotations compatibles avec Traffic Director. Pour éviter les risques de faille ou d'instabilité, ne créez pas de dépendances sur d'autres annotations dans votre déploiement en production.

Nom de l'annotation Value Description
sidecar.istio.io/inject Valeur booléenne, représentée sous forme de chaîne. Exemple : "true" Indique si un side-car Envoy doit être automatiquement injecté dans la charge de travail.
cloud.google.com/proxyMetadata Carte JSON des paires clé/valeur. Exemple : "'{"version": "v2"}'" Spécifie les paires clé/valeur dans une carte JSON à ajouter aux métadonnées Envoy.

Désinstaller l'injecteur side-car

Désinstallez l'injecteur side-car à l'aide des commandes suivantes :

kubectl delete -f specs/
kubectl label namespace default istio-injection-