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
- Instale o AksHci.
- Criar um cluster de destino.
- Inicie sessão no computador como um utilizador administrador diferente (funcionalidade de vários administradores).
- 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
- Instale o AksHci.
- Instale o cluster de destino. 3. Desative o cluster (VMs) durante mais de 4 dias.
- 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:
Execute o seguinte comando para renovar manualmente o certificado gerado:
Update-AksHciClusterCertificates -Name my-workload -cluster -fixKubeletCredentials
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:
- Localize o endereço IP da VM do plano de controlo do cluster de destino.
- Execute o seguinte comando:
ssh -i (get-mocconfig).sshPrivateKey clouduser@<ip>
- Liste os ficheiros de tatuagem de certificado:
sudo ls /etc/kubernetes/pki/cert-tattoo-*
- 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.
- 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.
- 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
- Instale o AksHci.
- Instale o cluster de destino.
- Não atualize o cluster durante 60 dias.
- 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:
Execute o seguinte comando para renovar manualmente o certificado gerado:
Update-AksHciClusterCertificates -Name my-workload -fixKubeletCredentials
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
- Instale o AksHci.
- Instale o cluster de destino.
- Desative o cluster(vms) durante mais de 4 dias.
- 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:
Execute o seguinte comando para renovar manualmente o certificado gerado:
Update-AksHciClusterCertificates -Name my-workload -cluster -fixKubeletCredentials
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:Obtenha os endereços IP de cada plano de controlo no 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, pode pedir
kube-apiserver
para não verificar o certificado de servidor do kubelet:kubectl logs <POD_NAME> --insecure-skip-tls-verify-backend=true