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
- Instale o AksHci.
- Crie um cluster de destino.
- Entre no computador como um usuário administrador diferente (recurso 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 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
- Instale o AksHci.
- Instale o cluster de destino. 3. Desative o cluster (VMs) por mais de 4 dias.
- 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:
Execute o seguinte comando para renovar o certificado gerado manualmente:
Update-AksHciClusterCertificates -Name my-workload -cluster -fixKubeletCredentials
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:
- Localize o endereço IP da VM do painel de controle do cluster de destino.
- Execute o seguinte comando:
ssh -i (get-mocconfig).sshPrivateKey clouduser@<ip>
- Listar os arquivos de tatuagem de certificado:
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 do 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 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
- Instale o AksHci.
- Instale o cluster de destino.
- Não atualize o cluster por 60 dias.
- 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:
Execute o seguinte comando para renovar o certificado gerado manualmente:
Update-AksHciClusterCertificates -Name my-workload -fixKubeletCredentials
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
- Instale o AksHci.
- Instale o cluster de destino.
- Desative cluster(vms) por mais de 4 dias.
- 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:
Execute o seguinte comando para renovar o certificado gerado manualmente:
Update-AksHciClusterCertificates -Name my-workload -cluster -fixKubeletCredentials
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:Obtenha os endereços IP para cada plano de controle no cluster:
kubectl get nodes -o wide
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