Beheben von bekannten Sicherheits- und Identitätsproblemen in AKS Arc

Verwenden Sie dieses Thema, um Sie beim Beheben von Sicherheits- und Identitätsproblemen in AKS Arc zu unterstützen.

Get-AksHciCredential schlägt mit dem Fehler "Der angegebene Pfad kann nicht gefunden werden" fehl.

Das Get-AksHciCredential PowerShell-Cmdlet schlägt fehl, wenn sie von einem anderen Administratorbenutzer ausgeführt wird als das, das für die Installation von AksHci verwendet wird. Der Befehl erstellt ein KUBE-Verzeichnis und platziert die Konfigurationsdatei darin. Der Befehl schlägt jedoch mit dem folgenden Fehler fehl:

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

Schritte zum Reproduzieren

  1. Installieren Sie AksHci.
  2. Erstellen Sie einen Zielcluster.
  3. Melden Sie sich als anderer Administratorbenutzer (Multi-Admin-Feature) beim Computer an.
  4. Führen Sie Get-AksHciCredential -Name $clusterName aus.

Erwartetes Verhalten

Get-AksHciCredential sollte in der Lage sein, ein KUBE-Verzeichnis im Startverzeichnis des Benutzers zu erstellen und die Konfigurationsdatei in diesem Verzeichnis zu platzieren.

Um das Problem zu umgehen, erstellen Sie ein KUBE-Verzeichnis im Heimverzeichnis des Benutzers. Verwenden Sie den folgenden Befehl, um das Verzeichnis zu erstellen:

mkdir "$HOME/.kube"

Nach diesem Schritt Get-AksHciCredential sollte kein Fehler auftreten.

Fehler "Zertifikat abgelaufen - Verbindung mit dem Server kann nicht hergestellt werden: x509"

Auf den Zielcluster kann nicht zugegriffen werden, wenn Steuerelementebenenzertifikate nicht erneuert werden. Beim Versuch, den Cluster zu erreichen, zeigt der kubectl Befehl den folgenden Fehler an:

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

Hinweis

Dieses Problem wurde in der Version vom September 2022 und höher behoben.

Schritte zum Reproduzieren

  1. Installieren Sie AksHci.
  2. Installieren Sie den Zielcluster. 3. Deaktivieren Sie den Cluster (VMs) für mehr als 4 Tage.
  3. Aktivieren Sie den Cluster erneut.

Symptome und Entschärfung

Der Zielcluster ist nicht erreichbar. Jeder kubectl Befehl, der für den Zielcluster ausgeführt wird, gibt eine Fehlermeldung zurück, die dem folgenden ähnelt:

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

So beheben Sie das Problem:

  1. Führen Sie den folgenden Befehl aus, um das generierte Zertifikat manuell zu erneuern:

    Update-AksHciClusterCertificates  -Name my-workload -cluster -fixKubeletCredentials
    
  2. Neue Anmeldeinformationen generieren:

    Get-AksHciCredential -name <clustername>
    

Versuchen Sie nach ein paar Minuten den kubectl Befehl erneut, um festzustellen, ob der Cluster jetzt verfügbar ist.

Hinweis

Es gibt einen bekannten Fehler in AksHci, Version 1.0.14.x und früher. Wenn die VM für die Steuerungsebene ein anderes Namensmuster aufweist als -control-plane-, funktioniert der Update-AksHciClusterCertificates Befehl möglicherweise nicht. Sie müssen das Zertifikat aktualisieren, indem Sie sich bei der VM der Steuerungsebene anmelden:

  1. Suchen Sie die IP-Adresse der VM der Zielclustersteuerungsebene.
  2. Führen Sie den folgenden Befehl aus: ssh -i (get-mocconfig).sshPrivateKey clouduser@<ip>
  3. Listet die Cert Tattoo Dateien auf: sudo ls /etc/kubernetes/pki/cert-tattoo-*
  4. Generieren Sie Zertifikate mithilfe jeder datei, die im vorherigen Befehl aufgeführt ist: sudo /usr/bin/cert-tattoo-provision CreateCertsWithAltNames <absolute-path-of-cert-tattoo-file>

Fehler bei der Authentifizierungs-Handshake: x509: Zertifikat, das von unbekannter Autorität signiert wurde

