Correggere i problemi noti e gli errori noti relativi alla sicurezza e all'identità nel servizio Azure Kubernetes Arc

Usare questo argomento per risolvere i problemi relativi alla sicurezza e alle identità in Azure Kubernetes Arc.

Get-AksHciCredential ha esito negativo e viene visualizzato l'errore "Cannot find the path specified" (Impossibile trovare il percorso specificato)

Il Get-AksHciCredential cmdlet di PowerShell ha esito negativo quando viene eseguito da un utente amministratore diverso da quello usato per l'installazione di AksHci. Il comando crea una directory con estensione kube e lo inserisce nel file di configurazione. Tuttavia, il comando ha esito negativo con l'errore seguente:

Error: open C:\Users\<user>\.kube\config: The system cannot find the path specified.

Per riprodurre

  1. Installare AksHci.
  2. Creare un cluster di destinazione.
  3. Accedere al computer come utente amministratore diverso (funzionalità multiamministratore).
  4. Eseguire Get-AksHciCredential -Name $clusterName.

Comportamento previsto

Get-AksHciCredential deve essere in grado di creare una directory .kube nella home directory dell'utente e posizionare il file di configurazione in tale directory.

Per risolvere il problema, creare una directory .kube nella home directory dell'utente. Usare il comando seguente per creare la directory:

mkdir "$HOME/.kube"

Dopo questo passaggio, Get-AksHciCredential non dovrebbe avere esito negativo.

Errore "Certificato scaduto - Impossibile connettersi al server: x509"

Il cluster di destinazione non è accessibile quando i certificati del piano di controllo non riescono a rinnovare. Quando si tenta di raggiungere il cluster, il kubectl comando visualizza l'errore seguente:

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

Questo problema è stato risolto nella versione di settembre 2022 e versioni successive.

Per riprodurre

  1. Installare AksHci.
  2. Installare il cluster di destinazione. 3. Disattivare il cluster (VM) per più di 4 giorni.
  3. Attivare di nuovo il cluster.

Sintomi e mitigazione

Il cluster di destinazione non è raggiungibile. Qualsiasi kubectl comando eseguito nel cluster di destinazione restituisce un messaggio di errore simile al seguente:

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

Per risolvere il problema:

  1. Eseguire il comando seguente per rinnovare manualmente il certificato generato:

    Update-AksHciClusterCertificates  -Name my-workload -cluster -fixKubeletCredentials
    
  2. Generare nuove credenziali:

    Get-AksHciCredential -name <clustername>
    

Dopo alcuni minuti, provare di nuovo il kubectl comando per verificare se il cluster è ora disponibile.

Nota

Esiste un bug noto in AksHci versione 1.0.14.x e precedenti. Se la macchina virtuale del piano di controllo ha un modello di nome diverso da -control-plane-, il Update-AksHciClusterCertificates comando potrebbe non funzionare. È necessario aggiornare il certificato accedendo alla macchina virtuale del piano di controllo:

  1. Trovare l'indirizzo IP della macchina virtuale del piano di controllo del cluster di destinazione.
  2. Eseguire il seguente comando: ssh -i (get-mocconfig).sshPrivateKey clouduser@<ip>
  3. Elencare i file di tatuaggio del certificato: sudo ls /etc/kubernetes/pki/cert-tattoo-*
  4. Generare certificati usando ogni file elencato dal comando precedente: sudo /usr/bin/cert-tattoo-provision CreateCertsWithAltNames <absolute-path-of-cert-tattoo-file>

Handshake di autenticazione non riuscito: x509: certificato firmato dall'autorità sconosciuta

Questo errore può verificarsi durante la distribuzione di un nuovo cluster del servizio Azure Kubernetes o l'aggiunta di un pool di nodi a un cluster esistente.

  1. Verificare che l'utente che ha eseguito il comando sia lo stesso utente che ha installato il servizio Azure Kubernetes in Azure Stack o Windows Server. Per altre informazioni sulla concessione dell'accesso a più utenti, vedere Configurare più amministratori.
  2. Se l'utente è lo stesso e l'errore persiste, seguire questa procedura per risolvere il problema:
  • Eliminare il certificato dell'appliance di gestione precedente rimuovendo $env:UserProfile.wssd\kvactl\cloudconfig.
  • Eseguire Repair-AksHciCerts.
  • Eseguire Get-AksHciCluster per verificare che sia corretto.

I log dei pod del cluster di destinazione non sono accessibili - Errore remoto: tls: errore interno

I log del cluster di destinazione non sono accessibili. Quando si tenta di accedere ai log dei pod nel cluster di destinazione, viene visualizzato l'errore TLS seguente:

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

Si tratta di un problema noto in AksHci versione 1.0.14.x e precedenti. È stato risolto come parte della versione 1.0.14.x (versione di settembre e versioni successive). I cluster di destinazione aggiornati a questa versione non devono riscontrare questo problema.

Per riprodurre

  1. Installare AksHci.
  2. Installare il cluster di destinazione.
  3. Non aggiornare il cluster per 60 giorni.
  4. Riavviare il cluster.

Sintomi e mitigazione

I log dei pod di destinazione non devono essere accessibili. Qualsiasi kubectl comando di log eseguito nel cluster di destinazione deve restituire un messaggio di errore simile al seguente:

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

Per risolvere il problema:

  1. Eseguire il comando seguente per rinnovare manualmente il certificato generato:

    Update-AksHciClusterCertificates  -Name my-workload -fixKubeletCredentials
    
  2. Generare nuove credenziali:

    Get-AksHciCredential -name <clustername>
    

Controlplane del cluster - Certificato scaduto - Impossibile connettersi al server: x509

Il cluster di destinazione non è accessibile quando i certificati del piano di controllo non riescono a rinnovare. Quando si tenta di raggiungere il cluster, il kubectl comando genera l'errore seguente:

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

