Résolution des problèmes généraux du module complémentaire Istio Service Mesh

Cet article décrit les stratégies générales (qui utilisent kubectl, istioctlet d’autres outils) pour résoudre les problèmes liés au module complémentaire Istio Service Mesh pour Microsoft Azure Kubernetes Service (AKS). Cet article fournit également la liste des messages d’erreur possibles, les raisons des occurrences d’erreurs et des recommandations pour résoudre ces erreurs.

Configuration requise

Liste de vérification de la résolution des problèmes : utilisation de kubectl

Les étapes de dépannage suivantes utilisent différentes kubectl commandes pour vous aider à déboguer des pods bloqués ou des échecs dans le démon Istio (Istiod).

Étape 1 : Obtenir les journaux des pods Istiod

Obtenez les journaux du pod Istiod en exécutant la commande kubectl logs suivante :

kubectl logs --selector app=istiod --namespace aks-istio-system

Étape 2 : Rebondir (supprimer) un pod

Vous pouvez avoir une bonne raison de redémarrer un pod. Étant donné qu’Istiod est un déploiement, vous pouvez simplement supprimer le pod en exécutant la commande kubectl delete :

kubectl delete pods <istio-pod> --namespace aks-istio-system

Le pod Istio étant géré par un déploiement, le pod est automatiquement recréé et redéployé après la suppression directe du pod Istio. Par conséquent, la suppression du pod est une méthode alternative pour redémarrer le pod.

Remarque

Vous pouvez également redémarrer le déploiement directement en exécutant la commande kubectl rollout restart suivante :

kubectl rollout restart deployment <istiod-asm-revision> --namespace aks-istio-system

Étape 3 : Vérifier la status des ressources

Si Istiod n’est pas planifié ou si le pod ne répond pas, vous pouvez case activée le status du déploiement et les jeux d’réplica. Pour ce faire, exécutez la commande kubectl get :

kubectl get <resource-type> [[--selector app=istiod] | [<resource-name>]]

La ressource actuelle status apparaît vers la fin de la sortie. La sortie peut également afficher des événements associés à sa boucle de contrôleur.

Étape 4 : Obtenir des types de définition de ressource personnalisés

Pour afficher les types de définitions de ressources personnalisées (CRD) qu’Istio utilise, exécutez la kubectl get commande :

kubectl get crd | grep istio

Ensuite, exécutez la commande suivante kubectl get pour répertorier tous les noms de ressources basés sur un CRD particulier :

kubectl get <crd-type> --all-namespaces

Étape 5 : Afficher la liste des pods Istiod

Affichez la liste des pods Istiod en exécutant la commande suivante kubectl get :

kubectl get pod --namespace aks-istio-system --output yaml

Étape 6 : Obtenir plus d’informations sur la configuration d’Envoy

Si vous rencontrez des problèmes de connectivité entre les pods, obtenez plus d’informations sur la configuration d’Envoy en exécutant la commande kubectl exec suivante sur le port d’administration d’Envoy :

kubectl exec --namespace <pod-namespace> \
    "$(kubectl get pods \
        --namespace <pod-namespace> \
        --selector app=sleep \
        --output jsonpath='{.items[0].metadata.name}')" \
    --container sleep \
-- curl -s localhost:15000/clusters

Étape 7 : Obtenir les journaux de side-car pour les side-car source et de destination

Récupérez les journaux side-car des side-car source et de destination en exécutant la commande suivante kubectl logs deux fois (la première fois pour le pod source et la deuxième fois pour le pod de destination) :

kubectl logs <pod-name> --namespace <pod-namespace> --container istio-proxy

Liste de vérification de la résolution des problèmes : utilisation d’istioctl

Les étapes de résolution des problèmes suivantes décrivent comment collecter des informations et déboguer votre environnement de maillage en exécutant différentes istioctl commandes.

Avertissement

Certaines istioctl commandes envoient des requêtes à tous les side-cars.

Remarque

Avant de commencer, notez que la plupart istioctl des commandes nécessitent que vous connaissiez la révision du plan de contrôle. Vous pouvez obtenir ces informations à partir du suffixe des déploiements Istiod ou des pods, ou vous pouvez exécuter la commande istioctl tag list suivante :

istioctl tag list

Étape 1 : Vérifier qu’Istio est installé correctement

Pour vérifier que vous disposez d’une installation de module complémentaire Istio correcte, exécutez la commande istioctl verify-install suivante :

istioctl verify-install --istioNamespace aks-istio-system --revision <tag>

Étape 2 : Analyser les espaces de noms

Pour analyser tous les espaces de noms ou pour analyser un espace de noms spécifique, exécutez la commande istioctl analyze suivante :

istioctl analyze --istioNamespace aks-istio-system \
    --revision <tag> \
    [--all-namespaces | --namespace <namespace-name>] \
    [--failure-threshold {Info | Warning | Error}]

Étape 3 : Obtenir le proxy status

Pour récupérer le proxy status, exécutez la commande istioctl proxy-status suivante :

