Verwenden des Dienstconnectors in Azure Kubernetes Service (AKS)
Azure Kubernetes Service (AKS) ist einer der Computedienste, die vom Dienstconnector unterstützt werden. In diesem Artikel wird Folgendes erläutert:
- Vorgänge, die beim Erstellen einer Dienstverbindung auf dem Cluster ausgeführt werden
- Verwenden der vom Dienstconnector erstellten Kubernetes-Ressourcen
- Problembehandlung und Anzeigen von Protokollen des Dienstconnectors in einem AKS-Cluster
Voraussetzungen
- Dieser Leitfaden setzt voraus, dass Sie bereits mit den grundlegenden Konzepten des Dienstconnectors vertraut sind.
Vorgänge, die vom Dienstconnector auf dem Cluster ausgeführt werden
Abhängig von den verschiedenen Zieldiensten und Authentifizierungstypen, die beim Erstellen einer Dienstverbindung ausgewählt werden, führt der Dienstconnector unterschiedliche Vorgänge auf dem AKS-Cluster aus. Im Folgenden sind die Vorgänge aufgeführt, die vom Dienstconnector ausgeführt werden können.
Hinzufügen der Kubernetes-Erweiterung „Dienstconnector“
Wenn zum ersten Mal eine Dienstverbindung erstellt wird, wird dem Cluster eine Kubernetes-Erweiterung namens sc-extension
hinzugefügt. Danach hilft die Erweiterung bei jeder Dienstverbindungsanforderung, die der Dienstconnector empfängt, bei der Erstellung von Kubernetes-Ressourcen im Cluster des Benutzers. Sie können die Erweiterung in Ihrem AKS-Cluster anzeigen, indem Sie im Azure-Portal zum Menü Erweiterungen und Anwendungen navigieren.
In der Erweiterung werden auch die Metadaten von Clusterverbindungen gespeichert. Wenn Sie die Erweiterung deinstallieren, sind alle Verbindungen im Cluster nicht mehr verfügbar. Der Erweiterungsoperator wird im Clusternamespace sc-system
gehostet.
Erstellen von Kubernetes-Ressourcen
Der Dienstconnector erstellt einige Kubernetes-Ressourcen in dem Namespace, den der Benutzer beim Erstellen einer Dienstverbindung angegeben hat. Die Kubernetes-Ressourcen speichern die Verbindungsinformationen, die von den Workloaddefinitionen des Benutzers oder von Anwendungscode benötigt werden, um mit Zieldiensten zu kommunizieren. Abhängig von den verschiedenen Authentifizierungstypen werden unterschiedliche Kubernetes-Ressourcen erstellt. Für die Authentifizierungstypen Connection String
und Service Principal
wird ein Kubernetes-Geheimnis erstellt. Für den Authentifizierungstyp Workload Identity
wird zusätzlich zu einem Kubernetes-Geheimnis auch ein Kubernetes-Dienstkonto erstellt.
Die Kubernetes-Ressourcen, die vom Dienstconnector für die einzelnen Dienstverbindungen erstellt wurden, finden Sie im Azure-Portal auf der Seite Ihrer Kubernetes-Ressource im Menü „Dienstconnector“.
Durch das Löschen einer Dienstverbindung wird die zugeordnete Kubernetes-Ressource nicht gelöscht. Entfernen Sie die Ressource bei Bedarf manuell, z. B. mit dem Befehl „kubectl delete“.
Aktivieren des Add-Ons azureKeyvaultSecretsProvider
Wenn Azure Key Vault der Zieldienst ist und der Geheimnisspeicher-CSI-Treiber beim Erstellen einer Dienstverbindung aktiviert ist, aktiviert der Dienstconnector das Add-On azureKeyvaultSecretsProvider
für den Cluster.
Folgen Sie dem Tutorial Verwenden des Azure Key Vault Provider for Secrets Store CSI-Treibers in einem Azure Kubernetes Service (AKS)-Cluster, um eine Verbindung mit Azure Key Vault mithilfe des Geheimnisspeicher-CSI-Treiber einzurichten.
Aktivieren der Workloadidentität und des OpenID Connect (OIDC)-Ausstellers
Wenn beim Erstellen einer Dienstverbindung der Authentifizierungstyp Workload Identity
ausgewählt wird, aktiviert der Dienstconnector die Workloadidentität und den OIDC-Aussteller für den Cluster.
Wenn der Authentifizierungstyp Workload Identity
lautet, ist eine benutzerseitig zugewiesene verwaltete Identität erforderlich, um die Anmeldeinformationen für eine Verbundidentität zu erstellen. Lesen Sie Was sind Workloadidentitäten?, um mehr zu erfahren, oder folgen Sie dem Tutorial zum Einrichten einer Verbindung mit Azure Storage mithilfe einer Workloadidentität.
Verwenden der vom Dienstconnector erstellten Kubernetes-Ressourcen
Abhängig von den verschiedenen Zieldienst- und Authentifizierungstypen werden unterschiedliche Kubernetes-Ressourcen erstellt. In den folgenden Abschnitten wird gezeigt, wie Sie die vom Dienstconnector erstellten Kubernetes-Ressourcen in Ihrer Clusterworkloaddefinition und in Anwendungscode verwenden.
Kubernetes-Geheimnis
Wenn der Authentifizierungstyp Connection String
oder Service Principal
ist, wird ein Kubernetes-Geheimnis erstellt. Ihre Clusterworkloaddefinition kann direkt auf das Geheimnis verweisen. Der folgende Codeschnipsel zeigt ein Beispiel.
apiVersion: batch/v1
kind: Job
metadata:
namespace: default
name: sc-sample-job
spec:
template:
spec:
containers:
- name: raw-linux
image: alpine
command: ['printenv']
envFrom:
- secretRef:
name: <SecretCreatedByServiceConnector>
restartPolicy: OnFailure
Anschließend können Ihre Anwendungscodes die Verbindungszeichenfolge im Geheimnis aus der Umgebungsvariable verwenden. Sie können sich den Beispielcode ansehen, um mehr über die Namen der Umgebungsvariablen und deren Verwendung im Anwendungscode zur Authentifizierung bei verschiedenen Zieldiensten zu erfahren.
Kubernetes-Dienstkonto
Wenn der Authentifizierungstyp Workload Identity
ist, werden sowohl ein Kubernetes-Dienstkonto als auch ein Geheimnis erstellt. Ihre Clusterworkloaddefinition kann auf das Dienstkonto und den geheimen Schlüssel verweisen, um sich über die Workloadidentität zu authentifizieren. Der folgende Codeschnipsel zeigt ein Beispiel.
apiVersion: batch/v1
kind: Job
metadata:
namespace: default
name: sc-sample-job
labels:
azure.workload.identity/use: "true"
spec:
template:
spec:
serviceAccountName: <ServiceAccountCreatedByServiceConnector>
containers:
- name: raw-linux
image: alpine
command: ['printenv']
envFrom:
- secretRef:
name: <SecretCreatedByServiceConnector>
restartPolicy: OnFailure
Im Tutorial erfahren Sie, wie Sie mithilfe der Workloadidentität eine Verbindung mit Azure Storage herstellen.
Problembehandlung und Anzeigen von Protokollen
Wenn beim Erstellen einer Dienstverbindung ein Fehler auftritt, der auch durch Wiederholen des Vorgangs nicht behoben werden kann, können Sie mithilfe der folgenden Methoden weitere Informationen zur Problembehandlung sammeln.
Überprüfen der Kubernetes-Erweiterung „Dienstconnector“
Die Kubernetes-Erweiterung „Dienstconnector“ basiert auf Erweiterungen für Azure Arc-fähige Kubernetes-Cluster. Verwenden Sie die folgenden Befehle, um zu untersuchen, ob beim Installieren oder Aktualisieren der Erweiterung Fehler aufgetreten sind.
- Installieren Sie die Azure CLI-Erweiterung
k8s-extension
.
az extension add --name k8s-extension
- Rufen Sie den Status der Dienstconnector-Erweiterung ab. Überprüfen Sie die
statuses
-Eigenschaft in der Befehlsausgabe, um festzustellen, ob Fehler vorhanden sind.
az k8s-extension show \
--resource-group MyClusterResourceGroup \
--cluster-name MyCluster \
--cluster-type managedClusters \
--name sc-extension
Überprüfen der Kubernetes-Clusterprotokolle
Wenn während der Installation der Erweiterung ein Fehler auftritt und die Fehlermeldung in der statuses
-Eigenschaft nicht genügend Informationen enthält, können Sie wie in den folgenden Schritten beschrieben die Kubernetes-Protokolle überprüfen.
Stellen Sie eine Verbindung mit Ihrem AKS-Cluster her.
az aks get-credentials \ --resource-group MyClusterResourceGroup \ --name MyCluster
Die Dienstconnector-Erweiterung wird über ein Helm-Chart im Namespace
sc-system
installiert. Überprüfen Sie den Namespace und das Helm-Release mit den folgenden Befehlen.- Überprüfen Sie, ob der Namespace vorhanden ist.
kubectl get ns
- Überprüfen Sie den Helm-Releasestatus.
helm list -n sc-system
Beim Installieren oder Aktualisieren der Erweiterung erstellt ein Kubernetes-Auftrag namens
sc-job
die Kubernetes-Ressourcen für die Dienstverbindung. Der Erweiterungsfehler wird in der Regel durch einen Fehler bei der Auftragsausführung verursacht. Überprüfen Sie den Auftragsstatus, indem Sie die folgenden Befehle ausführen. Wennsc-job
nicht im Namespacesc-system
vorhanden ist, sollte der Auftrag erfolgreich ausgeführt worden sein. Dieser Auftrag ist so konzipiert, dass er nach erfolgreicher Ausführung automatisch gelöscht wird.- Überprüfen Sie, ob der Auftrag vorhanden ist.
kubectl get job -n sc-system
- Rufen Sie den Auftragsstatus ab.
kubectl describe job/sc-job -n sc-system
- Zeigen Sie die Auftragsprotokolle an.
kubectl logs job/sc-job -n sc-system
Häufige Fehler und Behebung
Conflict
Fehlermeldung:Operation returned an invalid status code: Conflict
.
Ursache: Dieser Fehler tritt in der Regel auf, wenn versucht wird, eine Dienstverbindung zu erstellen, während der AKS-Cluster (Azure Kubernetes Service) aktualisiert wird. Das Dienstverbindungsupdate verursacht einen Konflikt mit dem ausgeführten Update. Dies kann auch passieren, wenn Ihr Abonnement nicht für den Ressourcenanbieter Microsoft.KubernetesConfiguration
registriert ist.
Lösung:
Führen Sie den folgenden Befehl aus, um sicherzustellen, dass Ihr Abonnement für den Ressourcenanbieter
Microsoft.KubernetesConfiguration
registriert ist.az provider register -n Microsoft.KubernetesConfiguration
Vergewissern Sie sich, dass Ihr Cluster den Status „Erfolgreich“ hat, und wiederholen Sie die Erstellung.
Timeout
Fehlermeldung:
Long running operation failed with status 'Failed'. Unable to get a response from the Agent in time
.Timed out waiting for the resource to come to a ready/completed state
Ursache: Dieser Fehler tritt häufig auf, wenn der Kubernetes-Auftrag zum Erstellen oder Aktualisieren der Dienstconnector-Clustererweiterung aufgrund von Ressourcenbeschränkungen oder anderen Problemen nicht geplant werden kann.
Entschärfung: Lesen Sie die Informationen unter Überprüfen der Kubernetes-Clusterprotokolle, um detaillierte Ursachen zu ermitteln und zu beheben. Ein häufiges Problem besteht darin, dass aufgrund der vorzeitigen Entfernung keine Knoten verfügbar sind. In diesem Fall sollten Sie weitere Knoten hinzufügen oder die automatische Skalierung für Ihre Knoten aktivieren.
Nicht autorisierter Ressourcenzugriff
Fehlermeldung:You do not have permission to perform ... If access was recently granted, please refresh your credentials
.
Ursache: Der Dienstconnector erfordert Berechtigungen zum Betreiben der Azure-Ressourcen, mit denen Sie eine Verbindung herstellen möchten, um Verbindungsvorgänge in Ihrem Auftrag auszuführen. Dieser Fehler weist auf einen Mangel an erforderlichen Berechtigungen für einige Azure-Ressourcen hin.
Entschärfung: Überprüfen Sie die Berechtigungen für die in der Fehlermeldung angegebenen Azure-Ressourcen. Richten Sie die erforderlichen Berechtigungen ein, und wiederholen Sie die Erstellung.
Fehlende Abonnementregistrierung
Fehlermeldung:The subscription is not registered to use namespace 'Microsoft.KubernetesConfiguration'
Grund: Dienstconnector erfordert, dass das Abonnement für Microsoft.KubernetesConfiguration
registriert wird. Dies ist der Ressourcenanbieter für Azure Arc-fähige Kubernetes-Clustererweiterungen.
Entschärfung: Registrieren Sie den Ressourcenanbieter Microsoft.KubernetesConfiguration
, indem Sie den folgenden Befehl ausführen. Weitere Informationen zu Fehlern bei der Registrierung von Ressourcenanbietern finden Sie in diesem Tutorial.
az provider register -n Microsoft.KubernetesConfiguration
Andere Probleme
Wenn das Problem durch die oben genannten Entschärfungen nicht behoben wird, versuchen Sie, die Dienstconnector-Clustererweiterung zurückzusetzen, indem Sie sie entfernen und dann die Erstellung wiederholen. Es wird erwartet, dass mit dieser Methode die meisten Probleme im Zusammenhang mit der Dienstconnector-Clustererweiterung behoben werden.
Verwenden Sie die folgenden CLI-Befehle, um die Erweiterung zurückzusetzen:
az extension add --name k8s-extension
az k8s-extension delete \
--resource-group <MyClusterResourceGroup> \
--cluster-name <MyCluster> \
--cluster-type managedClusters \
--name sc-extension
Nächste Schritte
Erfahren Sie mehr über die Integration verschiedener Zieldienste sowie deren Konfigurationseinstellungen und Authentifizierungsmethoden.