Freigeben über


Azure Key Vault-Anbieter für den Secrets Store CSI-Treiber für Konfigurations- und Problembehandlungsoptionen in AKS (Azure Kubernetes Service)

Führen Sie die Schritte in Verwenden des Azure Key Vault Provider for Secrets Store CSI-Treibers in einem AKS-Cluster und Bereitstellen einer Identität für den Zugriff auf den Azure Key Vault-Anbieter für den Secrets Store CSI-Treiber in AKS. Nachdem Sie diese Schritte ausgeführt haben, können Sie zusätzliche Konfigurationen anwenden oder eine Problembehandlung ausführen.

Konfigurationsoptionen

Aktivieren und Deaktivieren der automatischen Rotation

Hinweis

Wenn der Azure Key Vault Provider für den Secrets Store CSI-Treiber aktiviert ist, aktualisiert er die Podeinbindung und das Kubernetes-Geheimnis, das im secretObjects-Feld von SecretProviderClass definiert ist. Dies erfolgt durch regelmäßiges Abfragen von Änderungen basierend auf dem definierten Rotationsabrufintervall. Das standardmäßige Rotationsabrufintervall beträgt zwei Minuten.

Hinweis

Wenn ein Geheimnis in einem externen Geheimnisspeicher nach der ursprünglichen Podbereitstellung aktualisiert wird, werden das Kubernetes-Geheimnis und die Podeinbindung regelmäßig aktualisiert, je nachdem, wie die Anwendung die Geheimnisdaten nutzt.

Einbinden des Kubernetes-Geheimnisses als Volume: Verwenden der Funktionen für Autorotation und Synchronisierung von K8s-Geheimnissen des Secrets Store CSI-Treibers. Die Anwendung muss auf Änderungen aus dem eingebundenen Kubernetes-Geheimnisvolume achten. Wenn der CSI-Treiber das Kubernetes-Geheimnis aktualisiert, werden die entsprechenden Volumeinhalte automatisch ebenfalls aktualisiert.

Die Anwendung liest die Daten aus dem Dateisystem des Containers: Verwenden Sie die Rotationsfunktion des Secrets Store CSI-Treibers. Die Anwendung muss nach der Dateiänderung auf dem vom CSI-Treiber eingebundenen Volume Ausschau halten.

Verwenden des Kubernetes-Geheimnisses als Umgebungsvariable: Starten Sie den Pod neu, um das neueste Geheimnis als Umgebungsvariable abzurufen. Verwenden Sie ein Tool, wie etwa Reloader, um Änderungen des synchronisierten Kubernetes-Geheimnisses zu beobachten und rollierende Upgrades auf Pods auszuführen.

Aktivieren der automatischen Rotation in einem neuen AKS-Cluster

  • Aktivieren Sie die automatische Rotation von Geheimnissen in einem neuen Cluster mithilfe des Befehls az aks create, und aktivieren Sie das Add-On enable-secret-rotation.

    az aks create \
        --name myAKSCluster2 \
        --resource-group myResourceGroup \
        --enable-addons azure-keyvault-secrets-provider \
        --enable-secret-rotation \
        --generate-ssh-keys
    

Aktivieren der automatischen Rotation in einem vorhandenen AKS-Cluster

  • Aktualisieren Sie einen vorhandenen Cluster, um die automatische Rotation von Geheimnissen mit dem Befehl az aks addon update und dem Parameter enable-secret-rotation zu aktivieren.

    az aks addon update --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider --enable-secret-rotation
    

Angeben eines benutzerdefinierten Rotationsintervalls

  • Geben Sie mithilfe des Befehls az aks addon update mit dem Parameter rotation-poll-interval ein benutzerdefiniertes Rotationsintervall an.

    az aks addon update --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider --enable-secret-rotation --rotation-poll-interval 5m
    

Deaktivieren der automatischen Rotation

Um die automatische Rotation zu deaktivieren, müssen Sie zunächst das Add-On deaktivieren. Anschließend können Sie das Add-On ohne den Parameter enable-secret-rotation erneut aktivieren.

  1. Deaktivieren Sie das Geheimnisanbieter-Add-On mithilfe des Befehls az aks addon disable.

    az aks addon disable --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider
    
  2. Aktivieren Sie das Geheimnisanbieter-Add-On ohne den Parameter enable-secret-rotation mithilfe des Befehls az aks addon enable erneut.

    az aks addon enable --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider
    