Möglicherweise wird dieser Fehler beim Bereitstellen eines neuen AKS-Clusters oder beim Hinzufügen eines Knotenpools zu einem vorhandenen Cluster angezeigt.

  1. Überprüfen Sie, ob der Benutzer, der den Befehl ausgeführt hat, derselbe Benutzer ist, der AKS auf Azure Stack oder Windows Server installiert hat. Weitere Informationen zum Gewähren des Zugriffs auf mehrere Benutzer finden Sie unter Einrichten mehrerer Administratoren.
  2. Wenn der Benutzer identisch ist und der Fehler weiterhin besteht, führen Sie die folgenden Schritte aus, um das Problem zu beheben:
  • Löschen Sie altes Verwaltungsanwendungszertifikat, indem Sie es $env:UserProfile.wssd\kvactl\cloudconfigentfernen.
  • Führen Sie Repair-AksHciCerts aus.
  • Führen Sie die Ausführung Get-AksHciCluster aus, um zu überprüfen, ob sie behoben ist.

Auf Zielcluster-Pod-Protokolle kann nicht zugegriffen werden – Remotefehler: tls: interner Fehler

Auf die Zielclusterprotokolle kann nicht zugegriffen werden. Wenn Sie versuchen, auf Pod-Protokolle im Zielcluster zuzugreifen, wird der folgende TLS-Fehler angezeigt:

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

Hinweis

Dies ist ein bekanntes Problem in AksHci, Version 1.0.14.x und früher. Es wurde im Rahmen der Version 1.0.14.x (Version september und höher) behoben. Zielcluster, die auf diese Version aktualisiert wurden, sollten dieses Problem nicht auftreten.

Schritte zum Reproduzieren

  1. Installieren Sie AksHci.
  2. Installieren Sie den Zielcluster.
  3. Aktualisieren Sie den Cluster nicht für 60 Tage.
  4. Starten Sie den Cluster neu.

Symptome und Entschärfung

Auf die Ziel-Pod-Protokolle sollte nicht zugegriffen werden. Jeder kubectl Protokollbefehl, der für den Zielcluster ausgeführt wird, sollte mit einer Fehlermeldung wie der folgenden zurückgegeben werden:

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

So beheben Sie das Problem:

  1. Führen Sie den folgenden Befehl aus, um das generierte Zertifikat manuell zu erneuern:

    Update-AksHciClusterCertificates  -Name my-workload -fixKubeletCredentials
    
  2. Neue Anmeldeinformationen generieren:

    Get-AksHciCredential -name <clustername>
    

Clustersteuerungsplan - Zertifikat abgelaufen - Verbindung mit dem Server nicht möglich: x509

Auf den Zielcluster kann nicht zugegriffen werden, wenn Steuerelementebenenzertifikate nicht erneuert werden. Wenn Sie versuchen, den Cluster zu erreichen, generiert der kubectl Befehl den folgenden Fehler:

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

Hinweis

Dieses Problem wurde in der Version vom September 2022 und höher behoben.

Schritte zum Reproduzieren

  1. Installieren Sie AksHci.
  2. Installieren Sie den Zielcluster.
  3. Deaktivieren Sie Cluster(vms) für mehr als 4 Tage.
  4. Aktivieren Sie den Cluster erneut.

Symptome und Entschärfung

Der Zielcluster sollte nicht erreichbar sein. Jeder kubectl Befehl, der für den Zielcluster ausgeführt wird, sollte mit einer Fehlermeldung wie der folgenden zurückgegeben werden:

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

So beheben Sie das Problem:

  1. Führen Sie den folgenden Befehl aus, um das generierte Zertifikat manuell zu erneuern:

    Update-AksHciClusterCertificates  -Name my-workload -cluster -fixKubeletCredentials
    
  2. Neue Anmeldeinformationen generieren:

    Get-AksHciCredential -name <clustername>
    

Versuchen Sie nach ein paar Minuten den kubectl Befehl erneut, um festzustellen, ob der Cluster jetzt verfügbar ist.

KMS-Pod schlägt fehl, und die KMS-Podprotokolle enthalten Fehler.

Einige mögliche Symptome dieses Problems sind:

  • kubectl get secrets schlägt mit einem internen Fehler fehl.
  • kubectl logs <kmspod-name> -n kube-system enthält Fehler.
  • Fehler beim Einbinden geheimer Schlüssel in Volumes, wenn Sie versuchen, Pods zu erstellen.
  • Der API-Server kann nicht gestartet werden.

Suchen Sie in den KMS-Podprotokollen nach Fehlern, indem Sie den folgenden Befehl ausführen:

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

Wenn die Protokolle einen Fehler bezüglich eines ungültigen Tokens im KMS-Pod des Verwaltungsclusters zurückgeben, führen Sie den folgenden Befehl aus:

Update-AksHciCertificates

Wenn ein Fehler bezüglich eines ungültigen Tokens im KMS-Pod des Zielclusters vorliegt, führen Sie den folgenden Befehl aus:

UpdateAksHciClusterCertificates -name <cluster-name> -fixcloudcredential

