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
Lo strumento kubectl kubernetes. Per installare kubectl usando l'interfaccia della riga di comando di Azure, eseguire il comando az aks install-cli .
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 oSchedulingDisabled
- 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:
Nella portale di Azure cercare e selezionare Criteri.
Nel riquadro di spostamento Criteri individuare la sezione Creazione e quindi selezionare Assegnazioni.
Nella tabella delle assegnazioni trovare la riga contenente il nome dell'assegnazione che si desidera modificare e quindi selezionare il nome dell'assegnazione.
Nella pagina di assegnazione dei criteri per l'assegnazione selezionare Modifica assegnazione.
Seleziona la scheda Parametri.
Deselezionare l'opzione Mostra solo i parametri che richiedono input o revisione .
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:
Aggiungere i
Microsoft.ContainerService/managedClusters/runCommand/action
ruoli eMicrosoft.ContainerService/managedClusters/commandResults/read
.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.