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
, istioctl
et 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
L’outil Kubernetes kubectl ou un outil similaire pour se connecter au cluster
Remarque : Pour installer kubectl à l’aide d’Azure CLI, exécutez la commande az aks install-cli .
Outil en ligne de commande Istio istioctl
Outil cURL (Client URL)
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 :
- istioctl proxy-config ecds (service de découverte de configuration d’extension)
- istioctl proxy-config bootstrap
- cluster istioctl proxy-config
- point de terminaison proxy-config istioctl
- écouteur istioctl proxy-config
- istioctl proxy-config log
- istioctl proxy-config route
- istioctl proxy-config secret
É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é Istio sur . |
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
Pour obtenir des conseils généraux sur le débogage d’Istio, consultez les outils de diagnostic Istio
Résolution des problèmes liés au module complémentaire MeshConfig du maillage de service Istio
Résolution des problèmes de passerelle d’entrée du module complémentaire Istio Service Mesh
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.