Dela via


Lösa fel med "az aks command invoke"

Den här artikeln beskriver hur du löser az aks-kommandot anropar fel i Microsoft Azure CLI så att du kan ansluta till alla AKS-kluster (Azure Kubernetes Service), särskilt till ett privat AKS-kluster.

Andra anslutningsmetoder måste använda extra konfigurationskomponenter, som du ser i följande tabell.

Anslutningsmetoder Extra konfigurationskomponent
Virtuellt nätverk Virtuellt privat nätverk (VPN)
Peer-kopplat nätverk Azure ExpressRoute
Privat slutpunkt Jumpbox

az aks command invoke Azure CLI-kommandot är ett alternativt sätt att ansluta till ett kluster som inte kräver extra konfigurationskomponenter.

När du kör az aks command invoke kommandot skapar Azure CLI automatiskt en command-<ID> podd i aks-command namnområdet för att komma åt AKS-klustret och hämta nödvändig information.

Förutsättningar

Symptom

I följande tabell visas vanliga az aks command invoke felmeddelanden. Varje felmeddelande har en länk till avsnittet som beskriver varför felet inträffar och hur du åtgärdar det.

Felmeddelande Länk
Åtgärden returnerade en ogiltig status "Hittades inte" Orsak 1: Podden kan inte skapas på grund av nod- eller resursbegränsningar
Det gick inte att köra kommandot i det hanterade klustret på grund av kubernetes-fel. information: antagningswebbhooken "validation.gatekeeper.sh" nekade begäran: <principspecifikt meddelande> Orsak 2: Azure Policy tillåter inte att podden skapas
Fel från servern (förbjudet): namnområden är förbjudet: Användarens "<ID>" kan inte visa resursen "<resurs>" i API-gruppen "" i klusteromfånget Orsak 3: Obligatoriska roller beviljas inte
Det gick inte att ansluta till MSI. Kontrollera att MSI är konfigurerat på rätt sätt.

Hämta tokenbegäran returnerad: Svar [400];
Orsak 4: Det finns ett Cloud Shell-problem

Orsak 1: Podden kan inte skapas på grund av nod- eller resursbegränsningar

Åtgärden returnerar en Not Found status eftersom command-<ID> podden inte kan nå ett lyckat tillstånd, till exempel Running. (I många fall förblir podden i tillståndet Pending .) I det här fallet kan noderna inte schemalägga podden. Det här scenariot kan ha olika orsaker, till exempel följande orsaker:

  • Resursbegränsningar
  • Noder som har ett eller SchedulingDisabled ett NotReady tillstånd
  • Noder som har taints som podden inte kan tolerera
  • Andra orsaker

Lösning 1: Ändra konfigurationen så att du kan schemalägga och köra podden

Kontrollera att command-<ID> podden kan schemaläggas och köras genom att justera konfigurationen. Till exempel:

  • Öka nodpoolens storlek och se till att den inte har några poddavskiljande begränsningar som taints så att command-<ID> podden kan distribueras.
  • Justera resursbegäranden och begränsningar i poddspecifikationerna.

Orsak 2: Azure Policy tillåter inte att podden skapas

Om du har specifika Azure-principer az aks command invoke kan kommandot misslyckas på grund av en otillåten command-<ID> konfiguration i podden. Du kan till exempel ha en Azure-princip som kräver ett skrivskyddat rotfilsystem eller någon annan specifik konfiguration.

Lösning 2: Undanta namnområdet för principer som förbjuder skapande av poddar

Vi rekommenderar att du undantar aks-command namnområdet för de associerade Azure-principer som inte tillåter att podden skapas. Mer information om undantag finns i Förstå omfång i Azure Policy

Så här undantar du en Azure-princip:

  1. I Azure Portal söker du efter och väljer Princip.

  2. Leta upp avsnittet Redigering i navigeringsfönstret Princip och välj sedan Tilldelningar.

  3. I tabellen med tilldelningar letar du reda på den rad som innehåller tilldelningsnamnet som du vill ändra och väljer sedan namnet på tilldelningen.

  4. På sidan principtilldelning för den tilldelningen väljer du Redigera tilldelning.

  5. Välj fliken Parametrar.

  6. Avmarkera alternativet Visa endast parametrar som behöver indata eller granskning.

  7. I rutan Namnområdesundantag lägger du till namnområdet aks-command i listan över namnområden som ska undantas.

Om principen inte är en inbyggd princip kan du också kontrollera poddens command-<ID> konfiguration och justera principen efter behov. Om du vill utforska poddens YAML-konfiguration kör du följande kommando:

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

Du kan undanta aks-command namnområdet från restriktiva principer genom att köra följande kommando:

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}

Orsak 3: Obligatoriska roller beviljas inte

Om du vill använda az aks command invoke kommandot måste du ha åtkomst till följande roller i klustret:

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

Om du inte har dessa roller az aks command invoke kan kommandot inte hämta nödvändig information.

Lösning 3: Lägg till de roller som krävs

Följ dessa anvisningar för att lösa problemet:

  1. Lägg till rollerna Microsoft.ContainerService/managedClusters/runCommand/action och Microsoft.ContainerService/managedClusters/commandResults/read .

  2. Tilldela nödvändiga roller till användaren:

    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}
    

Orsak 4: Det finns ett Cloud Shell-problem

Kommandot az aks command invoke bearbetas inte som förväntat när det körs direkt i Azure Cloud Shell-miljön . Det här är ett känt problem i Cloud Shell.

Lösning 4a: Kör kommandot az login först

Kör kommandot az login i Cloud Shell innan du kör az aks command invoke kommandot . Till exempel:

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

Lösning 4b: Kör kommandot på en lokal dator eller en virtuell dator

az aks command invoke Kör kommandot på en lokal dator eller en virtuell dator (VM) som har Azure CLI installerat.

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.