Editar

Partilhar via


Corrigir problemas e erros conhecidos de segurança e identidade no AKS Arc

Use este tópico para ajudá-lo a solucionar e resolver problemas relacionados à segurança e identidade no AKS Arc.

Get-AksHciCredential falha com o erro "não é possível encontrar o caminho especificado"

O Get-AksHciCredential cmdlet do PowerShell falha quando executado por um usuário administrador diferente daquele usado para instalar o AksHci. O comando cria um diretório .kube e coloca o arquivo de configuração nele. No entanto, o comando falha com o seguinte erro:

Error: open C:\Users\<user>\.kube\config: The system cannot find the path specified.

Reproduzir

  1. Instale o AksHci.
  2. Crie um cluster de destino.
  3. Inicie sessão na máquina como um utilizador administrador diferente (funcionalidade multi-admin).
  4. Execute o Get-AksHciCredential -Name $clusterName.

Comportamento esperado

Get-AksHciCredential deve ser capaz de criar um diretório .kube no diretório inicial do usuário e colocar o arquivo de configuração nesse diretório.

Para contornar o problema, crie um diretório .kube no diretório base do usuário. Use o seguinte comando para criar o diretório:

mkdir "$HOME/.kube"

Após este passo, Get-AksHciCredential não deve falhar.

Erro "Certificado expirado - Não é possível conectar-se ao servidor: x509"

O cluster de destino não está acessível quando os certificados do plano de controle não são renovados. Ao tentar acessar o cluster, o kubectl comando exibe o seguinte erro:

certificate expired - Unable to connect to the server: x509: certificate has expired or is not yet valid: current time 2022-07-26T12:24:15-04:00 is after 2022-07-15T15:01:07Z

Nota

Esse problema foi corrigido na versão de setembro de 2022 e posterior.

Reproduzir

  1. Instale o AksHci.
  2. Instale o cluster de destino. 3. Desligue o cluster (VMs) por mais de 4 dias.
  3. Ligue o cluster novamente.

Sintomas e atenuação

O cluster de destino está inacessível. Qualquer kubectl comando executado no cluster de destino retorna uma mensagem de erro semelhante à seguinte:

certificate expired - Unable to connect to the server: x509: certificate has expired or is not yet valid: current time 2022-07-26T12:24:15-04:00 is after 2022-07-15T15:01:07Z

Para corrigir o problema:

  1. Execute o seguinte comando para renovar o certificado gerado manualmente:

    Update-AksHciClusterCertificates  -Name my-workload -cluster -fixKubeletCredentials
    
  2. Gere novas credenciais:

    Get-AksHciCredential -name <clustername>
    

Após alguns minutos, tente o kubectl comando novamente para ver se o cluster está disponível.

Nota

Há um bug conhecido no AksHci versão 1.0.14.x e anteriores. Se a VM do plano de controle tiver um padrão de nome diferente de -control-plane-, o Update-AksHciClusterCertificates comando pode não funcionar. Você deve atualizar o certificado fazendo login na VM do plano de controle:

  1. Localize o endereço IP da VM do plano de controle de cluster de destino.
  2. Execute o seguinte comando: ssh -i (get-mocconfig).sshPrivateKey clouduser@<ip>
  3. Liste os arquivos de tatuagem cert: sudo ls /etc/kubernetes/pki/cert-tattoo-*
  4. Gere certificados usando cada arquivo listado pelo comando anterior: sudo /usr/bin/cert-tattoo-provision CreateCertsWithAltNames <absolute-path-of-cert-tattoo-file>

Falha no handshake de autenticação: x509: certificado assinado por autoridade desconhecida

Você pode ver esse erro ao implantar um novo cluster AKS ou adicionar um pool de nós a um cluster existente.

  1. Verifique se o usuário que executou o comando é o mesmo usuário que instalou o AKS no Azure Stack ou no Windows Server. Para obter mais informações sobre como conceder acesso a vários usuários, consulte Configurar vários administradores.
  2. Se o usuário for o mesmo e o erro persistir, siga as etapas abaixo para resolver o problema:
  • Exclua o certificado antigo do dispositivo de gerenciamento removendo $env:UserProfile.wssd\kvactl\cloudconfigo .
  • Execute o Repair-AksHciCerts.
  • Execute Get-AksHciCluster para verificar se está corrigido.

