Solución de problemas de plataforma para clústeres de Kubernetes habilitados para Azure Arc

En este documento, se proporcionan algunas guías para solucionar problemas comunes relacionados con la conectividad, los permisos y los agentes de Kubernetes habilitado para Azure Arc. También proporciona guías de solución de problemas para Azure GitOps, que se pueden usar en clústeres de Kubernetes habilitado para Azure Arc o para Azure Kubernetes Service (AKS).

Para obtener ayuda para solucionar problemas relacionados con las extensiones, como GitOps (Flux v2), Azure Monitor Container Insights, Open Service Mesh, consulte Solución de problemas de extensión para clústeres de Kubernetes habilitados para Azure Arc.

CLI de Azure

Antes de usar az connectedk8s o az k8s-configuration comandos de la CLI, asegúrese de que la CLI de Azure esté establecida para que funcione con la suscripción correcta de Azure.

az account set --subscription 'subscriptionId'
az account show

Agentes de Azure Arc

Todos los agentes de Kubernetes habilitado para Azure Arc se implementan como pods en el espacio de nombres azure-arc. Todos los pods deben ejecutarse y pasar sus comprobaciones de estado.

En primer lugar, compruebe la versión de Helm para Azure Arc se la siguiente manera:

$ helm --namespace default status azure-arc
NAME: azure-arc
LAST DEPLOYED: Fri Apr  3 11:13:10 2020
NAMESPACE: default
STATUS: deployed
REVISION: 5
TEST SUITE: None

Si no se encuentra la versión de Helm o esta no está presente, intente volver a conectar el clúster a Azure Arc.

Si la versión de Helm está presente y tiene el estado STATUS: deployed, compruebe el estado de los agentes mediante un comando con kubectl:

$ kubectl -n azure-arc get deployments,pods
NAME                                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/cluster-metadata-operator    1/1     1            1           3d19h
deployment.apps/clusterconnect-agent         1/1     1            1           3d19h
deployment.apps/clusteridentityoperator      1/1     1            1           3d19h
deployment.apps/config-agent                 1/1     1            1           3d19h
deployment.apps/controller-manager           1/1     1            1           3d19h
deployment.apps/extension-events-collector   1/1     1            1           3d19h
deployment.apps/extension-manager            1/1     1            1           3d19h
deployment.apps/flux-logs-agent              1/1     1            1           3d19h
deployment.apps/kube-aad-proxy               1/1     1            1           3d19h
deployment.apps/metrics-agent                1/1     1            1           3d19h
deployment.apps/resource-sync-agent          1/1     1            1           3d19h

NAME                                              READY   STATUS    RESTARTS        AGE
pod/cluster-metadata-operator-74747b975-9phtz     2/2     Running   0               3d19h
pod/clusterconnect-agent-cf4c7849c-88fmf          3/3     Running   0               3d19h
pod/clusteridentityoperator-79bdfd945f-pt2rv      2/2     Running   0               3d19h
pod/config-agent-67bcb94b7c-d67t8                 1/2     Running   0               3d19h
pod/controller-manager-559dd48b64-v6rmk           2/2     Running   0               3d19h
pod/extension-events-collector-85f4fbff69-55zmt   2/2     Running   0               3d19h
pod/extension-manager-7c7668446b-69gps            3/3     Running   0               3d19h
pod/flux-logs-agent-fc7c6c959-vgqvm               1/1     Running   0               3d19h
pod/kube-aad-proxy-84d668c44b-j457m               2/2     Running   0               3d19h
pod/metrics-agent-58fb8554df-5ll67                2/2     Running   0               3d19h
pod/resource-sync-agent-dbf5db848-c9lg8           2/2     Running   0               3d19h

En todos los pods, el valor de STATUS debe ser Running, con 3/3 o 2/2 en la columna READY. Capture los registros y describa los pods que devuelven Error o CrashLoopBackOff. Si algún pod está bloqueado en el estado Pending, es posible que no haya recursos suficientes en los nodos del clúster. Escalar verticalmente el clúster puede hacer que estos pods pasen al estado Running.

Error de aprovisionamiento de recursos/Error de tiempo de espera del servicio

Si ve estos errores, compruebe Estado de Azure para ver si hay algún evento activo que afecte al estado del servicio Kubernetes habilitado para Azure Arc. Si es así, espere hasta que se haya resuelto el evento de servicio y vuelva a intentar la incorporación después de eliminar el recurso de clúster conectado existente. Si no hay eventos de servicio y sigue experimentando problemas durante la incorporación, abra una incidencia de soporte técnico para que podamos investigar el problema.

Error de notificaciones por encima del límite

Si recibe una notificación por encima del límite, asegúrese de que la entidad de servicio no forme parte de más de 200 grupos de Microsoft Entra. Si este es el caso, debe crear y usar otra entidad de servicio que no sea miembro de más de 200 grupos, o quitar la entidad de servicio original de algunos de sus grupos e inténtelo de nuevo.

