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
Het kubectl-hulpprogramma Kubectl van Kubernetes. Als u kubectl wilt installeren met behulp van Azure CLI, voert u de opdracht az aks install-cli uit.
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
ofSchedulingDisabled
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:
Zoek en selecteer Beleid in Azure Portal.
Zoek in het navigatiedeelvenster Beleid de sectie Ontwerpen en selecteer vervolgens Toewijzingen.
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.
Selecteer Toewijzing bewerken op de pagina beleidstoewijzing voor die toewijzing.
Selecteer het tabblad Parameters.
Wis de optie Alleen parameters weergeven waarvoor invoer of revisie is vereist.
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:
Voeg de
Microsoft.ContainerService/managedClusters/runCommand/action
enMicrosoft.ContainerService/managedClusters/commandResults/read
rollen toe.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.