Provider di Azure Key Vault per il driver CSI dell'archivio segreti per le opzioni di configurazione e risoluzione dei problemi del servizio Azure Kubernetes (AKS)

Segui la procedura descritta in Usare il provider di Azure Key Vault per il driver CSI dell'archivio segreti in un cluster del servizio Azure Kubernetes e Fornire un'identità per accedere al provider di Azure Key Vault per il driver CSI dell'archivio segreti nel servizio Azure Kubernetes. Dopo aver completato questi passaggi, puoi applicare configurazioni aggiuntive o eseguire la risoluzione dei problemi.

Opzioni di configurazione

Abilitare e disabilitare la rotazione automatica

Nota

Quando il provider di Azure Key Vault per il driver CSI dell'archivio segreti è abilitato, aggiorna il montaggio del pod e il segreto Kubernetes definito nel secretObjects campo di SecretProviderClass. Lo fa eseguendo periodicamente il polling delle modifiche, in base all'intervallo di polling di rotazione da te definito. L'intervallo di polling di rotazione predefinito è due minuti.

Nota

Quando un segreto viene aggiornato in un archivio segreti esterno dopo la distribuzione iniziale del pod, il segreto Kubernetes e il montaggio del pod vengono aggiornati periodicamente a seconda del modo in cui l'applicazione utilizza i dati segreti.

Montare il segreto Kubernetes come volume: usare le funzionalità di rotazione automatica e sincronizzazione dei segreti K8s del driver CSI dell'archivio segreti. L'applicazione deve controllare le modifiche apportate dal volume del segreto Kubernetes montato. Quando il driver CSI aggiorna il segreto Kubernetes, anche il contenuto del volume corrispondente viene aggiornato automaticamente.

L'applicazione legge i dati dal file system del contenitore: usare la funzionalità di rotazione del driver CSI dell'archivio segreti. L'applicazione deve controllare la modifica del file apportata dal volume montato dal driver CSI.

Usare il segreto Kubernetes per una variabile di ambiente: riavviare il pod per ottenere il segreto più recente come variabile di ambiente. Usa uno strumento come Reloader per controllare le modifiche nel segreto Kubernetes sincronizzato ed eseguire aggiornamenti in sequenza nei pod.

Abilitare la rotazione automatica in un nuovo cluster del servizio Azure Kubernetes

  • Abilita la rotazione automatica dei segreti in un nuovo cluster usando il comando az aks create e abilita il componente aggiuntivo enable-secret-rotation.

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

Abilitare la rotazione automatica in un cluster del servizio Azure Kubernetes esistente

  • Aggiorna un cluster esistente per abilitare la rotazione automatica dei segreti usando il comando az aks addon update e il parametro enable-secret-rotation.

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

Specificare un intervallo di rotazione personalizzato

  • Specifica un intervallo di rotazione personalizzato usando il comando az aks addon update con il parametro rotation-poll-interval.

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

Abilitare la rotazione automatica

Per disabilitare la rotazione automatica, devi prima disabilitare il componente aggiuntivo. Poi puoi riabilitare il componente aggiuntivo senza il parametro enable-secret-rotation.

  1. Disabilita il componente aggiuntivo del provider di segreti usando il comando az aks addon disable.

    az aks addon disable --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider
    
  2. Riabilita il componente aggiuntivo del provider di segreti senza il parametro enable-secret-rotation usando il comando az aks addon enable.

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

Se si usa già un SecretProviderClass, è possibile aggiornare il componente aggiuntivo senza disabilitarlo prima usando az aks addon enable senza specificare il parametro enable-secret-rotation.

Sincronizza il contenuto montato con un segreto Kubernetes

Nota

Gli esempi YAML in questa sezione sono incompleti. È necessario modificarli per supportare il metodo scelto di accesso all'identità dell'insieme di credenziali delle chiavi. Per i dettagli, vedi Fornire un'identità per accedere al provider di Azure Key Vault per il driver CSI dell'archivio segreti.

Potresti voler creare un segreto Kubernetes per eseguire il mirroring del contenuto dei segreti montati. I tuoi segreti vengono sincronizzati dopo l'avvio di un pod per montarli. Quando elimini i pod che usano i segreti, viene eliminato anche il tuo segreto Kubernetes.

  • Sincronizza il contenuto montato con un segreto Kubernetes usando il campo secretObjects quando crei un SecretProviderClass per definire lo stato desiderato del segreto Kubernetes, come illustrato nel seguente esempio YAML.

    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)
    

    Nota

    Assicurati che objectName nel campo secretObjects corrisponda al nome file del contenuto montato. Se invece usi objectAlias, deve corrispondere all'alias dell'oggetto.