istioctl proxy-status pod/<pod-name> \
    --istioNamespace aks-istio-system \
    --revision <tag> \
    --namespace <pod-namespace>

Étape 4 : Télécharger la configuration du proxy

Pour télécharger la configuration du proxy, exécutez la commande istioctl proxy-config all suivante :

istioctl proxy-config all <pod-name> \
    --istioNamespace aks-istio-system \
    --namespace <pod-namespace> \
    --output json

Remarque

Au lieu d’utiliser la all variante de la istioctl proxy-config commande, vous pouvez utiliser l’une des variantes suivantes :

Étape 5 : Vérifier le status d’injection

Pour case activée le status d’injection de la ressource, exécutez la commande expérimentale istioctl case activée-inject suivante :

istioctl experimental check-inject --istioNamespace aks-istio-system \
    --namespace <pod-namespace> \
    --labels <label-selector> | <pod-name> | deployment/<deployment-name>

Étape 6 : Obtenir un rapport de bogue complet

Un rapport de bogue complet contient les informations les plus détaillées. Toutefois, cela peut également prendre du temps sur un grand cluster, car il inclut tous les pods. Vous pouvez limiter le rapport de bogues à certains espaces de noms. Vous pouvez également limiter le rapport à certains déploiements, pods ou sélecteurs d’étiquettes.

Pour récupérer un rapport de bogue, exécutez la commande istioctl bug-report suivante :

istioctl bug-report --istioNamespace aks-istio-system \
    [--include <namespace-1>[, <namespace-2>[, ...]]]

Liste de vérification de la résolution des problèmes : Problèmes divers

Étape 1 : Résoudre les problèmes d’utilisation des ressources

Si vous rencontrez une consommation élevée de mémoire dans Envoy, case activée vos paramètres Envoy pour la collecte de données statistiques. Si vous personnalisez des métriques Istio via MeshConfig, n’oubliez pas que certaines métriques peuvent avoir une cardinalité élevée et, par conséquent, créer un encombrement mémoire plus élevé. D’autres champs dans MeshConfig, tels que l’accès concurrentiel, affectent l’utilisation du processeur et doivent être configurés avec soin.

Par défaut, Istio ajoute des informations sur tous les services qui se trouvent dans le cluster à chaque configuration Envoy. Le side-car peut limiter l’étendue de cet ajout aux charges de travail au sein d’espaces de noms spécifiques uniquement. Pour plus d’informations, consultez Attention à ce piège de mémoire side-car de proxy Istio.

Par exemple, la définition suivante Sidecar dans l’espace aks-istio-system de noms limite la configuration d’Envoy pour tous les proxys du maillage à et d’autres aks-istio-system charges de travail au sein du même espace de noms que cette application spécifique.

apiVersion: networking.istio.io/v1alpha3
kind: Sidecar
metadata:
  name: sidecar-restrict-egress
  namespace: aks-istio-system  # Needs to be deployed in the root namespace.
spec:
  egress:
  - hosts:
    - "./*"
    - "aks-istio-system/*"

Vous pouvez également essayer d’utiliser l’option Istio discoverySelectors dans MeshConfig. L’option discoverySelectors contient un tableau de sélecteurs Kubernetes et peut restreindre la connaissance d’Istiod à des espaces de noms spécifiques (par opposition à tous les espaces de noms du cluster). Pour plus d’informations, consultez Utiliser des sélecteurs de découverte pour configurer des espaces de noms pour votre maillage de service Istio.

Étape 2 : Résoudre les problèmes de configuration incorrecte du trafic et de la sécurité

Pour résoudre les problèmes courants de gestion du trafic et de configuration de sécurité que les utilisateurs d’Istio rencontrent fréquemment, consultez Problèmes de gestion du trafic et Problèmes de sécurité sur le site web Istio.

Pour obtenir des liens vers des discussions sur d’autres problèmes, tels que l’injection de side-car, l’observabilité et les mises à niveau, consultez Problèmes courants sur le site de documentation Istio.

Étape 3 : Éviter la surcharge CoreDNS

Les problèmes liés à la surcharge CoreDNS peuvent nécessiter la modification de certains paramètres DNS Istio, tels que le dnsRefreshRate champ dans la définition Istio MeshConfig.

Étape 4 : Corriger les conditions de concurrence des pods et des side-cars

Si votre pod d’application démarre avant le side-car Envoy, l’application peut ne plus répondre ou redémarrer. Pour obtenir des instructions sur la façon d’éviter ce problème, consultez Le pod ou les conteneurs commencent par des problèmes réseau si istio-proxy n’est pas prêt. Plus précisément, la définition du holdApplicationUntilProxyStarts champ MeshConfig sous sur defaultConfigtrue peut aider à empêcher ces conditions de concurrence.

Messages d’erreur

Le tableau suivant contient une liste de messages d’erreur possibles (pour le déploiement du module complémentaire, l’activation des passerelles d’entrée et l’exécution de mises à niveau), la raison pour laquelle une erreur s’est produite et des recommandations pour résoudre l’erreur.