Os logs de pod do cluster de destino não estão acessíveis - erro remoto: tls: erro interno

Os logs de cluster de destino não estão acessíveis. Quando você tenta acessar logs pod no cluster de destino, o seguinte erro TLS é exibido:

Error from server: Get "[https://10.0.0.0:10250/containerLogs/kube-system/kube-apiserver-moc-l9iv8xjn3av/kube-apiserver":](https://10.0.0.0:10250/containerLogs/kube-system/kube-apiserver-moc-l9iv8xjn3av/kube-apiserver%22:) remote error: tls: internal error

Nota

Este é um problema conhecido no AksHci versão 1.0.14.x e anteriores. Ele é corrigido como parte da versão 1.0.14.x (versão de setembro e posterior). Os clusters de destino atualizados para esta versão não devem enfrentar esse problema.

Reproduzir

  1. Instale o AksHci.
  2. Instale o cluster de destino.
  3. Não atualize o cluster por 60 dias.
  4. Reinicie o cluster.

Sintomas e atenuação

Os logs do pod de destino não devem estar acessíveis. Qualquer kubectl comando de log executado no cluster de destino deve retornar com uma mensagem de erro semelhante à seguinte:

Error from server: Get "[https://10.0.0.0:10250/containerLogs/kube-system/kube-apiserver-moc-l9iv8xjn3av/kube-apiserver":](https://10.0.0.0:10250/containerLogs/kube-system/kube-apiserver-moc-l9iv8xjn3av/kube-apiserver%22:) remote error: tls: internal error

Para corrigir o problema:

  1. Execute o seguinte comando para renovar o certificado gerado manualmente:

    Update-AksHciClusterCertificates  -Name my-workload -fixKubeletCredentials
    
  2. Gere novas credenciais:

    Get-AksHciCredential -name <clustername>
    

Cluster controlplane - certificado expirado - Não é possível conectar-se ao servidor: x509

O cluster de destino não está acessível quando os certificados do plano de controle não são renovados. Ao tentar acessar o cluster, o kubectl comando gera o seguinte erro:

certificate expired - Unable to connect to the server: x509: certificate has expired or is not yet valid: current time 2022-07-26T12:24:15-04:00 is after 2022-07-15T15:01:07Z

Nota

Esse problema foi corrigido na versão de setembro de 2022 e posterior.

Reproduzir

  1. Instale o AksHci.
  2. Instale o cluster de destino.
  3. Desative o cluster (vms) por mais de 4 dias.
  4. Ligue o cluster novamente.

Sintomas e atenuação

O cluster de destino deve estar inacessível. Qualquer kubectl comando executado no cluster de destino deve retornar com uma mensagem de erro semelhante à seguinte:

certificate expired - Unable to connect to the server: x509: certificate has expired or is not yet valid: current time 2022-07-26T12:24:15-04:00 is after 2022-07-15T15:01:07Z

Para corrigir o problema:

  1. Execute o seguinte comando para renovar o certificado gerado manualmente:

    Update-AksHciClusterCertificates  -Name my-workload -cluster -fixKubeletCredentials
    
  2. Gere novas credenciais:

    Get-AksHciCredential -name <clustername>
    

Após alguns minutos, tente o kubectl comando novamente para ver se o cluster está disponível.

O pod KMS falha e os logs do pod KMS contêm erros

Alguns possíveis sintomas desse problema são:

  • kubectl get secrets falha com um erro interno.
  • kubectl logs <kmspod-name> -n kube-system contém erros.
  • Os segredos de montagem falham em volumes quando você tenta criar pods.
  • O apiserver falha ao iniciar.

Procure erros nos logs do pod KMS executando o seguinte comando:

kubectl logs <kmspod-name> -n kube-system

Se os logs retornarem um erro em relação a um token inválido no pod KMS do cluster de gerenciamento, execute o seguinte comando:

Update-AksHciCertificates

Se houver um erro em relação a um token inválido no pod KMS do cluster de destino, execute o seguinte comando:

UpdateAksHciClusterCertificates -name <cluster-name> -fixcloudcredential

Erro 'System.Collections.Hashtable.generic_non_zero 1 [Erro: O certificado expirou: expirou]'

O certificado mocctl expira se não for usado por mais de 60 dias. O AKS Arc usa a ferramenta de linha de comando para se comunicar com o mocctl MocStack para executar operações relacionadas ao Moc. O certificado que o comando usa para se comunicar com o mocclt cloudagent expira em 60 dias. O mocctl comando renova o certificado automaticamente quando ele é usado perto de sua expiração (após ~42 dias). Se o comando não for usado com frequência, o certificado expira.

Para reproduzir o comportamento, instale o AKS Arc, e nenhuma operação envolvendo o comando é executada mocctl por 60 dias.

Para corrigir o problema, inicie sessão novamente assim que o certificado expirar. Execute o seguinte comando do PowerShell para fazer logon:

Repair-MocLogin

Excluir certificado KVA se expirado após 60 dias

O certificado KVA expira após 60 dias se nenhuma atualização for executada.

Update-AksHci e qualquer comando envolvendo kvactl lançará o seguinte erro.

Error: failed to get new provider: failed to create azurestackhci session: Certificate has expired: Expired

Para resolver esse erro, exclua o arquivo de certificado expirado em \kvactl\cloudconfig e tente Update-AksHci novamente no nó vendo o problema de expiração do certificado. Você pode usar o seguinte comando:

$env:UserProfile.wssd\kvactl\cloudconfig

Você pode encontrar uma discussão sobre o problema no certificado KVA precisa ser excluído se o certificado KVA expirou após 60 dias

São necessárias permissões especiais do Ative Directory para nós locais do Azure que ingressaram no domínio

Os usuários que implantam e configuram o Serviço Kubernetes do Azure no Azure Local precisam ter permissão de Controle Total para criar objetos do AD no contêiner do Ative Directory no qual o servidor e os objetos de serviço são criados.

Eleve as permissões do usuário.

Uninstall-AksHciAdAuth falha com o erro '[Error from server (NotFound): secrets "keytab-akshci-scale-reliability" not found]'

Se Uninstall-AksHciAdAuth exibir esse erro, você deve ignorá-lo por enquanto, pois esse problema será corrigido.

This issue will be fixed.

kubectl logs return "erro: Você deve estar conectado ao servidor (o servidor pediu para o cliente fornecer credenciais)"

Há um problema com o AKS Arc no qual um cluster pode parar de retornar logs. Quando isso acontece, a execução kubectl logs <pod_name> retorna "erro: Você deve estar conectado ao servidor (o servidor pediu para o cliente fornecer credenciais)". O AKS Arc gira os principais certificados do Kubernetes a cada 4 dias, mas às vezes o servidor da API do Kubernetes não recarrega imediatamente seu certificado de cliente para comunicação com o kubelet quando os certificados são atualizados.

Para mitigar o problema, existem várias opções:

  • Execute kubectl logsnovamente . Por exemplo, execute o seguinte comando do PowerShell:

    while (1) {kubectl logs <POD_NAME>; sleep 1}
    
  • Reinicie o kube-apiserver contêiner em cada um dos planos de controle de um cluster. A reinicialização do servidor de API não afeta as cargas de trabalho em execução. Para reiniciar o servidor de API, siga estes passos:

    1. Obtenha os endereços IP para cada plano de controle em seu cluster:

      kubectl get nodes -o wide
      
    2. Execute o seguinte comando:

      ssh -i (get-akshciconfig).Moc.sshPrivateKey clouduser@<CONTROL_PLANE_IP> 'sudo crictl stop $(sudo crictl ps --name kube-apiserver -o json | jq -r .containers[0].id)'
      
  • Opcionalmente, mas não recomendado para cargas de trabalho de produção, você pode pedir kube-apiserver para não verificar o certificado do servidor do kubelet:

    kubectl logs <POD_NAME> --insecure-skip-tls-verify-backend=true