También puede producirse una notificación de uso por encima del límite si ha configurado un entorno de proxy de salida sin permitir que el punto de conexión https://<region>.obo.arc.azure.com:8084/ para el tráfico saliente.

Si ninguno de estos se aplica, abrir una solicitud de soporte técnico para que podamos examinar el problema.

Problemas al conectar clústeres de Kubernetes a Azure Arc

La conexión de clústeres a Azure Arc requiere acceso a una suscripción de Azure y acceso cluster-admin a un clúster de destino. Si no puede establecer conexión con el clúster o no dispone de los permisos suficientes, se producirá un error al conectar el clúster a Azure Arc. Asegúrese de que cumple todos los requisitos previos para conectar un clúster.

Sugerencia

Para obtener una guía visual para solucionar problemas de conexión, consulte Diagnóstico de problemas de conexión para clústeres de Kubernetes habilitados para Arc.

Problemas de resolución de DNS

Visite Depuración de resolución de DNS para obtener ayuda para resolver problemas con la resolución de DNS en el clúster.

Problemas de conectividad de red saliente

Los problemas con la conectividad de red saliente desde el clúster pueden surgir por diferentes motivos. En primer lugar, asegúrese de que se han cumplido todos los requisitos de red.

Si encuentra problemas de conectividad y el clúster está detrás de un servidor proxy saliente, asegúrese de que ha pasado parámetros de proxy durante la incorporación del clúster y de que el proxy está configurado correctamente. Para obtener más información, consulte Conexión mediante un servidor proxy de salida.

Es posible que vea un error similar al siguiente:

An exception has occurred while trying to execute the cluster diagnostic checks in the cluster. Exception: Unable to pull cluster-diagnostic-checks helm chart from the registry 'mcr.microsoft.com/azurearck8s/helmchart/stable/clusterdiagnosticchecks:0.1.2': Error: failed to do request: Head "https://mcr.microsoft.com/v2/azurearck8s/helmchart/stable/clusterdiagnosticchecks/manifests/0.1.2": dial tcp xx.xx.xx.219:443: i/o timeout

Este error se produce cuando se bloquea el punto de conexión de https://k8connecthelm.azureedge.net. Asegúrese de que su red permita la conectividad a este punto de conexión y cumpla todos los demás requisitos de red.

No se puede recuperar el certificado de MSI

Los problemas para recuperar el certificado de MSI suelen deberse a problemas de red. Compruebe que se han cumplido todos los requisitos de red y vuelva a intentarlo.

Permisos de clúster insuficientes

Si el archivo kubeconfig proporcionado no tiene permisos suficientes para instalar los agentes de Azure Arc, el comando de la CLI de Azure devuelve un error: Error: list: failed to list: secrets is forbidden: User "myuser" cannot list resource "secrets" in API group "" at the cluster scope

Para resolver este problema, asegúrese de que el usuario que conecta el clúster a Azure Arc tiene asignado el rol cluster-admin.

No se puede conectar el clúster de OpenShift a Azure Arc

Si se agota el tiempo espera del comando az connectedk8s connect al intentar conectar un clúster de OpenShift a Azure Arc, compruebe lo siguiente:

  1. Asegúrese de que el clúster de OpenShift cumpla los requisitos previos de la versión: 4.5.41 o más reciente, 4.6.35 o más reciente o 4.7.18 o más reciente.

  2. Antes de ejecutar el comando az connectedk8s connnect, ejecute este otro comando en el clúster:

    oc adm policy add-scc-to-user privileged system:serviceaccount:azure-arc:azure-arc-kube-aad-proxy-sa
    

Tiempos de espera de instalación

Para conectar un clúster de Kubernetes a una versión de Kubernetes habilitada para Azure Arc, es necesario instalar agentes de Azure Arc en el clúster. Si el clúster se ejecuta utilizando una conexión a Internet lenta, la extracción de la imagen del contenedor puede agotar los tiempos de espera de la CLI de Azure.

Error de tiempo de espera de Helm

