Solucionar problemas de plataforma para clusters do Kubernetes habilitados para Azure Arc

Este documento fornece guias de solução de problemas para problemas de conectividade, permissões e agentes do Kubernetes habilitado para Arc. Também fornece guias de solução de problemas para o Azure GitOps, que podem ser usados em clusters de Kubernetes habilitado para Azure Arc ou do AKS (Serviço de Kubernetes do Azure).

Para obter ajuda para solucionar problemas relacionados a extensões, como GitOps (Flux v2), Insights de Contêiner do Azure Monitor, Open Service Mesh, consulte Solucionar problemas de extensão para clusters do Kubernetes habilitados para Azure Arc.

CLI do Azure

Antes de usar os comandos az connectedk8s ou az k8s-configuration da CLI, verifique se a CLI do Azure está definida para funcionar na assinatura correta do Azure.

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

Agentes do Azure Arc

Todos os agentes do Kubernetes habilitado para o Azure Arc são implantados como pods no namespace azure-arc. Todos os pods devem estar em execução e passando as verificações de integridade.

Primeiro, verifique a versão do Pacote do Helm do Azure Arc:

$ 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

Se a versão do Pacote do Helm não for encontrada ou estiver ausente, tente conectar o cluster ao Azure Arc novamente.

Se a versão do Pacote do Helm estiver presente com STATUS: deployed, verifique o status dos agentes usando 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

Todos os pods devem ser mostrados STATUS como Running com um 3/3 ou 2/2 sob a READY coluna. Busque logs e descreva os pods que retornam um Error ou CrashLoopBackOff. Se qualquer pods estiver preso no Pending estado, pode haver recursos insuficientes em nós de cluster. Escalar verticalmente seu cluster pode fazer com que esses pods façam a transição para o estado Running.

Falha no provisionamento de recursos/Erro de tempo limite do serviço

Se você vir esses erros, verifique o status do Azure para ver se há eventos ativos afetando o status do serviço do Kubernetes habilitado para Azure Arc. Nesse caso, aguarde até que o evento de serviço tenha sido resolvido e tente integrar novamente após excluir o recurso de cluster conectado existente. Se não houver eventos de serviço e você continuar enfrentando problemas durante a integração, abra um tíquete de suporte para que possamos investigar o problema.

Erro de declarações excedentes

Se você receber uma declaração excedente, verifique se a entidade de serviço não faz parte de mais de 200 grupos do Microsoft Entra. Se esse for o caso, você deve criar e usar outra entidade de serviço que não seja membro de mais de 200 grupos ou remover a entidade de serviço original de alguns de seus grupos e tentar novamente.

Uma declaração excedente também poderá ocorrer se você tiver configurado um ambiente de proxy de saída sem permitir o ponto de extremidade https://<region>.obo.arc.azure.com:8084/ para o tráfego de saída.

Se nenhum deles se aplicar, abra uma solicitação de suporte para que possamos investigar o problema.

Problemas ao conectar clusters do Kubernetes ao Azure Arc

A conexão de clusters ao Azure Arc requer acesso a uma assinatura do Azure e cluster-admin a um cluster de destino. Se você não conseguir acessar o cluster ou se tiver permissões insuficientes, a conexão do cluster ao Azure Arc falhará. Verifique se você atendeu a todos os pré-requisitos para conectar um cluster.

Dica

Para obter um guia visual para solucionar problemas de conexão, consulte Diagnosticar problemas de conexão para clusters do Kubernetes habilitados para Arc.

Problemas de resolução de DNS

Visite a Resolução de DNS de Depuração para obter ajuda para resolver problemas com a resolução de DNS em seu cluster.

Problemas de conectividade de rede de saída

Problemas com a conectividade de rede de saída do cluster podem surgir por diferentes motivos. Primeiro, verifique se todos os requisitos de rede foram atendidos.

Se você encontrar problemas de conectividade e o cluster estiver atrás de um servidor proxy de saída, verifique se você passou parâmetros de proxy durante a integração do cluster e se o proxy está configurado corretamente. Para obter mais informações, confira Conectar-se usando um servidor proxy de saída.

Você pode ver um erro semelhante ao seguinte:

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

Esse erro ocorre quando o ponto de extremidade https://k8connecthelm.azureedge.net é bloqueado. Certifique-se de que sua rede permita conectividade com esse ponto de extremidade e atenda a todos os outros requisitos de rede.

Não é possível recuperar o certificado MSI

Problemas ao recuperar o certificado MSI geralmente ocorrem devido a problemas de rede. Verifique se todos os requisitos de rede foram atendidos e tente novamente.

Permissões de cluster insuficientes

Se o arquivo kubeconfig fornecido não tiver permissões suficientes para instalar os agentes do Azure Arc, o comando da CLI do Azure retornará um erro: Error: list: failed to list: secrets is forbidden: User "myuser" cannot list resource "secrets" in API group "" at the cluster scope

Para resolver esse problema, verifique se o usuário que conecta o cluster ao Azure Arc tem a função cluster-admin atribuída.

Não é possível conectar o cluster do OpenShift ao Azure Arc

