Delen via


Algemene probleemoplossing van de Istio Service Mesh-invoegtoepassing

In dit artikel worden algemene strategieën (die gebruikmaken van kubectl, istioctlen 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

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 ExternalInternal.
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

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.