Es posible que vea el error Unable to install helm release: Error: UPGRADE Failed: time out waiting for the condition. Para resolver este problema, pruebe los siguientes pasos:

  1. Ejecute el siguiente comando:

    kubectl get pods -n azure-arc
    
  2. Compruebe si los pods clusterconnect-agent o config-agent muestran el estado crashloopbackoff o si hay algún contenedor que no se esté ejecutando:

    NAME                                        READY   STATUS             RESTARTS   AGE
    cluster-metadata-operator-664bc5f4d-chgkl   2/2     Running            0          4m14s
    clusterconnect-agent-7cb8b565c7-wklsh       2/3     CrashLoopBackOff   0          1m15s
    clusteridentityoperator-76d645d8bf-5qx5c    2/2     Running            0          4m15s
    config-agent-65d5df564f-lffqm               1/2     CrashLoopBackOff   0          1m14s
    
  3. Si el azure-identity-certificate no está presente, no se ha instalado la identidad administrada asignada por el sistema.

    kubectl get secret -n azure-arc -o yaml | grep name:
    
    name: azure-identity-certificate
    

    Para resolver esta incidencia, intente eliminar la implementación de Arc, ejecute el comando az connectedk8s delete y, después, vuelva a instalarla. Si el problema sigue ocurriendo, podría tratarse de un problema con la configuración de proxy. En ese caso, intente conectar el clúster a Azure Arc a través de un proxy. Compruebe también que se han cumplido todos los requisitos previos de red.

  4. Si los pods clusterconnect-agent y config-agent se están ejecutando pero falta el pod kube-aad-proxy, compruebe las directivas de seguridad de los pods. Este pod usa la cuenta de servicio azure-arc-kube-aad-proxy-sa, que no tiene permisos de administrador, pero requiere el permiso para montar la ruta de acceso del host.

  5. Si el pod kube-aad-proxy está bloqueado en el estado ContainerCreating, compruebe si el certificado kube-aad-proxy se ha descargado en el clúster.

    kubectl get secret -n azure-arc -o yaml | grep name:
    
    name: kube-aad-proxy-certificate
    

    Si falta el certificado, eliminar de implementación e intentar la incorporación de nuevo, con un nombre diferente para el clúster. Si el problema continúa, abra una solicitud de soporte técnico.

Error del módulo CryptoHash

Al intentar incorporar clústeres de Kubernetes a la plataforma de Azure Arc, el entorno local (por ejemplo, la consola de cliente) puede devolver el siguiente mensaje de error:

Cannot load native module 'Crypto.Hash._MD5'

A veces, los módulos dependientes no se descargan correctamente al agregar las extensiones connectedk8s y k8s-configuration a través de la CLI de Azure o Azure PowerShell. Para solucionar este problema, quite manualmente y agregue las extensiones en el entorno local.

Para eliminar las extensiones, use:

az extension remove --name connectedk8s
az extension remove --name k8s-configuration

Para agregar las extensiones, use:

az extension add --name connectedk8s
az extension add --name k8s-configuration

Problemas de conexión del clúster

Si el clúster se encuentra tras un proxy o firewall de salida, compruebe que las conexiones websocket estén habilitadas para usar *.servicebus.windows.net, ya que esto es un requisito específico para el uso de la característica Conexión de clúster. Además, asegúrese de que usa la versión más reciente de la connectedk8sExtensión de la CLI de Azure si tiene problemas con la conexión del clúster.

Si faltan los pods clusterconnect-agent y kube-aad-proxy, es probable que la característica de conexión del clúster esté deshabilitada en el clúster. Si es así, az connectedk8s proxy no podrá establecer una sesión con el clúster y es posible que vea un error al leer Cannot connect to the hybrid connection because no agent is connected in the target arc resource.

Para resolver este error, habilite la característica de conexión del clúster en el clúster:

az connectedk8s enable-features --features cluster-connect -n $CLUSTER_NAME -g $RESOURCE_GROUP

Para más información, consulte Uso de la conexión de clúster para conectarse de forma segura a clústeres de Kubernetes habilitados para Azure Arc.

Habilitación de ubicaciones personalizadas mediante la entidad de servicio

Al conectar el clúster a Azure Arc o al habilitar la característica de ubicaciones personalizadas en un clúster existente, puede que vea la advertencia siguiente:

Unable to fetch oid of 'custom-locations' app. Proceeding without enabling the feature. Insufficient privileges to complete the operation.

Esta advertencia se produce cuando se usa una entidad de servicio para iniciar sesión en Azure y la entidad de servicio no tiene los permisos necesarios. Para evitar este error, siga estos pasos:

  1. Inicie sesión en la CLI de Azure mediante su cuenta de usuario. Recupere el identificador de objeto de la aplicación Microsoft Entra que usa el servicio Azure Arc:

    az ad sp show --id bc313c14-388c-4e7d-a58e-70017303ee3b --query objectId -o tsv
    
  2. Inicie sesión en la CLI de Azure mediante la entidad de servicio. Use el valor <objectId> del paso anterior para habilitar ubicaciones personalizadas en el clúster:

    • Para habilitar ubicaciones personalizadas al conectar el clúster a Arc, ejecute az connectedk8s connect -n <cluster-name> -g <resource-group-name> --custom-locations-oid <objectId>
    • Para habilitar ubicaciones personalizadas en un clúster de Kubernetes habilitado para Azure Arc existente, ejecute az connectedk8s enable-features -n <cluster-name> -g <resource-group-name> --custom-locations-oid <objectId> --features cluster-connect custom-locations

Pasos siguientes