Se az connectedk8s connect está atingindo o tempo limite e há uma falha nele ao conectar um cluster do OpenShift ao Azure Arc:

  1. Garanta que o cluster do OpenShift atenda aos pré-requisitos da versão 4.5.41+, 4.6.35+ ou 4.7.18+.

  2. Antes de executar az connectedk8s connnect, execute este comando no cluster:

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

Tempos limite de instalação

Conectar um cluster do Kubernetes ao Kubernetes habilitado para Azure Arc requer a instalação de agentes do Azure Arc no cluster. Se o cluster for executado em uma conexão lenta com a Internet, o pull de imagem de contêiner para agentes poderá levar mais tempo do que o CLI do Azure tempo limite.

Erro de tempo limite do Helm

Você pode ver o erro Unable to install helm release: Error: UPGRADE Failed: time out waiting for the condition. Para resolver esse problema, siga as etapas a seguir:

  1. Execute o comando a seguir:

    kubectl get pods -n azure-arc
    
  2. Verifique se os pods clusterconnect-agent ou config-agent estão mostrando crashloopbackoff ou se nem todos os contêineres estão em execução:

    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. Se não azure-identity-certificate estiver presente, a identidade gerenciada atribuída pelo sistema não foi instalada.

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

    Para resolver este problema pode tentar excluir a implantação do Arc executando o comando az connectedk8s delete e, depois, reinstalá-lo. Se o problema continuar a acontecer, pode ser um problema com suas configurações de proxy. Nesse caso, tente conectar seu cluster ao Azure Arc por meio de um proxy para conectar seu cluster ao Arc por meio de um proxy. Verifique também se todos os pré-requisitos de rede foram atendidos.

  4. Se os pods clusterconnect-agent e config-agent estiverem em execução, mas o pod kube-aad-proxy estiver ausente, verifique as políticas de segurança do pod. Esse pod usa a conta de serviço azure-arc-kube-aad-proxy-sa, que não tem permissões de administrador, mas exige a permissão para montar o caminho do host.

  5. Se o pod kube-aad-proxy estiver preso no estado ContainerCreating, verifique se o certificado kube-aad-proxy foi baixado no cluster.

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

    Se o certificado estiver ausente, exclua a implantação e tente integrar novamente, usando um nome diferente para o cluster. Se o problema continuar, abra uma solicitação de suporte.

Erro do módulo CryptoHash

Ao tentar integrar clusters do Kubernetes à plataforma do Azure Arc, o ambiente local (por exemplo, o console do cliente) pode retornar a seguinte mensagem de erro:

Cannot load native module 'Crypto.Hash._MD5'

Às vezes, os módulos dependentes não são baixados com êxito quando as extensões connectedk8s e k8s-configuration são adicionadas por meio da CLI do Azure ou do Azure PowerShell. Para corrigir esse problema, remova as extensões manualmente e adicione-as no ambiente local.

Para remover as extensões, use:

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

Para adicionar as extensões, use:

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

Problemas de conexão de cluster

Se o cluster estiver protegido por um proxy de saída ou firewall, verifique se as conexões de websocket estão habilitadas para *.servicebus.windows.net, o que é necessário especificamente para o recurso Cluster Connect. Além disso, verifique se você está usando a versão mais recente da extensão connectedk8s da CLI do Azure se estiver enfrentando problemas usando a conexão de cluster.

Se os pods clusterconnect-agent e kube-aad-proxy estiverem ausentes, o recurso de conexão de cluster provavelmente estará desabilitado no cluster. Nesse caso, az connectedk8s proxy não estabelecerá uma sessão com o cluster e você poderá ver um erro lendo Cannot connect to the hybrid connection because no agent is connected in the target arc resource.

Para resolver esse erro, habilite o recurso de conexão de cluster em seu cluster:

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

Para obter mais informações, consulte Usar a conexão de cluster para se conectar com segurança aos clusters do Kubernetes habilitados para Azure Arc.

Habilitar locais personalizados usando a entidade de serviço

Ao conectar o cluster ao Azure Arc ou ao habilitar as localizações personalizadas em um cluster existente, você pode ver o seguinte aviso:

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

Esse aviso ocorre quando você usa uma entidade de serviço para fazer logon no Azure e a entidade de serviço não tem as permissões necessárias. Para evitar esse erro, siga estas etapas:

  1. Entre na CLI do Azure com a conta de usuário. Recupere a ID do objeto do aplicativo Microsoft Entra usado pelo serviço Azure Arc:

    az ad sp show --id bc313c14-388c-4e7d-a58e-70017303ee3b --query objectId -o tsv
    
  2. Entre na CLI do Azure com a entidade de serviço. Use o valor <objectId> da etapa anterior para habilitar locais personalizados no cluster:

    • Para habilitar locais personalizados ao conectar o cluster ao Arc, execute az connectedk8s connect -n <cluster-name> -g <resource-group-name> --custom-locations-oid <objectId>
    • Para habilitar locais personalizados em um cluster do Kubernetes habilitado para Azure Arc existente, execute az connectedk8s enable-features -n <cluster-name> -g <resource-group-name> --custom-locations-oid <objectId> --features cluster-connect custom-locations

Próximas etapas