Dela via


Allmän felsökning av tillägget istio-tjänstnät

Den här artikeln beskriver allmänna strategier (som använder kubectl, istioctloch andra verktyg) för att felsöka problem som är relaterade till tillägget Istio-tjänstnät för Microsoft Azure Kubernetes Service (AKS). Den här artikeln innehåller också en lista över möjliga felmeddelanden, orsaker till felhändelser och rekommendationer för att lösa dessa fel.

Förutsättningar

Checklista för felsökning: Använda kubectl

Följande felsökningssteg använder olika kubectl kommandon för att felsöka fastnade poddar eller fel i Istio-daemonen (Istiod).

Steg 1: Hämta Istiod-poddloggar

Hämta Istiod-poddloggarna genom att köra följande kubectl-loggkommando :

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

Steg 2: Studsa (ta bort) en podd

Du kan ha en bra anledning att starta om en podd. Eftersom Istiod är en distribution är det säkert att bara ta bort podden genom att köra kommandot kubectl delete :

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

Istio-podden hanteras av en distribution, så podden återskapas automatiskt och distribueras om när du har tagit bort Istio-podden direkt. Därför är borttagning av podden en alternativ metod för att starta om podden.

Obs!

Du kan också starta om distributionen direkt genom att köra följande omstartskommando för kubectl-distribution :

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

Steg 3: Kontrollera status för resurser

Om Istiod inte är schemalagt eller om podden inte svarar kanske du vill kontrollera statusen för distributionen och replikuppsättningarna. Det gör du genom att köra kommandot kubectl get :

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

Den aktuella resursstatusen visas i slutet av utdata. Utdata kan också visa händelser som är associerade med dess kontrollantslinga.

Steg 4: Hämta anpassade resursdefinitionstyper

Om du vill visa de typer av anpassade resursdefinitioner (CRD: er) som Istio använder kör kubectl get du kommandot:

kubectl get crd | grep istio

Kör sedan följande kubectl get kommando för att visa en lista över alla resursnamn som baseras på en viss CRD:

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

Steg 5: Visa listan över Istiod-poddar

Visa listan över Istiod-poddar genom att köra följande kubectl get kommando:

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

Steg 6: Få mer information om Envoy-konfigurationen

Om du har anslutningsproblem mellan poddar kan du få mer information om Envoy-konfigurationen genom att köra följande kubectl exec-kommando mot Envoys administratörsport:

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

Steg 7: Hämta sidovagnsloggarna för käll- och målbilen

Hämta sidovagnsloggarna för käll- och målbilarna genom att köra följande kubectl logs kommando två gånger (första gången för källpodden och andra gången för målpodden):

kubectl logs <pod-name> --namespace <pod-namespace> --container istio-proxy

Checklista för felsökning: Använda istioctl

Följande felsökningssteg beskriver hur du samlar in information och felsöker din mesh-miljö genom att köra olika istioctl kommandon.

Varning

Vissa istioctl kommandon skickar begäranden till alla sidovagnar.

Obs!

Observera att de flesta istioctl kommandon kräver att du känner till kontrollplanets revision innan du börjar. Du kan hämta den här informationen från suffixet för antingen Istiod-distributionerna eller poddarna, eller så kan du köra följande kommando för istioctl-tagglista :

istioctl tag list

Steg 1: Kontrollera att Istio är korrekt installerat

Kontrollera att du har rätt Istio-tilläggsinstallation genom att köra följande istioctl verify-install-kommando :

istioctl verify-install --istioNamespace aks-istio-system --revision <tag>

Steg 2: Analysera namnområden

Om du vill analysera alla namnområden eller analysera ett specifikt namnområde kör du följande istioctl analyze-kommando :

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

Steg 3: Hämta proxystatus

Hämta proxystatusen genom att köra följande istioctl proxystatuskommando :

istioctl proxy-status pod/<pod-name> \
    --istioNamespace aks-istio-system \
    --revision <tag> \
    --namespace <pod-namespace>

Steg 4: Ladda ned proxykonfigurationen

Om du vill ladda ned proxykonfigurationen kör du följande istioctl proxy-config all-kommando :

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

Obs!

I stället för att använda -varianten all av istioctl proxy-config kommandot kan du använda någon av följande varianter:

Steg 5: Kontrollera inmatningsstatusen

Kontrollera resursens inmatningsstatus genom att köra följande experimentella check-inject-kommando istioctl :

istioctl experimental check-inject --istioNamespace aks-istio-system \
    --namespace <pod-namespace> \
    --labels <label-selector> | <pod-name> | deployment/<deployment-name>

Steg 6: Hämta en fullständig felrapport

En fullständig felrapport innehåller den mest detaljerade informationen. Men det kan också vara tidskrävande i ett stort kluster eftersom det innehåller alla poddar. Du kan begränsa felrapporten till vissa namnområden. Du kan också begränsa rapporten till vissa distributioner, poddar eller etikettväljare.

Om du vill hämta en felrapport kör du följande istioctl bug-report-kommando :

istioctl bug-report --istioNamespace aks-istio-system \
    [--include <namespace-1>[, <namespace-2>[, ...]]]

Checklista för felsökning: Diverse problem

Steg 1: Åtgärda problem med resursanvändning

Om du stöter på hög minnesförbrukning i Envoy dubbelkollar du dina Envoy-inställningar för insamling av statistikdata. Om du anpassar Istio-mått via MeshConfig bör du komma ihåg att vissa mått kan ha hög kardinalitet och därför skapa ett högre fotavtryck för minnet. Andra fält i MeshConfig, till exempel samtidighet, påverkar CPU-användningen och bör konfigureras noggrant.

Som standard lägger Istio till information om alla tjänster som finns i klustret i varje Envoy-konfiguration. Sidovagnen kan begränsa omfattningen för det här tillägget till endast arbetsbelastningar inom specifika namnområden. Mer information finns i Se upp för denna Istio proxy sidovagn minne fallgrop.