Fehler "System.Collections.Hashtable.generic_non_zero 1 [Fehler: Zertifikat ist abgelaufen: Abgelaufen]"

Das Mocctl-Zertifikat läuft ab, wenn es nicht länger als 60 Tage verwendet wird. AKS Arc verwendet das mocctl Befehlszeilentool, um mit MocStack zu kommunizieren, um Moc-bezogene Vorgänge auszuführen. Das Zertifikat, das der Befehl für die mocclt Kommunikation mit Cloudagent verwendet, läuft in 60 Tagen ab. Der mocctl Befehl erneuert das Zertifikat automatisch, wenn es in der Nähe des Ablaufs verwendet wird (nach ~42 Tagen). Wenn der Befehl nicht häufig verwendet wird, läuft das Zertifikat ab.

Um das Verhalten zu reproduzieren, installieren Sie AKS Arc, und es wird kein Vorgang ausgeführt, der den mocctl Befehl umfasst, 60 Tage.

Um das Problem zu beheben, melden Sie sich erneut an, sobald das Zertifikat abläuft. Führen Sie den folgenden PowerShell-Befehl aus, um sich anzumelden:

Repair-MocLogin

KVA-Zertifikat löschen, wenn es nach 60 Tagen abgelaufen ist

Das KVA-Zertifikat läuft nach 60 Tagen ab, wenn kein Upgrade ausgeführt wird.

Update-AksHci und jeder Befehl im Zusammenhang mit kvactl löst den folgenden Fehler aus.

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

Um diesen Fehler zu beheben, löschen Sie die abgelaufene Zertifikatdatei unter \kvactl\cloudconfig, und führen Sie Update-AksHci erneut für den Knoten aus, für den das Zertifikatablaufproblem auftritt. Sie können den folgenden Befehl verwenden:

$env:UserProfile.wssd\kvactl\cloudconfig

Eine Erläuterung zum Problem finden Sie unter KVA-Zertifikat muss gelöscht werden, wenn das KVA-Zertifikat nach 60 Tagen abgelaufen ist.

Für domänenverbundene Azure Local-Knoten sind spezielle Active Directory-Berechtigungen erforderlich.

Benutzer, die Azure Kubernetes Service auf Azure Local bereitstellen und konfigurieren, müssen über die Berechtigung "Vollzugriff " verfügen, um AD-Objekte im Active Directory-Container zu erstellen, in dem server- und Dienstobjekte erstellt werden.

Erhöhen Sie die Berechtigungen des Benutzers.

Uninstall-AksHciAdAuth schlägt mit dem Fehler '[Fehler vom Server (NotFound) fehl: Geheime Schlüssel "keytab-akshci-scale-reliability" nicht gefunden]"

Wenn Uninstall-AksHciAdAuth diesen Fehler anzeigt, können Sie ihn vorerst ignorieren, da dieses Problem bald behoben wird.

This issue will be fixed.

Kubectl-Protokolle geben "Fehler: Sie müssen auf dem Server angemeldet sein (der Server hat den Client aufgefordert, Anmeldeinformationen anzugeben)" zurück.

Es gibt ein Problem mit AKS Arc, bei dem ein Cluster das Zurückgeben von Protokollen beenden kann. In diesem Fall gibt die Ausführung kubectl logs <pod_name> "fehler: Sie müssen auf dem Server angemeldet sein (der Server hat den Client aufgefordert, Anmeldeinformationen anzugeben)". AKS Arc dreht die Kubernetes-Kernzertifikate alle 4 Tage, aber manchmal lädt der Kubernetes-API-Server sein Clientzertifikat nicht sofort neu für die Kommunikation mit Kubelet, wenn die Zertifikate aktualisiert werden.

Um das Problem zu beheben, gibt es mehrere Optionen:

  • Erneutes Ausführen kubectl logs. Führen Sie beispielsweise den folgenden PowerShell-Befehl aus:

    while (1) {kubectl logs <POD_NAME>; sleep 1}
    
  • Starten Sie den kube-apiserver Container auf jeder Steuerelementebene für einen Cluster neu. Das Neustarten des API-Servers wirkt sich nicht auf die Ausführung von Workloads aus. Führen Sie die folgenden Schritte aus, um den API-Server neu zu starten:

    1. Rufen Sie die IP-Adressen für jede Steuerungsebene in Ihrem Cluster ab:

      kubectl get nodes -o wide
      
    2. Führen Sie den folgenden Befehl aus:

      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)'
      
  • Optional können Sie kube-apiserver , aber nicht für Produktionsworkloads empfohlen, das Serverzertifikat des Kubelet nicht zu überprüfen:

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