Wenn Sie bereits eine SecretProviderClass verwenden, können Sie das Add-On aktualisieren, ohne es zuerst zu deaktivieren, indem Sie az aks addon enable verwenden, ohne den Parameter enable-secret-rotation anzugeben.

Synchronisieren von bereitgestelltem Inhalt mit einem Kubernetes-Geheimnis

Hinweis

Die YAML-Beispiele in diesem Abschnitt sind unvollständig. Sie müssen sie so ändern, dass die ausgewählte Methode zum Zugreifen auf Ihre Schlüsseltresoridentität unterstützt wird. Weitere Informationen finden Sie unter Bereitstellen einer Identität für den Zugriff auf den Azure Key Vault-Anbieter für den Geheimnisspeicher-CSI-Treiber.

Sie können ein Kubernetes-Geheimnis erstellen, um den bereitgestellten Inhalt zu spiegeln. Ihre Geheimnisse werden synchronisiert, nachdem Sie einen Pod zum Einbinden gestartet haben. Wenn Sie die Pods löschen, die die Geheimnisse nutzen, wird auch Ihr Kubernetes-Geheimnis gelöscht.

  • Synchronisieren Sie eingebundene Inhalte mit einem Kubernetes-Geheimnis über das Feld secretObjects beim Erstellen einer SecretProviderClass, sodass der gewünschte Status des Kubernetes-Geheimnisses definiert wird, wie im folgenden Beispiel gezeigt.

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: azure-sync
    spec:
      provider: azure
      secretObjects:                              # [OPTIONAL] SecretObjects defines the desired state of synced Kubernetes secret objects
      - data:
        - key: username                           # data field to populate
          objectName: foo1                        # name of the mounted content to sync; this could be the object name or the object alias
        secretName: foosecret                     # name of the Kubernetes secret object
        type: Opaque                              # type of Kubernetes secret object (for example, Opaque, kubernetes.io/tls)
    

    Hinweis

    Stellen Sie sicher, dass der objectName im Feld secretObjects mit dem Dateinamen des eingebundenen Inhalts übereinstimmt. Wenn Sie stattdessen objectAlias verwenden, sollte Übereinstimmung mit dem Objektalias bestehen.

Festlegen einer Umgebungsvariable zum Verweisen auf Kubernetes-Geheimnisse

Hinweis

Das YAML-Beispiel demonstriert den Zugriff auf ein Geheimnis über Umgebungsvariablen und „volume/volumeMount“. Dies dient nur zur Veranschaulichung. Eine typische Anwendung verwendet die eine oder die andere Methode. Beachten Sie jedoch, dass sie zuerst von mindestens einem Pod bereitgestellt werden muss, damit ein geheimer Schlüssel über env-Variablen verfügbar ist.

  • Verweisen Sie auf das neu erstellte Kubernetes-Geheimnis, indem Sie eine Umgebungsvariable in Ihrem Pod festlegen, wie im folgenden Beispielcode gezeigt.

    kind: Pod
    apiVersion: v1
    metadata:
      name: busybox-secrets-store-inline
    spec:
      containers:
        - name: busybox
          image: registry.k8s.io/e2e-test-images/busybox:1.29-1
          command:
            - "/bin/sleep"
            - "10000"
          volumeMounts:
          - name: secrets-store01-inline
            mountPath: "/mnt/secrets-store"
            readOnly: true
          env:
          - name: SECRET_USERNAME
            valueFrom:
              secretKeyRef:
                name: foosecret
                key: username
      volumes:
        - name: secrets-store01-inline
          csi:
            driver: secrets-store.csi.k8s.io
            readOnly: true
            volumeAttributes:
              secretProviderClass: "azure-sync"
    

Zugreifen auf Metriken

Der Azure Key Vault-Anbieter

Metriken werden über Prometheus von Port 8898 aus bereitgestellt, doch ist dieser Port nicht standardmäßig außerhalb des Pods zugänglich.

  • Greifen Sie über Localhost auf die Metriken zu mittels kubectl port-forward.

    kubectl port-forward -n kube-system ds/aks-secrets-store-provider-azure 8898:8898 & curl localhost:8898/metrics
    
