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
, 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, les raisons des occurrences d’erreurs et des recommandations pour résoudre ces erreurs.
Configuration requise
L’outil Kubernetes kubectl ou un outil similaire pour se connecter au cluster
Note: Pour installer kubectl à l’aide d’Azure CLI, exécutez la commande az aks install-cli .
Outil en ligne de commande Istio istioctl
Outil URL du client (cURL)
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 :
- istioctl proxy-config ecds (service de découverte de configuration d’extension)
- istioctl proxy-config bootstrap
- istioctl proxy-config cluster
- istioctl proxy-config endpoint
- istioctl proxy-config listener
- istioctl proxy-config log
- istioctl proxy-config route
- istioctl proxy-config secret
É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 defaultConfig
true
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 mode Istio . |
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
Pour obtenir des conseils généraux sur le débogage Istio, consultez Outils de diagnostic Istio
Résolution des problèmes liés au module complémentaire MeshConfig 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.