Allmän felsökning av tillägget istio-tjänstnät
Den här artikeln beskriver allmänna strategier (som använder kubectl
, istioctl
och 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
Kubernetes kubectl-verktyget eller ett liknande verktyg för att ansluta till klustret
Observera: Om du vill installera kubectl med hjälp av Azure CLI kör du kommandot az aks install-cli .
Kommandoradsverktyget Istio istioctl
Verktyget Klient-URL (cURL)
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
Allmänna tips om Istio-felsökning finns i Diagnostikverktyg för Istio
Felsökning av mindre revisionsuppgradering för Istio Service Mesh-tillägg
Felsökning av certifikat för Istio Service Mesh-tilläggsprogram för ca-certifikat
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.