Compartilhar via


Resolver falhas de "invocação de comando az aks"

Este artigo descreve como resolver falhas de invocação de comando az aks na CLI do Microsoft Azure para que você possa se conectar com êxito a qualquer cluster do AKS (Serviço de Kubernetes do Azure), especialmente a um cluster AKS privado.

Outros métodos de conexão precisam usar componentes de configuração extras, conforme mostrado na tabela a seguir.

Métodos de conexão Componente de configuração extra
Rede virtual Rede virtual privada (VPN)
Rede emparelhada Azure ExpressRoute
Ponto de extremidade privado Caixa de salto

O az aks command invoke comando da CLI do Azure é uma maneira alternativa de se conectar a um cluster que não requer componentes de configuração extras.

Quando você executa o az aks command invoke comando, a aks-command CLI do Azure cria automaticamente um command-<ID> pod no namespace para acessar o cluster do AKS e recuperar as informações necessárias.

Pré-requisitos

Sintomas

A tabela a seguir lista as mensagens de erro comuns az aks command invoke . Cada mensagem de erro tem um link para a seção que descreve por que o erro está ocorrendo e como corrigi-lo.

Mensagem de erro Link
A operação retornou um status inválido 'Não encontrado' Causa 1: o pod não pode ser criado devido a restrições de nó ou recurso
Falha ao executar o comando no cluster gerenciado devido a uma falha do kubernetes. detalhes: webhook de admissão "validation.gatekeeper.sh" negou a solicitação: <policy-specific-message> Causa 2: o Azure Policy não permite a criação do pod
Erro do servidor (Proibido): namespaces é proibido: o "<ID" do usuário não pode listar o recurso "<recurso>>" no grupo de APIs "" no escopo do cluster Causa 3: as funções necessárias não são concedidas
Falha ao conectar ao MSI. Verifique se o MSI está configurado corretamente.

Solicitação Get Token retornada: Resposta [400];
Causa 4: há um problema do Cloud Shell

Causa 1: o pod não pode ser criado devido a restrições de nó ou recurso

A operação retorna um Not Found status porque o command-<ID> pod não pode atingir um estado bem-sucedido, como Running. (Em muitos casos, o pod permanece no Pending estado.) Nesse caso, os nós não podem agendar o pod. Esse cenário pode ter diferentes causas, como as seguintes causas:

  • Restrições de recursos
  • Nós que têm um NotReady estado ou SchedulingDisabled
  • Nós que têm taints que o pod não pode tolerar
  • Outras causas

Solução 1: Altere a configuração para que você possa agendar e executar o pod

Certifique-se de que o pod possa ser agendado command-<ID> e executado ajustando a configuração. Por exemplo:

  • Aumente o tamanho do pool de nós e certifique-se de que ele não tenha restrições de isolamento de pod, como taints, para que o command-<ID> pod possa ser implantado.
  • Ajuste as solicitações e os limites de recursos nas especificações do pod.

Causa 2: o Azure Policy não permite a criação do pod

Se você tiver políticas específicas do Azure, o az aks command invoke comando poderá falhar devido a uma configuração não permitida no command-<ID> pod. Por exemplo, você pode ter uma política do Azure que requer um sistema de arquivos raiz somente leitura ou outra configuração específica.

Solução 2: Isentar o namespace para políticas que proíbem a criação de pods

Recomendamos que você isente o aks-command namespace para as políticas do Azure associadas que não permitem a criação do pod. Para obter mais informações sobre isenção, consulte Entender o escopo no Azure Policy

Para isentar uma Política do Azure:

  1. No portal do Azure, pesquise e selecione Política.

  2. No painel de navegação Política, localize a seção Criação e selecione Atribuições.

  3. Na tabela de atribuições, localize a linha que contém o Nome da atribuição que você deseja alterar e selecione o nome da atribuição.

  4. Na página de atribuição de política dessa atribuição, selecione Editar atribuição.

  5. Selecione a guia Parâmetros.

  6. Desmarque a opção Mostrar apenas parâmetros que precisam de entrada ou revisão .

  7. Na caixa Exclusões de namespace, adicione o namespace aks-command à lista de namespaces a serem excluídos.

Como alternativa, se a política não for uma política interna, você poderá verificar a configuração do command-<ID> pod e ajustar a política conforme necessário. Para explorar a configuração YAML do pod, execute o seguinte comando:

kubectl get pods command-<ID> --namespace aks-command --output yaml

Você pode isentar o aks-command namespace de políticas restritivas executando o seguinte 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: as funções necessárias não são concedidas

Para usar o az aks command invoke comando, você deve ter acesso às seguintes funções no cluster:

  • Microsoft.ContainerService/managedClusters/runCommand/action
  • Microsoft.ContainerService/managedClusters/commandResults/read

Se você não tiver essas funções, o az aks command invoke comando não poderá recuperar as informações necessárias.

Solução 3: Adicionar as funções necessárias

Para resolver esse problema, siga estas etapas:

  1. Adicione as Microsoft.ContainerService/managedClusters/runCommand/action funções e Microsoft.ContainerService/managedClusters/commandResults/read .

  2. Atribua as funções necessárias ao usuário:

    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: há um problema do Cloud Shell

O az aks command invoke comando não é processado conforme o esperado quando é executado diretamente no ambiente do Azure Cloud Shell . Esse é um problema conhecido no Cloud Shell.

Solução 4a: execute o comando az login primeiro

No Cloud Shell, execute o comando az login antes de executar o az aks command invoke comando. Por exemplo:

az login
az aks command invoke --resource-group {resource-group} --name {aks-cluster} --command "kubectl get pods"

Solução 4b: execute o comando em um computador local ou em uma máquina virtual

Execute o az aks command invoke comando em um computador local ou em qualquer VM (máquina virtual) que tenha a CLI do Azure instalada.

Aviso de isenção de responsabilidade para informações de terceiros

Os produtos de terceiros mencionados neste artigo são produzidos por empresas independentes da Microsoft. A Microsoft não oferece nenhuma garantia, implícita ou não, do desempenho ou da confiabilidade desses produtos.

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.