Condividi tramite


Risolvere gli errori di "az aks command invoke"

Questo articolo descrive come risolvere gli errori di az aks command invoke nell'interfaccia della riga di comando di Microsoft Azure in modo da potersi connettere correttamente a qualsiasi cluster del servizio Azure Kubernetes servizio Azure Kubernetes, in particolare a un cluster del servizio Azure Kubernetes privato.

Altri metodi di connessione devono usare componenti di configurazione aggiuntivi, come illustrato nella tabella seguente.

Metodi di connessione Componente di configurazione aggiuntivo
Rete virtuale Rete privata virtuale (VPN, Virtual Private Network)
Rete con peering Azure ExpressRoute
Endpoint privato Jumpbox

Il comando dell'interfaccia az aks command invoke della riga di comando di Azure è un modo alternativo per connettersi a un cluster che non richiede componenti di configurazione aggiuntivi.

Quando si esegue il comando, l'interfaccia az aks command invoke aks-command della riga di comando di Azure crea automaticamente un command-<ID> pod nello spazio dei nomi per accedere al cluster del servizio Azure Kubernetes e recuperare le informazioni necessarie.

Prerequisiti

Sintomi

Nella tabella seguente sono elencati i messaggi di errore comuni az aks command invoke . Ogni messaggio di errore include un collegamento alla sezione che descrive il motivo per cui si verifica l'errore e come risolverlo.

Messaggio d'errore Collega
Operazione ha restituito uno stato non valido 'Non trovato' Causa 1: Il pod non può essere creato a causa di vincoli di nodo o risorse
Impossibile eseguire il comando nel cluster gestito a causa di un errore kubernetes. dettagli: il webhook di ammissione "validation.gatekeeper.sh" ha negato la richiesta: <policy-specific-message> Causa 2: Criteri di Azure non consente la creazione del pod
Errore del server (Accesso negato): gli spazi dei nomi non sono consentiti: l'utente "<ID>" non può elencare la risorsa "<resource>" nel gruppo API "" nell'ambito del cluster Causa 3: I ruoli obbligatori non vengono concessi
Impossibile connettersi all'identità del servizio gestito. Assicurarsi che MSI sia configurato correttamente.

Richiesta get token restituita: risposta [400];
Causa 4: Si è verificato un problema di Cloud Shell

Causa 1: Il pod non può essere creato a causa di vincoli di nodo o risorse

L'operazione restituisce uno Not Found stato perché il command-<ID> pod non riesce a raggiungere uno stato riuscito, ad esempio Running. In molti casi, il pod rimane nello Pending stato . In questo caso, i nodi non sono in grado di pianificare il pod. Questo scenario può avere cause diverse, ad esempio le cause seguenti:

  • Vincoli delle risorse
  • Nodi con uno NotReady stato o SchedulingDisabled
  • Nodi containts che il pod non può tollerare
  • Altre cause

Soluzione 1: Modificare la configurazione in modo che sia possibile pianificare ed eseguire il pod

Assicurarsi che il command-<ID> pod possa essere pianificato ed eseguito modificando la configurazione. Ad esempio:

  • Aumentare le dimensioni del pool di nodi e assicurarsi che non contenga vincoli di isolamento dei pod, ad esempio taints, in modo che il command-<ID> pod possa essere distribuito.
  • Modificare le richieste e i limiti delle risorse nelle specifiche dei pod.

Causa 2: Criteri di Azure non consente la creazione del pod

Se sono presenti criteri di Azure specifici, il az aks command invoke comando può non riuscire a causa di una configurazione non consentita nel command-<ID> pod. Ad esempio, potrebbe essere disponibile un criterio di Azure che richiede un file system radice di sola lettura o un'altra configurazione specifica.

Soluzione 2: esentare lo spazio dei nomi per i criteri che impediscono la creazione di pod

È consigliabile esentare lo aks-command spazio dei nomi per i criteri di Azure associati che non consentono la creazione del pod. Per altre informazioni sull'esenzione, vedere Informazioni sull'ambito in Criteri di Azure

Per esentare un Criteri di Azure:

  1. Nella portale di Azure cercare e selezionare Criteri.

  2. Nel riquadro di spostamento Criteri individuare la sezione Creazione e quindi selezionare Assegnazioni.

  3. Nella tabella delle assegnazioni trovare la riga contenente il nome dell'assegnazione che si desidera modificare e quindi selezionare il nome dell'assegnazione.

  4. Nella pagina di assegnazione dei criteri per l'assegnazione selezionare Modifica assegnazione.

  5. Seleziona la scheda Parametri.

  6. Deselezionare l'opzione Mostra solo i parametri che richiedono input o revisione .

  7. Nella casella Esclusioni dello spazio dei nomi aggiungere lo spazio dei nomi aks-command all'elenco di spazi dei nomi da escludere.

In alternativa, se il criterio non è un criterio predefinito, è possibile controllare la configurazione del command-<ID> pod e modificare i criteri in base alle esigenze. Per esplorare la configurazione YAML del pod, eseguire il comando seguente:

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

È possibile esentare lo aks-command spazio dei nomi dai criteri restrittivi eseguendo il comando seguente:

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}

Causa 3: I ruoli obbligatori non vengono concessi

Per usare il az aks command invoke comando, è necessario avere accesso ai ruoli seguenti nel cluster:

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

Se questi ruoli non sono disponibili, il az aks command invoke comando non può recuperare le informazioni necessarie.

Soluzione 3: Aggiungere i ruoli necessari

Per risolvere il problema, seguire questa procedura:

  1. Aggiungere i Microsoft.ContainerService/managedClusters/runCommand/action ruoli e Microsoft.ContainerService/managedClusters/commandResults/read .

  2. Assegnare i ruoli necessari all'utente:

    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}
    

Causa 4: Si è verificato un problema di Cloud Shell

Il az aks command invoke comando non viene elaborato come previsto quando viene eseguito direttamente nell'ambiente Azure Cloud Shell . Si tratta di un problema noto in Cloud Shell.

Soluzione 4a: Eseguire prima il comando az login

In Cloud Shell eseguire il comando az login prima di eseguire il az aks command invoke comando . Ad esempio:

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

Soluzione 4b: Eseguire il comando in un computer locale o in una macchina virtuale

Eseguire il az aks command invoke comando in un computer locale o in qualsiasi macchina virtuale (VM) in cui è installata l'interfaccia della riga di comando di Azure.

Dichiarazione di non responsabilità sulle informazioni di terze parti

I prodotti di terzi citati in questo articolo sono prodotti da società indipendenti da Microsoft. Microsoft non rilascia alcuna garanzia implicita o esplicita relativa alle prestazioni o all'affidabilità di tali prodotti

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.