Questo problema è stato risolto nella versione di settembre 2022 e versioni successive.

Per riprodurre

  1. Installare AksHci.
  2. Installare il cluster di destinazione.
  3. Disattivare cluster(vms) per più di 4 giorni.
  4. Attivare di nuovo il cluster.

Sintomi e mitigazione

Il cluster di destinazione non deve essere raggiungibile. Qualsiasi kubectl comando eseguito nel cluster di destinazione deve restituire un messaggio di errore simile al seguente:

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

Per risolvere il problema:

  1. Eseguire il comando seguente per rinnovare manualmente il certificato generato:

    Update-AksHciClusterCertificates  -Name my-workload -cluster -fixKubeletCredentials
    
  2. Generare nuove credenziali:

    Get-AksHciCredential -name <clustername>
    

Dopo alcuni minuti, provare di nuovo il kubectl comando per verificare se il cluster è ora disponibile.

Il pod del Servizio di gestione delle chiavi ha esito negativo e i log dei pod del Servizio di gestione delle chiavi contengono errori

Alcuni possibili sintomi di questo problema sono:

  • kubectl get secrets ha esito negativo con un errore interno.
  • kubectl logs <kmspod-name> -n kube-system contiene errori.
  • Il montaggio dei segreti non riesce nei volumi quando si tenta di creare pod.
  • L'avvio del server api non riesce.

Esaminare i log dei pod del Servizio di gestione delle chiavi per individuare gli errori eseguendo il comando seguente:

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

Se i log restituiscono un errore relativo a un token non valido nel pod del servizio di gestione delle chiavi del cluster di gestione, eseguire il comando seguente:

Update-AksHciCertificates

Se si verifica un errore relativo a un token non valido nel pod del servizio di gestione delle chiavi del cluster di destinazione, eseguire il comando seguente:

UpdateAksHciClusterCertificates -name <cluster-name> -fixcloudcredential

Errore 'System.Collections.Hashtable.generic_non_zero 1 [Errore: Certificato scaduto]'

Il certificato mocctl scade se non viene usato per più di 60 giorni. Azure Kubernetes Arc usa lo strumento da mocctl riga di comando per comunicare con MocStack per l'esecuzione di operazioni correlate a Moc. Il certificato usato dal mocclt comando per comunicare con cloudagent scade in 60 giorni. Il mocctl comando rinnova automaticamente il certificato quando viene usato vicino alla scadenza (dopo circa 42 giorni). Se il comando non viene usato di frequente, il certificato scade.

Per riprodurre il comportamento, installare AKS Arc e non viene eseguita alcuna operazione che coinvolge il mocctl comando per 60 giorni.

Per risolvere il problema, accedere di nuovo una volta scaduto il certificato. Eseguire il comando di PowerShell seguente per accedere:

Repair-MocLogin

Eliminare il certificato KVA se è scaduto dopo 60 giorni

Il certificato KVA scade dopo 60 giorni se non viene eseguito alcun aggiornamento.

Update-AksHci e qualsiasi comando che coinvolge kvactl genererà l'errore seguente.

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

Per risolvere questo errore, eliminare il file di certificato scaduto in \kvactl\cloudconfig e riprovare Update-AksHci nel nodo che visualizza il problema di scadenza del certificato. È possibile usare il comando seguente:

$env:UserProfile.wssd\kvactl\cloudconfig

È possibile trovare una discussione sul problema nel certificato KVA deve essere eliminato se il certificato KVA è scaduto dopo 60 giorni

Sono necessarie autorizzazioni speciali di Active Directory per i nodi locali di Azure aggiunti a un dominio

Gli utenti che distribuiscono e configurano servizio Azure Kubernetes in Locale di Azure devono avere l'autorizzazione Controllo completo per creare oggetti AD nel contenitore di Active Directory in cui vengono creati gli oggetti server e servizio.

Elevare le autorizzazioni dell'utente.

Uninstall-AksHciAdAuth ha esito negativo e viene visualizzato l'errore '[Errore dal server (NotFound): segreti "keytab-akshci-scale-reliability" non trovato]'

Se Uninstall-AksHciAdAuth visualizza questo errore, è consigliabile ignorarlo per il momento perché questo problema verrà risolto.

This issue will be fixed.

I log kubectl restituiscono "error: è necessario essere connessi al server (il server ha chiesto al client di fornire le credenziali)"

Si è verificato un problema relativo all'arco del servizio Azure Kubernetes in cui un cluster può interrompere la restituzione dei log. In questo caso, l'esecuzione kubectl logs <pod_name> restituisce "error: è necessario essere connessi al server (il server ha chiesto al client di fornire le credenziali)". Azure Kubernetes Arc ruota i certificati Kubernetes di base ogni 4 giorni, ma a volte il server API Kubernetes non ricarica immediatamente il certificato client per la comunicazione con kubelet quando i certificati vengono aggiornati.

Per attenuare il problema, sono disponibili diverse opzioni:

  • Rieseguire kubectl logs. Ad esempio, eseguire il comando di PowerShell seguente:

    while (1) {kubectl logs <POD_NAME>; sleep 1}
    
  • Riavviare il kube-apiserver contenitore in ognuno dei piani di controllo per un cluster. Il riavvio del server API non influisce sull'esecuzione dei carichi di lavoro. Per riavviare il server API, seguire questa procedura:

    1. Ottenere gli indirizzi IP per ogni piano di controllo nel cluster:

      kubectl get nodes -o wide
      
    2. Esegui questo 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)'
      
  • Facoltativamente, ma non consigliato per i carichi di lavoro di produzione, è possibile chiedere kube-apiserver di non verificare il certificato server del kubelet:

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