Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 invokecommand-<ID> della riga di comando di Azure crea automaticamente un aks-command 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
NotReadystato oSchedulingDisabled - Nodi containts che il pod non può tollerare
- Altre cause
Ecco alcuni messaggi di errore di esempio per KubernetesPerformanceError o KubernetesOperationError:
(KubernetesPerformanceError) Failed to run command due to cluster perf issue, container command-357ebsdfsd342869 in aks-command namespace did not start within 30s on your cluster, retry may helps. If issue persist, you may need to tune your cluster with better performance (larger node/paid tier).
Code: KubernetesPerformanceError
Message: Failed to run command due to cluster perf issue, container command-357ebc50d40c47a4a247ab6e067d2869 in aks-command namespace did not start within 30s on your cluster, retry may helps. If issue persist, you may need to tune your cluster with better performance (larger node/paid tier).
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/actionMicrosoft.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/actionruoli 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, è possibile porre domande al supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.