Freigeben über


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

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.

Screenshot des Azure-Portals: Anzeigen der AKS-Erweiterung.

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“.

Screenshot des Azure-Portals: Anzeigen der vom Dienstconnector erstellten Kubernetes-Ressourcen.

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.

Screenshot des Azure-Portals: Aktivieren des CSI-Treibers für Key Vault beim Erstellen einer Verbindung.

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.

Screenshot des Azure-Portals: Verwenden der Workloadidentität zum Erstellen einer Verbindung.

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.

  1. Installieren Sie die Azure CLI-Erweiterung k8s-extension.
az extension add --name k8s-extension
  1. 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.

  1. Stellen Sie eine Verbindung mit Ihrem AKS-Cluster her.

    az aks get-credentials \
        --resource-group MyClusterResourceGroup \
        --name MyCluster
    
  2. 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
    
  3. 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. Wenn sc-job nicht im Namespace sc-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.