Vom Azure Key Vault-Anbieter für den Secrets Store CSI-Treiber bereitgestellte Metriken
Metrik BESCHREIBUNG `Tags`
keyvault_request Die Verteilung der für das Abrufen vom Schlüsseltresor benötigten Zeit os_type=<runtime os>, provider=azure, object_name=<keyvault object name>, object_type=<keyvault object type>, error=<error if failed>
grpc_request Die Verteilung der für die gRPC-Anforderungen benötigten Zeit os_type=<runtime os>, provider=azure, grpc_method=<rpc full method>, grpc_code=<grpc status code>, grpc_message=<grpc status message>

Der Secrets Store CSI-Treiber

Metriken werden über Prometheus von Port 8095 aus bereitgestellt, doch wird dieser Port nicht standardmäßig außerhalb des Pods verfügbar gemacht.

  • Greifen Sie über Localhost auf die Metriken zu mittels kubectl port-forward.

    kubectl port-forward -n kube-system ds/aks-secrets-store-csi-driver 8095:8095 &
    curl localhost:8095/metrics
    
Vom Secrets Store-CSI-Treiber bereitgestellte Metriken
Metrik BESCHREIBUNG `Tags`
total_node_publish Die Gesamtanzahl der erfolgreichen Volumeeinbindungsanforderungen os_type=<runtime os>, provider=<provider name>
total_node_unpublish Die Gesamtanzahl der erfolgreichen Anforderungen zum Aufheben der Volumeeinbindung os_type=<runtime os>
total_node_publish_error Die Gesamtanzahl von Fehlern bei Volumeeinbindungsanforderungen os_type=<runtime os>, provider=<provider name>, error_type=<error code>
total_node_unpublish Die Gesamtanzahl von Fehlern bei Anforderungen zum Aufheben der Volumeeinbindung os_type=<runtime os>
total_sync_k8s_secret Die Gesamtanzahl synchronisierter Kubernetes-Geheimnisse os_type=<runtime os, provider=<provider name>
sync_k8s_secret_duration_sec Die Verteilung der zur Synchronisierung des Kubernetes-Geheimnisses benötigten Zeit os_type=<runtime os>
total_rotation_reconcile Die Gesamtanzahl der Rotationsabgleiche os_type=<runtime os>, rotated=<true or false>
total_rotation_reconcile_error Die Gesamtzahl der Rotationsabgleiche mit Fehlern os_type=<runtime os>, rotated=<true or false>, error_type=<error code>
total_rotation_reconcile_error Die Verteilung der zum Rotieren von Inhalten im Geheimnisspeicher für Pods benötigten Zeit os_type=<runtime os>

Migrieren von Open-Source zu AKS-verwaltetem Secrets Store CSI-Treiber

  1. Deinstallieren Sie den Open-Source-Secret Store CSI-Treiber mit dem folgenden helm delete-Befehl.

    helm delete <release name>
    

    Hinweis

    Wenn Sie den Treiber und den Anbieter mithilfe von Bereitstellungs-YAMLs installiert haben, können Sie die Komponenten mit dem folgenden kubectl delete-Befehl löschen.

    # Delete AKV provider pods from Linux nodes
    kubectl delete -f https://raw.githubusercontent.com/Azure/secrets-store-csi-driver-provider-azure/master/deployment/provider-azure-installer.yaml
    
    # Delete AKV provider pods from Windows nodes
    kubectl delete -f https://raw.githubusercontent.com/Azure/secrets-store-csi-driver-provider-azure/master/deployment/provider-azure-installer-windows.yaml
    
  2. Aktualisieren Sie Ihren vorhandenen AKS-Cluster mit dem Feature mithilfe des az aks enable-addons-Befehls.

    az aks enable-addons --addons azure-keyvault-secrets-provider --name myAKSCluster --resource-group myResourceGroup
    

Problembehandlung

Schritte zur Problembehandlung finden Sie unter Problembehandlung für Azure Key Vault-Anbieter für Secrets Store CSI-Treiber.

Nächste Schritte

Weitere Informationen zum Azure Key Vault-Anbieter für den Secrets Store CSI-Treiber finden Sie in den folgenden Ressourcen: