Dela via


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

I den här artikeln beskrivs allmänna strategier (som använder kubectl, istioctloch andra verktyg) för att felsöka problem som är relaterade till tillägget Istio Service Mesh 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

Felsökningschecklista: Använda kubectl

Följande felsökningssteg använder olika kubectl kommandon som hjälper dig att felsöka fastnade poddar eller fel i Istio-daemon (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 helt enkelt 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. Den skapas och distribueras automatiskt igen när du har tagit bort den direkt. Därför är borttagning av podden en alternativ metod för att starta om podden.

Kommentar

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 nära slutet av utdata. Utdata kan också visa händelser som är associerade med dess styrenhetsloop.

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

Om du vill visa en lista över alla resursnamn som baseras på en viss CRD kör du följande kubectl get kommando:

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

Steg 5: Visa listan över Istiod-poddar

Om du vill visa listan över Istiod-poddar kör du 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ålbilarna

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

Felsökningschecklista: 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.

Alla istioctl kommandon måste köras tillsammans med --istioNamespace aks-istio-system flaggan för att peka på AKS-tilläggsinstallationen av Istio.

Varning

Vissa istioctl kommandon skickar begäranden till alla sidovagnar.

Kommentar

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-tagglistan :

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

Om du vill hämta proxystatusen kör du följande istioctl proxy-status-kommando :

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

Kommentar

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

Steg 5: Kontrollera inmatningsstatusen

Kontrollera inmatningsstatusen för resursen genom att köra följande istioctl experimental check-inject-kommando :

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. Det kan dock vara tidskrävande att köra den här rapporten på ett stort kluster eftersom den 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>[, ...]]]

Felsökningschecklista: Diverse problem

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

Om du får 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 ska du komma ihåg att vissa mått kan ha hög kardinalitet och därför skapa ett högre minnesfotavtryck. 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 arbetsbelastningar som endast finns inom specifika namnområden. Mer information finns i Se upp för den här minnesgropen för Istio-proxyservern.

Följande definition i aks-istio-system namnområdet begränsar till exempel Sidecar 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 namnområden för ditt Istio-tjänstnät.

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

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

Länkar till diskussioner om andra problem, till exempel sidvagnsinmatning, observerbarhet och uppgraderingar, finns i Vanliga problem på webbplatsen för Istio-dokumentationen.

Steg 3: Undvik CoreDNS-överlagring

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

Steg 4: Åtgärda podd- och sidovagnstävlingar

Om programpodden startar innan envoy-sidovagnen startar kan programmet inte 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 till att förhindra dessa tävlingsförhållanden genom att true ställa in holdApplicationUntilProxyStarts meshconfig-fältet underdefaultConfig.

Steg 5: Konfigurera en tjänstpost när du använder en HTTP-proxy för utgående trafik

Om klustret använder en HTTP-proxy för utgående internetåtkomst måste du konfigurera en tjänstpost. Mer information finns i HTTP-proxystöd i Azure Kubernetes Service.

Felmeddelanden

Följande tabell innehåller en lista över möjliga felmeddelanden (för att distribuera tillägget, aktivera ingressgatewayer 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). Se offentlig dokumentation om funktionen i regioner som stöds.
Missing service mesh mode: {} Du angav inte lägesegenskapen i tjänstnätprofilen 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 ingressläge 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 (ingressgateway, plugin-certifikatutfärdarinformation) 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 inte är kompatibel 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 har inte aktiverat CSI-drivrutinstillägget AKS Secrets-Store 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 det format som nämns 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 gö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 revisions- och kompatibilitetsinformation.

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.