Resolución de errores de "az aks command invoke"
En este artículo se describe cómo resolver errores de invocación de comandos az aks en la CLI de Microsoft Azure para que pueda conectarse correctamente a cualquier clúster de Azure Kubernetes Service (AKS), especialmente a un clúster de AKS privado.
Otros métodos de conexión deben usar componentes de configuración adicionales, como se muestra en la tabla siguiente.
Métodos de conexión | Componente de configuración adicional |
---|---|
Red virtual | Red privada virtual (VPN) |
Red emparejada | Azure ExpressRoute |
Punto de conexión privado | Jumpbox |
El comando de la az aks command invoke
CLI de Azure es una forma alternativa de conectarse a un clúster que no requiere componentes de configuración adicionales.
Al ejecutar el comando, la az aks command invoke
CLI de Azure crea automáticamente un command-<ID>
pod en el aks-command
espacio de nombres para acceder al clúster de AKS y recuperar la información necesaria.
Requisitos previos
La herramienta kubectl de Kubernetes. Para instalar kubectl mediante la CLI de Azure, ejecute el comando az aks install-cli .
Síntomas
En la tabla siguiente se enumeran los mensajes de error comunes az aks command invoke
. Cada mensaje de error tiene un vínculo a la sección que describe por qué se produce el error y cómo corregirlo.
Mensaje de error | Vínculo |
---|---|
La operación devolvió un estado no válido 'No encontrado' | Causa 1: El pod no se puede crear debido a restricciones de nodo o de recursos |
No se pudo ejecutar el comando en un clúster administrado debido a un error de Kubernetes. detalles: webhook de admisión "validation.gatekeeper.sh" denegó la solicitud: <mensaje específico de la directiva> | Causa 2: Azure Policy no permite la creación del pod |
Error del servidor (prohibido): los espacios de nombres están prohibidos: el usuario "<ID>" no puede enumerar el recurso "<recurso>" en el grupo de API "" en el ámbito del clúster. | Causa 3: No se conceden roles necesarios |
No se pudo conectar a MSI. Asegúrese de que MSI está configurado correctamente. Obtener solicitud de token devuelta: Respuesta [400]; |
Causa 4: Hay un problema de Cloud Shell |
Causa 1: El pod no se puede crear debido a restricciones de nodo o de recursos
La operación devuelve un Not Found
estado porque el command-<ID>
pod no puede alcanzar un estado correcto, como Running
. (En muchos casos, el pod permanece en el Pending
estado). En este caso, los nodos no pueden programar el pod. Este escenario puede tener diferentes causas, como las siguientes:
- Restricciones de recursos
- Nodos que tienen un
NotReady
estado oSchedulingDisabled
- Nodos que tienen taints que el pod no puede tolerar
- Otras causas
Solución 1: Cambiar la configuración para que pueda programar y ejecutar el pod
Asegúrese de que el command-<ID>
pod se puede programar y ejecutar ajustando la configuración. Por ejemplo:
- Aumente el tamaño del grupo de nodos y asegúrese de que no tiene restricciones de cierre de pod como taints para que se pueda implementar el
command-<ID>
pod. - Ajuste las solicitudes de recursos y los límites en las especificaciones del pod.
Causa 2: Azure Policy no permite la creación del pod
Si tiene directivas específicas de Azure, el az aks command invoke
comando puede producir un error debido a una configuración no permitida en el command-<ID>
pod. Por ejemplo, puede tener una directiva de Azure que requiera un sistema de archivos raíz de solo lectura u otra configuración específica.
Solución 2: Eximir el espacio de nombres para las directivas que prohíben la creación de pods
Se recomienda excluir el aks-command
espacio de nombres de las directivas de Azure asociadas que no permitan la creación del pod. Para más información sobre la exención, consulte Descripción del ámbito en Azure Policy.
Para excluir una directiva de Azure:
En Azure Portal, busque y seleccione Directiva.
En el panel de navegación Directiva , busque la sección Creación y seleccione Asignaciones.
En la tabla de asignaciones, busque la fila que contiene el nombre de asignación que desea cambiar y, a continuación, seleccione el nombre de la asignación.
En la página de asignación de directiva de esa asignación, seleccione Editar asignación.
Seleccione la pestaña Parámetros.
Desactive la opción Mostrar solo los parámetros que necesitan entrada o revisión .
En el cuadro Exclusiones de espacio de nombres, agregue el espacio de nombres aks-command a la lista de espacios de nombres que se van a excluir.
Como alternativa, si la directiva no es una directiva integrada, puede comprobar la configuración del command-<ID>
pod y ajustar la directiva según sea necesario. Para explorar la configuración de YAML del pod, ejecute el siguiente comando:
kubectl get pods command-<ID> --namespace aks-command --output yaml
Puede excluir el aks-command
espacio de nombres de las directivas restrictivas ejecutando el siguiente comando:
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: No se conceden roles necesarios
Para usar el az aks command invoke
comando , debe tener acceso a los siguientes roles en el clúster:
Microsoft.ContainerService/managedClusters/runCommand/action
Microsoft.ContainerService/managedClusters/commandResults/read
Si no tiene estos roles, el az aks command invoke
comando no puede recuperar la información necesaria.
Solución 3: Agregar los roles necesarios
Para resolver el problema, siga estos pasos:
Agregue los
Microsoft.ContainerService/managedClusters/runCommand/action
roles yMicrosoft.ContainerService/managedClusters/commandResults/read
.Asigne los roles necesarios al usuario:
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: Hay un problema de Cloud Shell
El az aks command invoke
comando no se procesa según lo esperado cuando se ejecuta directamente en el entorno de Azure Cloud Shell . Se trata de un problema conocido en Cloud Shell.
Solución 4a: Ejecute primero el comando az login.
En Cloud Shell, ejecute el comando az login antes de ejecutar el az aks command invoke
comando. Por ejemplo:
az login
az aks command invoke --resource-group {resource-group} --name {aks-cluster} --command "kubectl get pods"
Solución 4b: ejecutar el comando en un equipo local o en una máquina virtual
Ejecute el comando en un equipo local o en cualquier máquina virtual (VM) que tenga instalada la az aks command invoke
CLI de Azure.
Aviso de declinación de responsabilidades sobre la información de terceros
Los productos de otros fabricantes que se mencionan en este artículo han sido creados por compañías independientes de Microsoft. Microsoft no ofrece ninguna garantía, ya sea implícita o de otro tipo, sobre la confiabilidad o el rendimiento de dichos productos.
Ponte en contacto con nosotros para obtener ayuda
Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.