Följande Sidecar definition i aks-istio-system namnområdet begränsar till exempel Envoy-konfigurationen för alla proxyservrar i nätet till aks-istio-system och andra arbetsbelastningar inom samma namnområde som det specifika programmet.

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/*"

Du kan också försöka använda alternativet Istio discoverySelectors i MeshConfig. Alternativet discoverySelectors innehåller en matris med Kubernetes-väljare och kan begränsa Istiods medvetenhet till specifika namnområden (till skillnad från alla namnområden i klustret). Mer information finns i Använda identifieringsväljare för att konfigurera namnrymder för ditt Istio-tjänstnät.

Steg 2: Åtgärda problem med felkonfiguration av trafik och säkerhet

Information om vanliga problem med felkonfiguration av trafikhantering och säkerhet som Istio-användare ofta stöter på finns i Problem med trafikhantering och säkerhetsproblem på Istio-webbplatsen.

Länkar till diskussion om andra problem, till exempel sidovagnsinmatning, observerbarhet och uppgraderingar, finns i Vanliga problem på Webbplatsen för Istio-dokumentation.

Steg 3: Undvik CoreDNS-överlagring

Problem som rör CoreDNS-överbelastning kan kräva att du ändrar vissa Istio DNS-inställningar, till exempel dnsRefreshRate fältet i Istio MeshConfig-definitionen.

Steg 4: Åtgärda tävlingsförhållanden för poddar och sidovagn

Om programpodden startar innan envoy-sidovagnen startar kan programmet sluta svara eller startas om. Anvisningar om hur du undviker det här problemet finns i Poddar eller containrar börjar med nätverksproblem om istio-proxy inte är redo. Mer specifikt kan det hjälpa att förhindra dessa konkurrensförhållanden genom att true ställa in holdApplicationUntilProxyStarts meshconfig-fältet underdefaultConfig.

Felmeddelanden

Följande tabell innehåller en lista över möjliga felmeddelanden (för att distribuera tillägget, aktivera inkommande gatewayer och utföra uppgraderingar), orsaken till att ett fel uppstod och rekommendationer för att lösa felet.

Fel Anledning Rekommendationer
Azure service mesh is not supported in this region Funktionen är inte tillgänglig i regionen under förhandsversionen (den är tillgänglig i det offentliga molnet men inte i det nationella molnet). Läs den offentliga dokumentationen om funktionen i regioner som stöds.
Missing service mesh mode: {} Du angav inte lägesegenskapen i service mesh-profilen för den hanterade klusterbegäran. I fältet ServiceMeshProfile i managedCluster API-begäran anger du mode egenskapen till Istio.
Invalid istio ingress mode: {} Du anger ett ogiltigt värde för ingressläget när du lägger till ingress i service mesh-profilen. Ange ingress-läget i API-begäran till antingen External eller Internal.
Too many ingresses for type: {}. Only {} ingress gateway are allowed Du försökte skapa för många ingresser i klustret. Skapa som mest en extern ingress och en intern ingress i klustret.
Istio profile is missing even though Service Mesh mode is Istio Du har aktiverat Istio-tillägget utan att ange Istio-profilen. När du aktiverar Istio-tillägget anger du komponentspecifik information (ingressgateway, plugin-certifikatutfärdar)för Istio-profilen och den specifika revisionen.
Istio based Azure service mesh is incompatible with feature %s Du försökte använda ett annat tillägg, tillägg eller en funktion som för närvarande är inkompatibel med Istio-tillägget (till exempel Open Service Mesh). Innan du aktiverar Istio-tillägget inaktiverar du den andra funktionen först och rensar alla motsvarande resurser.
ServiceMeshProfile is missing required parameters: %s for plugin certificate authority Du angav inte alla nödvändiga parametrar för plugin-certifikatet. Ange alla obligatoriska parametrar för funktionen för plugin-certifikatutfärdare (CA) (mer information finns i Konfigurera Istio-baserat service mesh-tillägg med plugin-certifikat för certifikatutfärdare).
AzureKeyvaultSecretsProvider addon is required for Azure Service Mesh plugin certificate authority feature Du aktiverade inte aks-Secrets-Store CSI-drivrutinstillägg innan du använde plugin-certifikatet. Konfigurera Azure Key Vault innan du använder funktionen för plugin-certifikat.
'KeyVaultId': '%s' is not a valid Azure keyvault resource identifier. Please make sure that the format matches '/subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/' Du använde ett ogiltigt AKS-resurs-ID. Se formatet som anges i felmeddelandet för att ange ett giltigt Azure Key Vault-ID för funktionen för plugin-certifikatmottagare.
Kubernetes version is missing in orchestrator profile Din begäran saknar Kubernetes-versionen. Därför kan den inte utföra en versionkompatibilitetskontroll. Se till att du anger Kubernetes-versionen i Uppgraderingsåtgärder för Istio-tillägg.
Service mesh revision %s is not compatible with cluster version %s. To find information about mesh-cluster compatibility, use 'az aks mesh get-upgrades' Du försökte aktivera en Istio-tilläggsrevision som inte är kompatibel med den aktuella Kubernetes-klusterversionen. Använd azure CLI-kommandot az aks mesh get-upgrades för att lära dig vilka Istio-tilläggsrevisioner som är tillgängliga för det aktuella klustret.
Kubernetes version %s not supported. Please upgrade to a supported cluster version first. To find compatibility information, use 'az aks mesh get-upgrades' Du använder en Kubernetes-version som inte stöds. Uppgradera till en Kubernetes-version som stöds.
ServiceMeshProfile revision field must not be empty Du försökte uppgradera Istio-tillägget utan att ange någon revision. Ange revisionen och alla andra parametrar (mer information finns i Mindre revisionsuppgradering).
Request exceeds maximum allowed number of revisions (%d) Du försökte utföra en uppgraderingsåtgärd även om det redan (%d) finns revisioner installerade. Slutför eller återställ uppgraderingsåtgärden innan du uppgraderar till en annan revision.
Mesh upgrade is in progress. Please complete or roll back the current upgrade before attempting to retrieve versioning and compatibility information Du försökte komma åt revisions- och kompatibilitetsinformation innan du slutförde eller återställde den aktuella uppgraderingsåtgärden. Slutför eller återställ den aktuella uppgraderingsåtgärden innan du hämtar information om revision och kompatibilitet.

Referenser

Ansvarsfriskrivning för information från tredje part

De produkter från andra tillverkare som diskuteras i denna artikel tillverkas oberoende av Microsoft. Produkternas funktion eller tillförlitlighet kan därför inte garanteras.

Kontakta oss för att få hjälp

Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.