Editar

Compartilhar via


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

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

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

O Get-AksHciCredential cmdlet do PowerShell falha quando executado por um usuário administrador diferente do 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.

Para reproduzir

  1. Instale o AksHci.
  2. Crie um cluster de destino.
  3. Entre no computador como um usuário administrador diferente (recurso de vários administradores).
  4. Execute Get-AksHciCredential -Name $clusterName.

Comportamento esperado

Get-AksHciCredential deve ser capaz de criar um diretório .kube no diretório base 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 essa etapa, Get-AksHciCredential não deve falhar.

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

O cluster de destino não fica acessível quando os certificados do plano de controle falham na renovação. 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

Observação

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

Para reproduzir

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

Sintomas e mitigaçã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. Gerar novas credenciais:

    Get-AksHciCredential -name <clustername>
    

Depois de alguns minutos, tente o kubectl comando novamente para ver se o cluster agora está disponível.

Observação

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

  1. Localize o endereço IP da VM do painel de controle do cluster de destino.
  2. Execute o seguinte comando: ssh -i (get-mocconfig).sshPrivateKey clouduser@<ip>
  3. Listar os arquivos de tatuagem de certificado: 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 do 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 resolve o problema:
  • Exclua o antigo certificado de dispositivo de gerenciamento removendo $env:UserProfile.wssd\kvactl\cloudconfig.
  • Execute Repair-AksHciCerts.
  • Execute Get-AksHciCluster para marcar que ele foi 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 de 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

Observação

Esse é um problema conhecido no AksHci versão 1.0.14.x e anterior. Ele foi 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.

Para 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 mitigaçã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. Gerar novas credenciais:

    Get-AksHciCredential -name <clustername>
    

Plano de controle de cluster – certificado expirado – Não é possível se conectar ao servidor: x509

O cluster de destino não fica acessível quando os certificados do plano de controle falham na renovação. 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

Observação

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

Para reproduzir

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

Sintomas e mitigaçã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. Gerar novas credenciais:

    Get-AksHciCredential -name <clustername>
    

Depois de alguns minutos, tente o kubectl comando novamente para ver se o cluster agora está disponível.

O pod KMS falha e os logs de 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.
  • A montagem de segredos falha em volumes quando você tenta criar pods.
  • Falha ao iniciar o apiserver.

Procure erros nos logs de 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: expirado]'

O certificado mocctl expirará se não for usado por mais de 60 dias. O AKS Arc usa a mocctl ferramenta de linha de comando para se comunicar com o MocStack para executar operações relacionadas ao Moc. O certificado que o mocclt comando usa para se comunicar com o 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 expirará.

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

Para corrigir o problema, faça logon novamente quando o certificado expirar. Execute o seguinte comando do PowerShell para fazer logon:

Repair-MocLogin

Excluir certificado KVA se tiver 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 gerará o erro a seguir.

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

Para resolve 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 comando a seguir:

$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

Permissões especiais do Active Directory são necessárias para nós do Azure Stack HCI ingressados no domínio

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

Eleve as permissões do usuário.

Uninstall-AksHciAdAuth falha com o erro '[Erro do servidor (NotFound): segredos "keytab-akshci-scale-reliability" não encontrados]'

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

This issue will be fixed.

os logs kubectl retornam "erro: você deve estar conectado ao servidor (o servidor solicitou que o cliente forneça 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 solicitou que o cliente forneça credenciais)". O AKS Arc gira os certificados principais do Kubernetes a cada 4 dias, mas às vezes o servidor de API do Kubernetes não recarrega imediatamente seu certificado de cliente para comunicação com kubelet quando os certificados são atualizados.

Para atenuar o problema, há várias opções:

  • Execute novamente kubectl logs. 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 para um cluster. Reiniciar o servidor de API não afeta a execução de cargas de trabalho. Para reiniciar o servidor de API, siga estas etapas:

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

      kubectl get nodes -o wide
      
    2. Execute o comando a seguir:

      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