Delen via


Fouten met 'az aks command invoke' oplossen

In dit artikel wordt beschreven hoe u az aks-opdracht aanroepfouten kunt oplossen in Microsoft Azure CLI, zodat u verbinding kunt maken met elk AKS-cluster (Azure Kubernetes Service), met name met een privé-AKS-cluster.

Andere verbindingsmethoden moeten extra configuratieonderdelen gebruiken, zoals wordt weergegeven in de volgende tabel.

Verbindingsmethoden Extra configuratieonderdeel
Virtueel netwerk Virtueel particulier netwerk (VPN)
Gekoppeld netwerk Azure ExpressRoute
Privé-eindpunt Jumpbox

De az aks command invoke Azure CLI-opdracht is een alternatieve manier om verbinding te maken met een cluster waarvoor geen extra configuratieonderdelen nodig zijn.

Wanneer u de az aks command invoke opdracht uitvoert, maakt Azure CLI automatisch een command-<ID> pod in de aks-command naamruimte om toegang te krijgen tot het AKS-cluster en de vereiste gegevens op te halen.

Voorwaarden

Symptomen

De volgende tabel bevat veelvoorkomende az aks command invoke foutberichten. Elk foutbericht bevat een koppeling naar de sectie waarin wordt beschreven waarom de fout optreedt en hoe u dit kunt oplossen.

Foutmelding Koppeling
De bewerking heeft een ongeldige status 'Niet gevonden' geretourneerd Oorzaak 1: De pod kan niet worden gemaakt vanwege knooppunt- of resourcebeperkingen
Kan de opdracht niet uitvoeren in een beheerd cluster vanwege een kubernetes-fout. details: toegangswebhook "validation.gatekeeper.sh" heeft de aanvraag geweigerd: <beleid-specifiek-bericht> Oorzaak 2: Azure Policy staat het maken van de pod niet toe
Fout van server (verboden): naamruimten zijn verboden: de gebruiker '<id>' kan resource '<resource>' niet vermelden in de API-groep '' in het clusterbereik Oorzaak 3: Vereiste rollen worden niet verleend
Kan geen verbinding maken met MSI. Controleer of MSI juist is geconfigureerd.

Get Token request returned: Response [400];
Oorzaak 4: Er is een Cloud Shell-probleem

Oorzaak 1: De pod kan niet worden gemaakt vanwege knooppunt- of resourcebeperkingen

De bewerking retourneert een Not Found status omdat de command-<ID> pod geen geslaagde status kan bereiken, zoals Running. (In veel gevallen blijft de pod in de Pending status.) In dit geval kunnen de knooppunten de pod niet plannen. Dit scenario kan verschillende oorzaken hebben, zoals de volgende oorzaken:

  • Resourcebeperkingen
  • Knooppunten met een NotReady of SchedulingDisabled meer statussen
  • Knooppunten met taints die de pod niet kan tolereren
  • Andere oorzaken

Oplossing 1: Wijzig de configuratie zodat u de pod kunt plannen en uitvoeren

Zorg ervoor dat de command-<ID> pod kan worden gepland en uitgevoerd door de configuratie aan te passen. Bijvoorbeeld:

  • Vergroot de grootte van de knooppuntgroep en zorg ervoor dat er geen beperkingen voor pods worden afgedwongen, zoals taints, zodat de command-<ID> pod kan worden geïmplementeerd.
  • Pas resourceaanvragen en -limieten aan in uw podspecificaties.

Oorzaak 2: Azure Policy staat het maken van de pod niet toe

Als u specifiek Azure-beleid hebt, kan de az aks command invoke opdracht mislukken vanwege een niet-toegestane configuratie in de command-<ID> pod. U hebt bijvoorbeeld een Azure-beleid waarvoor een alleen-lezen basisbestandssysteem of een andere specifieke configuratie is vereist.

Oplossing 2: De naamruimte uitsluiten voor beleidsregels die het maken van pods verbieden

U wordt aangeraden de aks-command naamruimte voor het gekoppelde Azure-beleid uit te stellen waarvoor het maken van de pod niet is toegestaan. Zie Bereik begrijpen in Azure Policy voor meer informatie over uitzonderingen

Een Azure Policy uitsluiten:

  1. Zoek en selecteer Beleid in Azure Portal.

  2. Zoek in het navigatiedeelvenster Beleid de sectie Ontwerpen en selecteer vervolgens Toewijzingen.

  3. Zoek in de tabel met toewijzingen de rij met de naam van de toewijzing die u wilt wijzigen en selecteer vervolgens de naam van de toewijzing.

  4. Selecteer Toewijzing bewerken op de pagina beleidstoewijzing voor die toewijzing.

  5. Selecteer het tabblad Parameters.

  6. Wis de optie Alleen parameters weergeven waarvoor invoer of revisie is vereist.

  7. Voeg in het vak Uitsluitingen voor naamruimten de naamruimte aks-command toe aan de lijst met naamruimten die moeten worden uitgesloten.

Als het beleid geen ingebouwd beleid is, kunt u ook de configuratie van de command-<ID> pod controleren en het beleid zo nodig aanpassen. Voer de volgende opdracht uit om de YAML-configuratie van de pod te verkennen:

kubectl get pods command-<ID> --namespace aks-command --output yaml

U kunt de aks-command naamruimte uitsluiten van restrictief beleid door de volgende opdracht uit te voeren:

az policy exemption create --name ExemptAksCommand --scope /subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.ContainerService/managedClusters/{aks-cluster} --policyAssignment /subscriptions/{subscription-id}/providers/Microsoft.Authorization/policyAssignments/{policy-assignment-id}

Oorzaak 3: Vereiste rollen worden niet verleend

Als u de az aks command invoke opdracht wilt gebruiken, moet u toegang hebben tot de volgende rollen in het cluster:

  • Microsoft.ContainerService/managedClusters/runCommand/action
  • Microsoft.ContainerService/managedClusters/commandResults/read

Als u deze rollen niet hebt, kan de az aks command invoke opdracht de vereiste informatie niet ophalen.

Oplossing 3: De vereiste rollen toevoegen

Volg deze stappen om dit probleem op te lossen:

  1. Voeg de Microsoft.ContainerService/managedClusters/runCommand/action en Microsoft.ContainerService/managedClusters/commandResults/read rollen toe.

  2. Wijs de benodigde rollen toe aan de gebruiker:

    az role assignment create --assignee {user-principal-name} --role "Azure Kubernetes Service Cluster User Role" --scope /subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.ContainerService/managedClusters/{aks-cluster}
    

Oorzaak 4: Er is een Cloud Shell-probleem

De az aks command invoke opdracht wordt niet verwerkt zoals verwacht wanneer deze rechtstreeks in de Azure Cloud Shell-omgeving wordt uitgevoerd. Dit is een bekend probleem in Cloud Shell.

Oplossing 4a: Voer eerst de az login-opdracht uit

Voer in Cloud Shell de az login-opdracht uit voordat u de az aks command invoke opdracht uitvoert. Bijvoorbeeld:

az login
az aks command invoke --resource-group {resource-group} --name {aks-cluster} --command "kubectl get pods"

Oplossing 4b: Voer de opdracht uit op een lokale computer of een virtuele machine

Voer de az aks command invoke opdracht uit op een lokale computer of een virtuele machine (VM) waarop Azure CLI is geïnstalleerd.

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.