Erreur Reason Recommandations
Azure service mesh is not supported in this region La fonctionnalité n’est pas disponible dans la région pendant la préversion (elle est disponible dans le cloud public, mais pas dans le cloud souverain). Reportez-vous à la documentation publique sur la fonctionnalité dans les régions prises en charge.
Missing service mesh mode: {} Vous n’avez pas défini la propriété mode dans le profil de maillage de service de la demande de cluster managé. Dans le champ ServiceMeshProfile de la demande d’API managedCluster , définissez la propriété sur modeIstio.
Invalid istio ingress mode: {} Vous définissez une valeur non valide pour le mode d’entrée lors de l’ajout d’une entrée dans le profil de maillage de service. Définissez le mode d’entrée dans la demande d’API sur External ou Internal.
Too many ingresses for type: {}. Only {} ingress gateway are allowed Vous avez essayé de créer trop d’entrées sur le cluster. Create, au maximum, une entrée externe et une entrée interne sur le cluster.
Istio profile is missing even though Service Mesh mode is Istio Vous avez activé le module complémentaire Istio sans fournir le profil Istio. Lorsque vous activez le module complémentaire Istio, spécifiez les informations propres au composant (passerelle d’entrée, autorité de certification de plug-in) pour le profil Istio et la révision particulière.
Istio based Azure service mesh is incompatible with feature %s Vous avez essayé d’utiliser une autre extension, extension ou fonctionnalité actuellement incompatible avec le module complémentaire Istio (par exemple, Open Service Mesh). Avant d’activer le module complémentaire Istio, désactivez d’abord l’autre fonctionnalité et propre toutes les ressources correspondantes.
ServiceMeshProfile is missing required parameters: %s for plugin certificate authority Vous n’avez pas fourni tous les paramètres requis pour l’autorité de certification du plug-in. Fournissez tous les paramètres requis pour la fonctionnalité d’autorité de certification du plug-in (pour plus d’informations, consultez Configurer le module complémentaire de maillage de service basé sur Istio avec des certificats d’autorité de certification de plug-in).
AzureKeyvaultSecretsProvider addon is required for Azure Service Mesh plugin certificate authority feature Vous n’avez pas activé le module complémentaire AKS Secrets-Store CSI Driver avant d’utiliser l’autorité de certification du plug-in. Configurez Azure Key Vault avant d’utiliser la fonctionnalité d’autorité de certification du plug-in.
'KeyVaultId': '%s' is not a valid Azure keyvault resource identifier. Please make sure that the format matches '/subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/' Vous avez utilisé un ID de ressource AKS non valide. Consultez le format mentionné dans le message d’erreur pour définir un ID de Key Vault Azure valide pour la fonctionnalité d’autorité de certification du plug-in.
Kubernetes version is missing in orchestrator profile La version de Kubernetes est manquante dans votre requête. Par conséquent, il ne peut pas effectuer de compatibilité de version case activée. Veillez à fournir la version de Kubernetes dans les opérations de mise à niveau du module complémentaire Istio.
Service mesh revision %s is not compatible with cluster version %s. To find information about mesh-cluster compatibility, use 'az aks mesh get-upgrades' Vous avez essayé d’activer une révision de module complémentaire Istio incompatible avec la version actuelle du cluster Kubernetes. Utilisez la commande Azure CLI az aks mesh get-upgrades pour savoir quelles révisions de module complémentaire Istio sont disponibles pour le cluster actuel.
Kubernetes version %s not supported. Please upgrade to a supported cluster version first. To find compatibility information, use 'az aks mesh get-upgrades' Vous utilisez une version de Kubernetes non prise en charge. Effectuez une mise à niveau vers une version de Kubernetes prise en charge.
ServiceMeshProfile revision field must not be empty Vous avez essayé de mettre à niveau le module complémentaire Istio sans spécifier de révision. Spécifiez la révision et tous les autres paramètres (pour plus d’informations, consultez Mise à niveau de révision mineure).
Request exceeds maximum allowed number of revisions (%d) Vous avez essayé d’effectuer une opération de mise à niveau même si des révisions sont déjà (%d) installées. Terminez ou restaurez l’opération de mise à niveau avant la mise à niveau vers une autre révision.
Mesh upgrade is in progress. Please complete or roll back the current upgrade before attempting to retrieve versioning and compatibility information Vous avez essayé d’accéder aux informations de révision et de compatibilité avant de terminer ou de restaurer l’opération de mise à niveau actuelle. Terminez ou restaurez l’opération de mise à niveau actuelle avant de récupérer les informations de révision et de compatibilité.

References

Exclusion de responsabilité de tiers

Les produits tiers mentionnés dans le présent article sont fabriqués par des sociétés indépendantes de Microsoft. Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces produits.

Contactez-nous pour obtenir de l’aide

Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également soumettre des commentaires sur les produits à la communauté de commentaires Azure.