Algemene probleemoplossing van de invoegtoepassing Istio-service mesh
In dit artikel worden algemene strategieën (die gebruikmaken kubectl
van, istioctl
en andere hulpprogramma's) besproken om problemen op te lossen die betrekking hebben op de invoegtoepassing Istio-service-mesh 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.
Voorwaarden
Het Kubernetes kubectl-hulpprogramma of een vergelijkbaar hulpprogramma om verbinding te maken met het cluster
Opmerking: Voer de opdracht az aks install-cli uit om kubectl te installeren met behulp van Azure CLI.
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 voor kubectl-logboeken uit te voeren:
kubectl logs --selector app=istiod --namespace aks-istio-system
Stap 2: Een pod niet stuiteren (verwijderen)
Mogelijk hebt u een goede reden om een pod opnieuw op te starten. Omdat Istiod een implementatie is, kunt u de pod eenvoudig 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. Het wordt automatisch opnieuw gemaakt en opnieuw geïmplementeerd nadat u deze rechtstreeks hebt verwijderd. Daarom is het verwijderen van de pod een alternatieve methode voor het opnieuw opstarten van de pod.
Notitie
U kunt de implementatie ook rechtstreeks opnieuw starten door de volgende opdracht voor het opnieuw starten van de 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. In de uitvoer kunnen ook gebeurtenissen worden weergegeven die zijn gekoppeld aan de controllerlus.
Stap 4: Aangepaste resourcedefinitietypen ophalen
Voer de kubectl get
opdracht uit om de typen aangepaste resourcedefinities (CRD's) weer te geven die door Istio worden gebruikt:
kubectl get crd | grep istio
Als u alle resourcenamen wilt weergeven die zijn gebaseerd op een bepaalde CRD, voert u de volgende kubectl get
opdracht uit:
kubectl get <crd-type> --all-namespaces
Stap 5: De lijst met Istiod-pods weergeven
Voer de volgende kubectl get
opdracht uit om de lijst met Istiod-pods weer te geven:
kubectl get pod --namespace aks-istio-system --output yaml
Stap 6: Meer informatie over de Envoy-configuratie
Als u verbindingsproblemen hebt tussen pods, kunt u meer informatie krijgen over de Envoy-configuratie door de volgende kubectl exec-opdracht uit te voeren op de beheerpoort 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: Haal de sidecar-logboeken op 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 informatie kunt verzamelen en fouten in uw mesh-omgeving kunt opsporen door verschillende istioctl
opdrachten uit te voeren.
Alle istioctl
opdrachten moeten samen met de --istioNamespace aks-istio-system
vlag worden uitgevoerd om te verwijzen naar de installatie van de AKS-invoegtoepassing van Istio.
Waarschuwing
Sommige istioctl
opdrachten verzenden aanvragen naar alle sidecars.
Notitie
Voordat u begint, ziet u dat voor de meeste istioctl
opdrachten u 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 juist is geïnstalleerd
Voer de volgende istioctl verify-install-opdracht uit om te controleren of u een juiste Installatie van de Istio-invoegtoepassing hebt:
istioctl verify-install --istioNamespace aks-istio-system --revision <tag>
Stap 2: Naamruimten analyseren
Als u alle naamruimten wilt analyseren of een specifieke naamruimte wilt analyseren, voert u de volgende istioctl-analyseopdracht uit:
istioctl analyze --istioNamespace aks-istio-system \
--revision <tag> \
[--all-namespaces | --namespace <namespace-name>] \
[--failure-threshold {Info | Warning | Error}]
Stap 3: de proxystatus ophalen
Als u de proxystatus wilt ophalen, voert u de volgende opdracht istioctl proxy-status uit:
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 alle opdrachten uit:
istioctl proxy-config all <pod-name> \
--istioNamespace aks-istio-system \
--namespace <pod-namespace> \
--output json
Notitie
In plaats van de all
variant van de istioctl proxy-config
opdracht te gebruiken, kunt u een van de volgende varianten gebruiken:
Stap 5: Controleer de injectiestatus
Als u de injectiestatus van de resource wilt controleren, voert u de volgende istioctl experimentele controle-inject-opdracht uit:
istioctl experimental check-inject --istioNamespace aks-istio-system \
--namespace <pod-namespace> \
--labels <label-selector> | <pod-name> | deployment/<deployment-name>
Stap 6: een volledig foutrapport ophalen
Een volledig foutenrapport bevat de meest gedetailleerde informatie. Het uitvoeren van dit rapport kan echter tijdrovend zijn voor 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 labelkiezers.
Voer de volgende istioctl bug-report-opdracht uit om een foutrapport 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 in Envoy tegenkomt, controleert u uw Envoy-instellingen voor het verzamelen van statistiekengegevens. Als u istio-metrische gegevens via MeshConfig aan het aanpassen bent, moet u er rekening mee houden dat bepaalde metrische gegevens een hoge kardinaliteit kunnen hebben en daarom een hogere geheugenvoetafdruk kunnen maken. Andere velden in MeshConfig, zoals gelijktijdigheid, zijn van invloed op het CPU-gebruik en moeten zorgvuldig worden geconfigureerd.
Standaard voegt Istio informatie toe over alle services die zich in het cluster bevinden aan elke Envoy-configuratie. De sidecar kan het bereik van deze toevoeging beperken tot workloads die zich alleen binnen specifieke naamruimten bevinden. Zie Watch out 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 tot aks-istio-system
en met andere werkbelastingen 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 proberen de optie Istio discoverySelectors te gebruiken in MeshConfig. De discoverySelectors
optie bevat een matrix van Kubernetes-selectors en kan het bewustzijn van Istiod beperken tot specifieke naamruimten (in tegenstelling tot alle naamruimten in het cluster). Zie Detectieselectors 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 Verkeersbeheerproblemen en beveiligingsproblemen op de Website van Istio om veelvoorkomende problemen met verkeersbeheer en beveiligingsproblemen op te lossen.
Zie Algemene problemen op de documentatiesite van Istio voor koppelingen naar discussie over andere problemen, zoals sidecar-injectie, waarneembaarheid en upgrades.
Stap 3: CoreDNS-overbelasting voorkomen
Voor problemen die betrekking hebben op De overbelasting van CoreDNS moet u mogelijk bepaalde Istio DNS-instellingen wijzigen, zoals het dnsRefreshRate
veld in de Definitie van Istio MeshConfig.
Stap 4: Pod- en sidecar racevoorwaarden herstellen
Als uw toepassingspod wordt gestart voordat de Envoy-sidecar wordt gestart, reageert de toepassing mogelijk niet of wordt deze mogelijk opnieuw opgestart. Zie Pod of containers beginnen met netwerkproblemen als istio-proxy niet gereed is voor instructies over het voorkomen van dit probleem. Om precies te zijn, kan het instellen van het holdApplicationUntilProxyStarts
veld defaultConfig
MeshConfig om true
deze racevoorwaarden te voorkomen.
Stap 5: Een servicevermelding configureren bij het gebruik van een HTTP-proxy voor uitgaand verkeer
Als uw cluster een HTTP-proxy gebruikt voor uitgaande internettoegang, moet u een servicevermelding configureren. Zie http-proxyondersteuning in Azure Kubernetes Service voor meer informatie.
Foutberichten
De volgende tabel bevat een lijst met mogelijke foutberichten (voor het implementeren van de invoegtoepassing, het inschakelen van ingangsgateways en het uitvoeren van upgrades), de reden waarom er een fout is opgetreden en aanbevelingen voor het oplossen van de fout.
Fout | Reden | Aanbevelingen |
---|---|---|
Azure service mesh is not supported in this region |
De functie is niet beschikbaar in de regio tijdens de preview (deze is beschikbaar in de openbare cloud, maar niet in de onafhankelijke cloud). | Raadpleeg de 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 beheerde clusteraanvraag. | 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 toegangsbeheermodus bij het toevoegen van inkomend verkeer binnen het service-mesh-profiel. | Stel de toegangsmodus in de API-aanvraag in op External of Internal . |
Too many ingresses for type: {}. Only {} ingress gateway are allowed |
U hebt geprobeerd te veel ingresses op het cluster te maken. | Maak maximaal één extern inkomend verkeer 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 onderdeelspecifieke informatie (toegangsgateway, invoegtoepassings-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, schakelt u eerst de andere functie uit en schoont u alle bijbehorende resources op. |
ServiceMeshProfile is missing required parameters: %s for plugin certificate authority |
U hebt niet alle vereiste parameters opgegeven voor de invoegtoepassings-CA. | Geef alle vereiste parameters op voor de invoegtoepassingsfunctie voor certificeringsinstantie (CA) (zie Invoegtoepassing voor service mesh op basis van Istio 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 Driver 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 |
Uw aanvraag ontbreekt in de Kubernetes-versie. Daarom kan er geen versiecompatibiliteitscontrole worden uitgevoerd. | Zorg ervoor dat u de Kubernetes-versie opgeeft in istio-upgradebewerkingen voor invoegtoepassingen. |
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 Kubernetes-clusterversie. | Gebruik de Azure CLI-opdracht az aks mesh get-upgrades om te leren 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 draai de upgradebewerking terug 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 voltooit of terugstuurt. | Voltooi de huidige upgradebewerking of draai deze terug voordat u revisie- en compatibiliteitsgegevens ophaalt. |
Verwijzingen
Zie Diagnostische hulpprogramma's van Istio voor algemene tips over foutopsporing in Istio
Problemen met de invoegtoepassing Istio-service mesh-invoegtoepassing MeshConfig oplossen
Problemen met de invoegtoepassing Voor inkomend verkeer van istio-service
Probleemoplossing voor kleine revisieupgrades voor istio-service-mesh-invoegtoepassing
Problemen met invoegtoepassings-CA-certificaten voor Istio-service mesh 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 Azure-feedbackcommunity.