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
- Instale o AksHci.
- Crie um cluster de destino.
- Inicie sessão na máquina como um utilizador administrador diferente (funcionalidade multi-admin).
- 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
- Instale o AksHci.
- Instale o cluster de destino. 3. Desligue o cluster (VMs) por mais de 4 dias.
- 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:
Execute o seguinte comando para renovar o certificado gerado manualmente:
Update-AksHciClusterCertificates -Name my-workload -cluster -fixKubeletCredentials
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:
- Localize o endereço IP da VM do plano de controle de cluster de destino.
- Execute o seguinte comando:
ssh -i (get-mocconfig).sshPrivateKey clouduser@<ip>
- Liste os arquivos de tatuagem cert:
sudo ls /etc/kubernetes/pki/cert-tattoo-*
- 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.
- 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.
- 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\cloudconfig
o . - 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
- Instale o AksHci.
- Instale o cluster de destino.
- Não atualize o cluster por 60 dias.
- 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:
Execute o seguinte comando para renovar o certificado gerado manualmente:
Update-AksHciClusterCertificates -Name my-workload -fixKubeletCredentials
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
- Instale o AksHci.
- Instale o cluster de destino.
- Desative o cluster (vms) por mais de 4 dias.
- 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:
Execute o seguinte comando para renovar o certificado gerado manualmente:
Update-AksHciClusterCertificates -Name my-workload -cluster -fixKubeletCredentials
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 logs
novamente . 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:Obtenha os endereços IP para cada plano de controle em seu cluster:
kubectl get nodes -o wide
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