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
- Installieren Sie AksHci.
- Erstellen Sie einen Zielcluster.
- Melden Sie sich als anderer Administratorbenutzer (Multi-Admin-Feature) beim Computer an.
- 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
- Installieren Sie AksHci.
- Installieren Sie den Zielcluster. 3. Deaktivieren Sie den Cluster (VMs) für mehr als 4 Tage.
- 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:
Führen Sie den folgenden Befehl aus, um das generierte Zertifikat manuell zu erneuern:
Update-AksHciClusterCertificates -Name my-workload -cluster -fixKubeletCredentials
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:
- Suchen Sie die IP-Adresse der VM der Zielclustersteuerungsebene.
- Führen Sie den folgenden Befehl aus:
ssh -i (get-mocconfig).sshPrivateKey clouduser@<ip>
- Listet die Cert Tattoo Dateien auf:
sudo ls /etc/kubernetes/pki/cert-tattoo-*
- 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.
- Ü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.
- 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\cloudconfig
entfernen. - 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
- Installieren Sie AksHci.
- Installieren Sie den Zielcluster.
- Aktualisieren Sie den Cluster nicht für 60 Tage.
- 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:
Führen Sie den folgenden Befehl aus, um das generierte Zertifikat manuell zu erneuern:
Update-AksHciClusterCertificates -Name my-workload -fixKubeletCredentials
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
- Installieren Sie AksHci.
- Installieren Sie den Zielcluster.
- Deaktivieren Sie Cluster(vms) für mehr als 4 Tage.
- 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:
Führen Sie den folgenden Befehl aus, um das generierte Zertifikat manuell zu erneuern:
Update-AksHciClusterCertificates -Name my-workload -cluster -fixKubeletCredentials
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:Rufen Sie die IP-Adressen für jede Steuerungsebene in Ihrem Cluster ab:
kubectl get nodes -o wide
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