Compartir a través de


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

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 o SchedulingDisabled
  • 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:

  1. En Azure Portal, busque y seleccione Directiva.

  2. En el panel de navegación Directiva , busque la sección Creación y seleccione Asignaciones.

  3. 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.

  4. En la página de asignación de directiva de esa asignación, seleccione Editar asignación.

  5. Seleccione la pestaña Parámetros.

  6. Desactive la opción Mostrar solo los parámetros que necesitan entrada o revisión .

  7. 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:

  1. Agregue los Microsoft.ContainerService/managedClusters/runCommand/action roles y Microsoft.ContainerService/managedClusters/commandResults/read .

  2. 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.