Impostare una variabile di ambiente per fare riferimento ai segreti Kubernetes

Nota

Nell'esempio YAML viene illustrato l'accesso a un segreto tramite variabili env e volume/volumeMount. Questo è a scopo illustrativo. Un'applicazione tipica usa un metodo o l'altro. Tuttavia, tieni presente che, affinché un segreto sia disponibile tramite variabili di env, deve prima essere montato da almeno un pod.

  • Fai riferimento al segreto Kubernetes appena creato impostando una variabile di ambiente nel tuo pod, come illustrato nell'esempio seguente YAML.

    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"
    

Accedere alle metriche

Il provider di Azure Key Vault

Le metriche vengono gestite tramite Prometheus dalla porta 8898, ma questa porta non viene esposta all'esterno del pod per impostazione predefinita.

  • Accedere alle metriche tramite localhost usando kubectl port-forward.

    kubectl port-forward -n kube-system ds/aks-secrets-store-provider-azure 8898:8898 & curl localhost:8898/metrics
    
Metriche fornite dal provider di Azure Key Vault per il driver CSI dell'archivio segreti
Metrico Descrizione Tag
keyvault_request Distribuzione del tempo necessario per estrarre dall'insieme di credenziali delle chiavi. os_type=<runtime os>, provider=azure, object_name=<keyvault object name>, object_type=<keyvault object type>, error=<error if failed>
grpc_request Distribuzione del tempo necessario per le richieste gRPC. os_type=<runtime os>, provider=azure, grpc_method=<rpc full method>, grpc_code=<grpc status code>, grpc_message=<grpc status message>

Driver CSI dell'archivio segreti

Le metriche vengono gestite dalla porta 8095, ma questa porta non viene esposta all'esterno del pod per impostazione predefinita.

  • Accedere alle metriche tramite localhost usando kubectl port-forward.

    kubectl port-forward -n kube-system ds/aks-secrets-store-csi-driver 8095:8095 &
    curl localhost:8095/metrics
    
Metriche fornite dal driver CSI dell'archivio segreti
Metrico Descrizione Tag
total_node_publish Numero totale di richieste di montaggio del volume andate a buon fine. os_type=<runtime os>, provider=<provider name>
total_node_unpublish Numero totale di richieste di smontaggio del volume andate a buon fine. os_type=<runtime os>
total_node_publish_error Numero totale di errori con richieste di montaggio del volume. os_type=<runtime os>, provider=<provider name>, error_type=<error code>
total_node_unpublish_error Numero totale di errori con richieste di smontaggio del volume. os_type=<runtime os>
total_sync_k8s_secret Numero totale di segreti Kubernetes sincronizzati. os_type=<runtime os, provider=<provider name>
sync_k8s_secret_duration_sec Distribuzione del tempo necessario per sincronizzare il segreto Kubernetes. os_type=<runtime os>
total_rotation_reconcile Numero totale di riconciliazioni di rotazione. os_type=<runtime os>, rotated=<true or false>
total_rotation_reconcile_error Il numero totale di rotazioni si riconcilia con gli errori. os_type=<runtime os>, rotated=<true or false>, error_type=<error code>
total_rotation_reconcile_error Distribuzione del tempo necessario per ruotare il contenuto dell'archivio segreti per i pod. os_type=<runtime os>

Eseguire la migrazione dal driver CSI dell'archivio segreti gestito dal servizio Azure Kubernetes

  1. Disinstalla il driver CSI dell'archivio segreti open source usando il seguente comando helm delete.

    helm delete <release name>
    

    Nota

    Se hai installato il driver e il provider usando YAML di distribuzione, puoi eliminare i componenti usando il seguente comando kubectl delete.

    # 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. Aggiorna il tuo cluster del servizio Azure Kubernetes esistente con la funzionalità usando il comando az aks enable-addons.

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

Risoluzione dei problemi

Per la procedura di risoluzione dei problemi, vedi Risolvere i problemi relativi al provider di Azure Key Vault per il driver CSI dell'archivio segreti.

Passaggi successivi

Per saperne di più sul provider di Azure Key Vault per il driver CSI dell'archivio segreti, vedi le risorse seguenti: