Algemene probleemoplossing van de Istio Service Mesh-invoegtoepassing
In dit artikel worden algemene strategieën (die gebruikmaken van kubectl
, istioctl
en andere hulpprogramma's) besproken om problemen op te lossen die betrekking hebben op de Istio Service Mesh-invoegtoepassing voor Microsoft Azure Kubernetes Service (AKS). Dit artikel bevat ook een lijst met mogelijke foutberichten, redenen voor het optreden van fouten en aanbevelingen om deze fouten op te lossen.
Vereisten
Het kubectl-hulpprogramma kubectl van Kubernetes of een vergelijkbaar hulpprogramma om verbinding te maken met het cluster
Opmerking: Als u kubectl wilt installeren met behulp van Azure CLI, voert u de opdracht az aks install-cli uit.
Het opdrachtregelprogramma Istio istioctl
Het hulpprogramma Client-URL (cURL)
Controlelijst voor probleemoplossing: kubectl gebruiken
In de volgende stappen voor probleemoplossing worden verschillende kubectl
opdrachten gebruikt om vastgelopen pods of fouten in de Istio-daemon (Istiod) op te sporen.
Stap 1: Istiod-podlogboeken ophalen
Haal de Istiod-podlogboeken op door de volgende opdracht kubectl-logboeken uit te voeren:
kubectl logs --selector app=istiod --namespace aks-istio-system
Stap 2: een pod verwijderen (verwijderen)
Mogelijk hebt u een goede reden om een pod opnieuw op te starten. Omdat Istiod een implementatie is, kunt u de pod veilig verwijderen door de opdracht kubectl delete uit te voeren:
kubectl delete pods <istio-pod> --namespace aks-istio-system
De Istio-pod wordt beheerd door een implementatie, zodat de pod automatisch opnieuw wordt gemaakt en opnieuw wordt geïmplementeerd nadat u de Istio-pod rechtstreeks hebt verwijderd. Daarom is het verwijderen van de pod een alternatieve methode om de pod opnieuw op te starten.
Opmerking
U kunt de implementatie ook rechtstreeks opnieuw starten door de volgende opdracht voor het opnieuw opstarten van kubectl-implementatie uit te voeren:
kubectl rollout restart deployment <istiod-asm-revision> --namespace aks-istio-system
Stap 3: de status van resources controleren
Als Istiod niet is gepland of als de pod niet reageert, kunt u de status van de implementatie en de replicasets controleren. Voer hiervoor de opdracht kubectl get uit:
kubectl get <resource-type> [[--selector app=istiod] | [<resource-name>]]
De huidige resourcestatus wordt aan het einde van de uitvoer weergegeven. De uitvoer kan ook gebeurtenissen weergeven die zijn gekoppeld aan de controllerlus.
Stap 4: aangepaste resourcedefinitietypen ophalen
Voer de opdracht uit om de typen aangepaste resourcedefinities (CRD's) weer te geven kubectl get
die Door Istio gebruikt:
kubectl get crd | grep istio
Voer vervolgens de volgende kubectl get
opdracht uit om alle resourcenamen weer te geven die zijn gebaseerd op een bepaalde CRD:
kubectl get <crd-type> --all-namespaces
Stap 5: De lijst met Istiod-pods weergeven
Bekijk de lijst met Istiod-pods door de volgende kubectl get
opdracht uit te voeren:
kubectl get pod --namespace aks-istio-system --output yaml
Stap 6: Meer informatie over de Envoy-configuratie
Als u verbindingsproblemen ondervindt tussen pods, vindt u meer informatie over de Envoy-configuratie door de volgende kubectl exec-opdracht uit te voeren op de beheerderspoort van 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
Stap 7: De sidecar-logboeken ophalen voor de bron- en doel sidecars
Haal de sidecar-logboeken voor de bron- en doel sidecars op door de volgende kubectl logs
opdracht twee keer uit te voeren (de eerste keer voor de bronpod en de tweede keer voor de doelpod):
kubectl logs <pod-name> --namespace <pod-namespace> --container istio-proxy
Controlelijst voor probleemoplossing: istioctl gebruiken
In de volgende stappen voor probleemoplossing wordt beschreven hoe u gegevens verzamelt en fouten in uw mesh-omgeving opspoort door verschillende istioctl
opdrachten uit te voeren.
Waarschuwing
Sommige istioctl
opdrachten verzenden aanvragen naar alle sidecars.
Opmerking
Voordat u begint, ziet u dat u voor de meeste istioctl
opdrachten de revisie van het besturingsvlak moet kennen. U kunt deze informatie ophalen uit het achtervoegsel van de Istiod-implementaties of de pods, of u kunt de volgende istioctl-taglijstopdracht uitvoeren:
istioctl tag list
Stap 1: Controleer of Istio correct is geïnstalleerd
Voer de volgende istioctl verify-install-opdracht uit om te controleren of u de juiste installatie van de Istio-invoegtoepassing hebt:
istioctl verify-install --istioNamespace aks-istio-system --revision <tag>
Stap 2: naamruimten analyseren
Voer de volgende istioctl analyze-opdracht uit om alle naamruimten te analyseren of om een specifieke naamruimte te analyseren:
istioctl analyze --istioNamespace aks-istio-system \
--revision <tag> \
[--all-namespaces | --namespace <namespace-name>] \
[--failure-threshold {Info | Warning | Error}]
Stap 3: de proxystatus ophalen
Voer de volgende opdracht istioctl proxystatus uit om de proxystatus op te halen:
istioctl proxy-status pod/<pod-name> \
--istioNamespace aks-istio-system \
--revision <tag> \
--namespace <pod-namespace>
Stap 4: de proxyconfiguratie downloaden
Als u de proxyconfiguratie wilt downloaden, voert u de volgende istioctl proxy-config all-opdracht uit:
istioctl proxy-config all <pod-name> \
--istioNamespace aks-istio-system \
--namespace <pod-namespace> \
--output json
Opmerking
In plaats van de all
variant van de istioctl proxy-config
opdracht te gebruiken, kunt u een van de volgende varianten gebruiken:
Stap 5: De injectiestatus controleren
Als u de injectiestatus van de resource wilt controleren, voert u de volgende experimentele controle-inject-opdracht istioctl uit:
istioctl experimental check-inject --istioNamespace aks-istio-system \
--namespace <pod-namespace> \
--labels <label-selector> | <pod-name> | deployment/<deployment-name>
Stap 6: Een volledig foutenrapport ophalen
Een volledig foutenrapport bevat de meest gedetailleerde informatie. Het kan echter ook tijdrovend zijn op een groot cluster, omdat het alle pods bevat. U kunt het foutenrapport beperken tot bepaalde naamruimten. U kunt het rapport ook beperken tot bepaalde implementaties, pods of labelselectors.
Voer de volgende opdracht istioctl bug-report uit om een foutenrapport op te halen:
istioctl bug-report --istioNamespace aks-istio-system \
[--include <namespace-1>[, <namespace-2>[, ...]]]
Controlelijst voor probleemoplossing: diverse problemen
Stap 1: problemen met resourcegebruik oplossen
Als u een hoog geheugenverbruik ondervindt in Envoy, controleert u uw Envoy-instellingen voor het verzamelen van statistiekengegevens. Als u metrische Istio-gegevens viaMeshConfig wilt aanpassen, moet u er rekening mee houden dat bepaalde metrische gegevens een hoge kardinaliteit kunnen hebben en daarom een hogere geheugenvoetafdruk kunnen creëren. Andere velden in MeshConfig, zoals gelijktijdigheid, zijn van invloed op het CPU-gebruik en moeten zorgvuldig worden geconfigureerd.
Standaard voegt Istio informatie over alle services die zich in het cluster bevinden toe aan elke Envoy-configuratie. De Sidecar kan het bereik van deze toevoeging beperken tot workloads binnen specifieke naamruimten. Zie Kijk uit voor deze istio proxy sidecar geheugen valkuil voor meer informatie.
De volgende Sidecar
definitie in de aks-istio-system
naamruimte beperkt bijvoorbeeld de envoy-configuratie voor alle proxy's in de mesh en aks-istio-system
andere workloads binnen dezelfde naamruimte als die specifieke toepassing.
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/*"
U kunt ook de optie Istio discoverySelectors gebruiken in MeshConfig. De discoverySelectors
optie bevat een matrix met Kubernetes-selectors en kan de bekendheid van Istiod beperken tot specifieke naamruimten (in tegenstelling tot alle naamruimten in het cluster). Zie Detectiekiezers gebruiken om naamruimten te configureren voor uw Istio-service-mesh voor meer informatie.
Stap 2: Problemen met onjuiste configuratie van verkeer en beveiliging oplossen
Zie Problemen met verkeersbeheer en beveiligingsproblemen op de Istio-website om veelvoorkomende problemen met verkeersbeheer en onjuiste configuratie van beveiliging op te lossen die Gebruikers van Istio vaak tegenkomen.
Zie Veelvoorkomende problemen op de documentatiesite van Istio voor koppelingen naar discussies over andere problemen, zoals sidecar-injectie, waarneembaarheid en upgrades.
Stap 3: Overbelasting van CoreDNS voorkomen
Voor problemen die betrekking hebben op coreDNS-overbelasting moet u mogelijk bepaalde DNS-instellingen van Istio wijzigen, zoals het dnsRefreshRate
veld in de Definitie van Istio MeshConfig.
Stap 4: pod- en sidecar-raceomstandigheden oplossen
Als uw toepassingspod wordt gestart voordat de Envoy-sidecar wordt gestart, reageert de toepassing mogelijk niet meer of wordt deze opnieuw opgestart. Zie Pod of containers starten met netwerkproblemen als istio-proxy niet gereed is voor instructies over het voorkomen van dit probleem. Het instellen van het holdApplicationUntilProxyStarts
veld MeshConfig onder op defaultConfig
kan true
helpen deze raceomstandigheden te voorkomen.
Foutberichten
De volgende tabel bevat een lijst met mogelijke foutberichten (voor het implementeren van de invoegtoepassing, het inschakelen van gateways voor inkomend verkeer en het uitvoeren van upgrades), de reden waarom een fout is opgetreden en aanbevelingen voor het oplossen van de fout.
Error | Reden | Aanbevelingen |
---|---|---|
Azure service mesh is not supported in this region |
De functie is tijdens de preview niet beschikbaar in de regio (deze is beschikbaar in de openbare cloud, maar niet in de onafhankelijke cloud). | Raadpleeg openbare documentatie over de functie in ondersteunde regio's. |
Missing service mesh mode: {} |
U hebt de moduseigenschap niet ingesteld in het service mesh-profiel van de aanvraag voor het beheerde cluster. | Stel in het veld ServiceMeshProfile van de managedCluster API-aanvraag de mode eigenschap in op Istio . |
Invalid istio ingress mode: {} |
U stelt een ongeldige waarde in voor de modus voor inkomend verkeer bij het toevoegen van inkomend verkeer binnen het service mesh-profiel. | Stel de toegangsmodus in de API-aanvraag in op of External Internal . |
Too many ingresses for type: {}. Only {} ingress gateway are allowed |
U hebt geprobeerd te veel ingresses op het cluster te maken. | Creatie maximaal één extern inkomend en één intern inkomend verkeer op het cluster. |
Istio profile is missing even though Service Mesh mode is Istio |
U hebt de Istio-invoegtoepassing ingeschakeld zonder het Istio-profiel op te geven. | Wanneer u de Istio-invoegtoepassing inschakelt, geeft u componentspecifieke informatie (gateway voor inkomend verkeer, invoegtoepassing-CA) op voor het Istio-profiel en de specifieke revisie. |
Istio based Azure service mesh is incompatible with feature %s |
U hebt geprobeerd een andere extensie, invoegtoepassing of functie te gebruiken die momenteel niet compatibel is met de Istio-invoegtoepassing (bijvoorbeeld Open Service Mesh). | Voordat u de Istio-invoegtoepassing inschakelt, moet u eerst de andere functie uitschakelen en alle bijbehorende resources opschonen. |
ServiceMeshProfile is missing required parameters: %s for plugin certificate authority |
U hebt niet alle vereiste parameters opgegeven voor invoegtoepassings-CA. | Geef alle vereiste parameters op voor de functie certificeringsinstantie (CA) van de invoegtoepassing (zie Een op Istio gebaseerde service mesh-invoegtoepassing instellen met ca-certificaten voor invoegtoepassingen). |
AzureKeyvaultSecretsProvider addon is required for Azure Service Mesh plugin certificate authority feature |
U hebt de invoegtoepassing AKS Secrets-Store CSI-stuurprogramma niet ingeschakeld voordat u de ca voor de invoegtoepassing hebt gebruikt. | Stel Azure Key Vault in voordat u de invoegtoepassing CA-functie gebruikt. |
'KeyVaultId': '%s' is not a valid Azure keyvault resource identifier. Please make sure that the format matches '/subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/' |
U hebt een ongeldige AKS-resource-id gebruikt. | Zie de indeling die wordt vermeld in het foutbericht om een geldige Azure Key Vault-id in te stellen voor de invoegtoepassings-CA-functie. |
Kubernetes version is missing in orchestrator profile |
De Kubernetes-versie ontbreekt in uw aanvraag. Daarom kan er geen versiecompatibiliteitscontrole worden uitgevoerd. | Zorg ervoor dat u de Kubernetes-versie opgeeft in de upgradebewerkingen van de Istio-invoegtoepassing. |
Service mesh revision %s is not compatible with cluster version %s. To find information about mesh-cluster compatibility, use 'az aks mesh get-upgrades' |
U hebt geprobeerd een Istio-invoegtoepassingsrevisie in te schakelen die niet compatibel is met de huidige versie van het Kubernetes-cluster. | Gebruik de Azure CLI-opdracht az aks mesh get-upgrades om erachter te komen welke Istio-invoegtoepassingsrevisies beschikbaar zijn voor het huidige cluster. |
Kubernetes version %s not supported. Please upgrade to a supported cluster version first. To find compatibility information, use 'az aks mesh get-upgrades' |
U gebruikt een niet-ondersteunde Kubernetes-versie. | Voer een upgrade uit naar een ondersteunde Kubernetes-versie. |
ServiceMeshProfile revision field must not be empty |
U hebt geprobeerd de Istio-invoegtoepassing te upgraden zonder een revisie op te geven. | Geef de revisie en alle andere parameters op (zie Secundaire revisie-upgrade voor meer informatie). |
Request exceeds maximum allowed number of revisions (%d) |
U hebt geprobeerd een upgradebewerking uit te voeren, ook al zijn er al (%d) revisies geïnstalleerd. |
Voltooi of terugdraai de upgradebewerking voordat u een upgrade uitvoert naar een andere revisie. |
Mesh upgrade is in progress. Please complete or roll back the current upgrade before attempting to retrieve versioning and compatibility information |
U hebt geprobeerd toegang te krijgen tot revisie- en compatibiliteitsinformatie voordat u de huidige upgradebewerking hebt voltooid of terugdraait. | Voltooi of terugdraai de huidige upgradebewerking voordat u revisie- en compatibiliteitsgegevens ophaalt. |
Verwijzingen
Zie Diagnostische hulpprogramma's van Istio voor algemene tips over foutopsporing in Istio
Problemen met De Mesh-invoegtoepassing van De Istio-service mesh oplossen
Problemen met de gateway voor inkomend verkeer van Istio Service Mesh-invoegtoepassing oplossen
Problemen met kleine revisieupgrades van de Istio-service mesh-invoegtoepassing oplossen
Disclaimerinformatie van derden
De producten van derden die in dit artikel worden vermeld, worden vervaardigd door bedrijven die onafhankelijk zijn van Microsoft. Microsoft verleent dan ook geen enkele garantie, impliciet noch anderszins, omtrent de prestaties of de betrouwbaarheid van deze producten.
Contacteer ons voor hulp
Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Feedback-community van Azure.