Editar

Share via


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

Utilize este tópico para o ajudar a resolver problemas de 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 utilizador administrador diferente do utilizado para instalar o AksHci. O comando cria um diretório .kube e coloca o ficheiro de configuração no mesmo. 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. Criar um cluster de destino.
  3. Inicie sessão no computador como um utilizador administrador diferente (funcionalidade 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 raiz do utilizador e colocar o ficheiro de configuração nesse diretório.

Para contornar o problema, crie um diretório .kube no diretório raiz do utilizador. Utilize 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 ligar ao servidor: x509"

O cluster de destino não está acessível quando os certificados do plano de controlo não são renovados. Ao tentar aceder ao cluster, o kubectl comando apresenta 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

Este 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) durante mais de 4 dias.
  3. Ative novamente o cluster.

Sintomas e mitigação

O cluster de destino está inacessível. Qualquer kubectl comando executado no cluster de destino devolve 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 manualmente o certificado gerado:

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

    Get-AksHciCredential -name <clustername>
    

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

Nota

Existe um erro conhecido na versão 1.0.14.x do AksHci e anterior. Se a VM do plano de controlo tiver um padrão de nome diferente -control-plane-de , o Update-AksHciClusterCertificates comando poderá não funcionar. Tem de atualizar o certificado ao iniciar sessão na VM do plano de controlo:

  1. Localize o endereço IP da VM do plano de controlo do cluster de destino.
  2. Execute o seguinte comando: ssh -i (get-mocconfig).sshPrivateKey clouduser@<ip>
  3. Liste os ficheiros de tatuagem de certificado: sudo ls /etc/kubernetes/pki/cert-tattoo-*
  4. Gere certificados com cada ficheiro 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

Poderá ver este erro ao implementar um novo cluster do AKS ou ao adicionar um conjunto de nós a um cluster existente.

  1. Verifique se o utilizador que executou o comando é o mesmo utilizador que instalou o AKS no Azure Stack ou no Windows Server. Para obter mais informações sobre como conceder acesso a vários utilizadores, veja Configurar vários administradores.
  2. Se o utilizador for o mesmo e o erro persistir, siga os passos abaixo para resolver o problema:
  • Elimine o certificado da aplicação de gestão antigo ao remover $env:UserProfile.wssd\kvactl\cloudconfig.
  • Execute Repair-AksHciCerts.
  • Execute Get-AksHciCluster para verificar se foi corrigido.

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

Os registos do cluster de destino não estão acessíveis. Quando tenta aceder aos registos de pods no cluster de destino, é apresentado o seguinte erro TLS:

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 na versão 1.0.14.x e anterior do AksHci. 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 ter este problema.

Para reproduzir

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

Sintomas e mitigação

Os registos do pod de destino não devem estar acessíveis. Qualquer kubectl comando de registo executado no cluster de destino deve devolver 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 manualmente o certificado gerado:

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

    Get-AksHciCredential -name <clustername>
    

Plano de controlo do cluster – certificado expirado – Não é possível ligar ao servidor: x509

O cluster de destino não está acessível quando os certificados do plano de controlo não são renovados. Ao tentar aceder ao 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

Este 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) durante mais de 4 dias.
  4. Ative novamente o cluster.

Sintomas e mitigação

O cluster de destino deve estar inacessível. Qualquer kubectl comando executado no cluster de destino deve devolver 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 manualmente o certificado gerado:

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

    Get-AksHciCredential -name <clustername>
    

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

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

Alguns possíveis sintomas deste 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 tenta criar pods.
  • Falha ao iniciar o apiserver.

Procure erros nos registos do pod KMS ao executar o seguinte comando:

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

Se os registos devolverem um erro relativo a um token inválido no pod KMS do cluster de gestão, execute o seguinte comando:

Update-AksHciCertificates

Se existir 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 utilizado durante mais de 60 dias. O AKS Arc utiliza a mocctl ferramenta de linha de comandos para comunicar com o MocStack para realizar operações relacionadas com o Moc. O certificado que o mocclt comando utiliza para comunicar com o cloudagent expira dentro de 60 dias. O mocctl comando renova o certificado automaticamente quando é utilizado perto da expiração (após ~42 dias). Se o comando não for utilizado com frequência, o certificado expira.

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

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

Repair-MocLogin

Eliminar certificado KVA se tiver expirado após 60 dias

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

Update-AksHci e qualquer comando que envolva kvactl gerará o seguinte erro.

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

Para resolver este erro, elimine o ficheiro de certificado expirado em \kvactl\cloudconfig e tente Update-AksHci novamente no nó que vê o problema de expiração do certificado. Pode utilizar o seguinte comando:

$env:UserProfile.wssd\kvactl\cloudconfig

Pode encontrar um debate sobre o problema no certificado KVA que tem de ser eliminado se o Certificado KVA tiver expirado após 60 dias

São necessárias permissões especiais do Active Directory para nós do Azure Stack HCI associados a um domínio

Os utilizadores que implementam e configuram Azure Kubernetes Service no Azure Stack HCI precisam de ter permissão de Controlo Total para criar objetos do AD no contentor do Active Directory no qual o servidor e os objetos de serviço são criados.

Eleve as permissões do utilizador.

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

Se Uninstall-AksHciAdAuth apresentar este erro, deve ignorá-lo por agora, uma vez que este problema será corrigido.

This issue will be fixed.

os registos kubectl devolvem "erro: tem de ter sessão iniciada no servidor (o servidor pediu ao cliente para fornecer credenciais)"

Existe um problema com o AKS Arc em que um cluster pode parar de devolver registos. Quando isto acontece, a execução kubectl logs <pod_name> devolve "erro: tem de ter sessão iniciada no servidor (o servidor pediu ao cliente para fornecer credenciais)". O AKS Arc roda certificados kubernetes principais a cada 4 dias, mas, por vezes, o servidor da API do Kubernetes não recarrega imediatamente o certificado de cliente para comunicação com o kubelet quando os certificados são atualizados.

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

  • Executar novamente kubectl logs. Por exemplo, execute o seguinte comando do PowerShell:

    while (1) {kubectl logs <POD_NAME>; sleep 1}
    
  • Reinicie o kube-apiserver contentor em cada um dos planos de controlo de um cluster. Reiniciar o servidor de API não afeta a execução de cargas de trabalho. Para reiniciar o servidor de API, siga estes passos:

    1. Obtenha os endereços IP de cada plano de controlo no 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, pode pedir kube-apiserver para não verificar o certificado de servidor do kubelet:

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