Partager via


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

Cet article traite des 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, des raisons d’occurrences d’erreurs et des recommandations pour résoudre ces erreurs.

Prerequisites

Liste de contrôle de 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 de pod Istiod en exécutant la commande kubectl logs suivante :

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

Étape 2 : Rebond (suppression) d’un pod

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

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

Le pod Istio est géré par un déploiement. Il est automatiquement recréé et redéployé une fois que vous l’avez supprimé directement. Par conséquent, la suppression du pod est une autre méthode pour redémarrer le pod.

Note

Vous pouvez également redémarrer le déploiement directement en exécutant la commande de redémarrage du déploiement kubectl suivante :

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

Étape 3 : Vérifier l’état des ressources

Si Istiod n’est pas planifié ou si le pod ne répond pas, vous pouvez vérifier l’état du déploiement et des jeux de réplicas. Pour ce faire, exécutez la commande kubectl get :

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

L’état actuel de la ressource apparaît à 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) que Istio utilise, exécutez la kubectl get commande :

kubectl get crd | grep istio

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

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

Étape 5 : Afficher la liste des pods Istiod

Pour afficher la liste des pods Istiod, exécutez la commande suivante kubectl get :

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

Étape 6 : Obtenir plus d’informations sur la configuration 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 sidecars source et de destination

Récupérez les journaux de sidecar pour les sidecars 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 contrôle de résolution des problèmes : Utilisation d’istioctl

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

Toutes les istioctl commandes doivent être exécutées avec l’indicateur --istioNamespace aks-istio-system pour pointer vers l’installation du module complémentaire AKS d’Istio.

Avertissement

Certaines istioctl commandes envoient des demandes à tous les sidecars.

Note

Avant de commencer, notez que la plupart des istioctl commandes vous obligent à connaître 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 de liste de balises istioctl suivante :

istioctl tag list

Étape 1 : Vérifier que Istio est installé correctement

Pour vérifier que vous disposez d’une installation correcte du module complémentaire Istio, 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 d’analyse istioctl suivante :

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

Étape 3 : Obtenir l’état du proxy

Pour récupérer l’état du proxy, 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 suivante :

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

Note

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 l’état de l’injection

Pour vérifier l’état d’injection de la ressource, exécutez la commande istioctl expérimentale check-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, l’exécution de ce rapport peut prendre du temps sur un cluster volumineux, 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 contrôle de 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, vérifiez vos paramètres Envoy pour la collecte des données de 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 la concurrence, 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 qui se trouvent dans des espaces de noms spécifiques uniquement. Pour plus d’informations, consultez Attention à ce piège de mémoire side-car proxy Istio.

Par exemple, la définition suivante Sidecar dans l’espace aks-istio-system de noms limite la configuration Envoy pour tous les proxys entre le maillage aks-istio-system et d’autres charges de travail dans le 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 sensibilisation 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 configuration incorrecte de la gestion du trafic et de sécurité rencontrés par les utilisateurs Istio, consultez les problèmes de gestion du trafic et les 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 les problèmes courants sur le site de documentation Istio.

Étape 3 : Éviter la surcharge CoreDNS

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

Étape 4 : Corriger les conditions de course des pods et des sidecars

Si votre pod d’application démarre avant le démarrage du side-car Envoy, l’application peut ne pas répondre ou redémarrer. Pour obtenir des instructions sur la façon d’éviter ce problème, consultez Pod ou conteneurs qui 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 defaultConfig MeshConfig sous pour aider à true empêcher ces conditions de concurrence.

Étape 5 : Configurer une entrée de service lors de l’utilisation d’un proxy HTTP pour le trafic sortant

Si votre cluster utilise un proxy HTTP pour l’accès Internet sortant, vous devez configurer une entrée de service. Pour plus d’informations, consultez Prise en charge du proxy HTTP dans Azure Kubernetes Service.

Messages d’erreur

Le tableau suivant contient la liste des 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 la résolution de l’erreur.

Erreur Motif 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é sur les régions prises en charge.
Missing service mesh mode: {} Vous n’avez pas défini la propriété de mode dans le profil de maillage de service de la demande de cluster managé. Dans le champ ServiceMeshProfile de la requête d’API managedCluster , définissez la mode propriété Istiosur .
Invalid istio ingress mode: {} Vous définissez une valeur non valide pour le mode d’entrée lors de l’ajout d’entrée dans le profil de maillage de service. Définissez le mode d’entrée dans la requête d’API sur l’une ou l’autre External .Internal
Too many ingresses for type: {}. Only {} ingress gateway are allowed Vous avez essayé de créer trop d’ingresses sur le cluster. Créez, au plus, 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 des informations spécifiques au composant (passerelle d’entrée, autorité de certification 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, module complémentaire 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 nettoyez 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 (ca) (pour plus d’informations, consultez Configurer le module complémentaire istio-based service mesh avec des certificats d’autorité de certification plug-in).
AzureKeyvaultSecretsProvider addon is required for Azure Service Mesh plugin certificate authority feature Vous n’avez pas activé le module complémentaire CSI du magasin des secrets AKS avant d’utiliser l’autorité de certification du plug-in. Configurez Azure Key Vault avant d’utiliser la fonctionnalité d’autorité de certification de 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 Azure Key Vault valide pour la fonctionnalité d’autorité de certification du plug-in.
Kubernetes version is missing in orchestrator profile Votre demande manque la version de Kubernetes. Par conséquent, il ne peut pas effectuer de vérification de compatibilité de version. Veillez à fournir la version 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 du 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 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 s’il existe déjà (%d) des révisions installées. Terminez ou restaurez l’opération de mise à niveau avant de procéder à 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 d’effectuer 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.