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
A ferramenta kubectl do Kubernetes. Para instalar o kubectl usando a CLI do Azure, execute o comando az aks install-cli .
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 ouSchedulingDisabled
- 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:
No portal do Azure, pesquise e selecione Política.
No painel de navegação Política, localize a seção Criação e selecione Atribuições.
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.
Na página de atribuição de política dessa atribuição, selecione Editar atribuição.
Selecione a guia Parâmetros.
Desmarque a opção Mostrar apenas parâmetros que precisam de entrada ou revisão .
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:
Adicione as
Microsoft.ContainerService/managedClusters/runCommand/action
funções eMicrosoft.ContainerService/managedClusters/commandResults/read
.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.