Share via


Proveedor de Azure Key Vault para la configuración y las opciones de solución de problemas del controlador CSI de Secrets Store para Azure Kubernetes Service (AKS)

Siga los pasos descritos en Uso del proveedor de Azure Key Vault para el controlador CSI de Secrets Store en un clúster de AKS y Especificación de una identidad para acceder al proveedor de Azure Key Vault para el controlador CSI de Secrets Store en AKS. Una vez completados estos pasos, puede aplicar configuraciones adicionales o realizar la solución de problemas.

Opciones de configuración

Habilitar y deshabilitar la rotación automática

Nota:

Cuando el proveedor de Azure Key Vault para el controlador CSI de Secrets Store está habilitado, actualiza el montaje del pod y el secreto de Kubernetes definido en el campo secretObjects de SecretProviderClass. Para ello, sondea los cambios periódicamente, en función del intervalo de sondeo de rotación que se haya definido. El intervalo de sondeo de rotación predeterminado es de dos minutos.

Nota:

Cuando se actualiza un secreto en un almacén de secretos externos después de la implementación inicial del pod, el secreto de Kubernetes y el montaje del pod se actualizarán periódicamente en función de cómo la aplicación consume los datos secretos.

Monte el secreto de Kubernetes como volumen: Utilice las características de secretos de sincronización automática y rotación automática de K8s del controlador CSI de Secrets Store. La aplicación tiene que observar los cambios del volumen secreto de Kubernetes montado. Cuando el controlador CSI actualiza el secreto de Kubernetes, el contenido del volumen correspondiente se actualiza automáticamente.

La aplicación lee los datos del sistema de archivos de contenedor: Utilice la característica de rotación del controlador CSI de Secrets Store. La aplicación tiene que vigilar el cambio de archivo del volumen montado por el controlador CSI.

Use el secreto de Kubernetes para una variable de entorno: reinicie el pod para obtener el secreto más reciente como una variable de entorno. Use una herramienta como Recargar para ver los cambios en el secreto de Kubernetes sincronizado y realizar actualizaciones graduales en pods.

Habilitación de la rotación automática en un nuevo clúster de AKS

  • Habilite la rotación automática de secretos en un nuevo clúster mediante el comando az aks create y habilite el complemento enable-secret-rotation.

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

Habilitación de la rotación automática en un clúster de AKS existente

  • Actualice un clúster existente para habilitar la rotación automática de secretos mediante el comando az aks addon update y el parámetro enable-secret-rotation.

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

Definición de un intervalo de rotación personalizado

  • Especifique un intervalo de rotación personalizado mediante el comando az aks addon update con el parámetro rotation-poll-interval.

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

Deshabilitación de la rotación automática

Para deshabilitar la rotación automática, primero debe deshabilitar el complemento. Después, puede volver a habilitar el complemento sin el parámetro enable-secret-rotation.

  1. Deshabilite el complemento del proveedor de secretos mediante el comando az aks addon disable.

    az aks addon disable --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider
    
  2. Vuelva a habilitar el complemento del proveedor de secretos sin el parámetro enable-secret-rotation mediante el comando az aks addon enable.

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

Si ya está utilizando un SecretProviderClass, puede actualizar el complemento sin deshabilitarlo primero mediante az aks addon enable sin especificarenable-secret-rotation el parámetro.

Sincronización de contenido montado con un secreto de Kubernetes

Nota:

Los ejemplos de YAML de esta sección están incompletos. Deberá modificarlos para admitir el método elegido de acceso a la identidad del almacén de claves. Para obtener más información, consulte Especificación de una identidad para acceder al proveedor de Azure Key Vault para el controlador CSI de Secrets Store en AKS.

Es posible que quiera crear un secreto de Kubernetes para reflejar el contenido de secretos montado. Los secretos se sincronizarán después de iniciar un pod para montarlos. Al eliminar los pods que consumen los secretos, también se eliminará el secreto de Kubernetes.

  • Para sincronizar el contenido montado con un secreto de Kubernetes, use el campo secretObjects al crear un SecretProviderClass para definir el estado deseado del secreto de Kubernetes, como se muestra en el ejemplo de YAML siguiente.

    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:

    Asegúrese de que objectName en el campo secretObjects coincida con el nombre de archivo del contenido montado. Si usa objectAlias, debe coincidir con el alias del objeto.

Establecimiento de una variable de entorno para hacer referencia a secretos de Kubernetes

Nota:

En el ejemplo de YAML se muestra el acceso a un secreto a través de variables env y a través de volume/volumeMount. Esto es para fines ilustrativos. En las aplicaciones típicas se usa un método u otro, pero no ambos. Sin embargo, tenga en cuenta que, para que un secreto esté disponible a través de variables env, primero lo debe montar al menos un pod.

  • Haga referencia al secreto de Kubernetes recientemente creado estableciendo una variable de entorno en el pod, tal y como se muestra en el siguiente código de ejemplo.

    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"
    

Acceso a la métrica

Proveedor de Azure Key Vault

Las métricas se proporcionan a través de Prometheus desde el puerto 8898; sin embargo, este puerto no se muestra fuera del pod de manera predeterminada.

  • Acceda a las métricas desde localhost mediante kubectl port-forward.

    kubectl port-forward -n kube-system ds/aks-secrets-store-provider-azure 8898:8898 & curl localhost:8898/metrics
    
Métricas proporcionadas por el proveedor de Azure Key Vault para el controlador CSI de Secrets Store
Métrica Descripción Etiquetas
keyvault_request Distribución del tiempo que ha tardado en obtenerse del almacén de claves. os_type=<runtime os>, provider=azure, object_name=<keyvault object name>, object_type=<keyvault object type>, error=<error if failed>
grpc_request Distribución del tiempo que se ha tardado con relación a las solicitudes gRPC. os_type=<runtime os>, provider=azure, grpc_method=<rpc full method>, grpc_code=<grpc status code>, grpc_message=<grpc status message>

Controlador CSI de Secrets Store

Las métricas se sirven desde el puerto 8095, pero este puerto no se expone fuera del pod de forma predeterminada.

  • Acceda a las métricas desde localhost mediante kubectl port-forward.

    kubectl port-forward -n kube-system ds/aks-secrets-store-csi-driver 8095:8095 &
    curl localhost:8095/metrics
    
Métricas proporcionadas por el controlador CSI del almacén de secretos
Métrica Descripción Etiquetas
total_node_publish Número total de solicitudes de montaje de volumen correctas. os_type=<runtime os>, provider=<provider name>
total_node_unpublish Número total de solicitudes de desmontaje de volumen correctas. os_type=<runtime os>
total_node_publish_error Número total de errores con solicitudes de montaje de volumen. os_type=<runtime os>, provider=<provider name>, error_type=<error code>
total_node_unpublish_error Número total de errores con solicitudes de desmontaje de volumen. os_type=<runtime os>
total_sync_k8s_secret Número total de secretos de Kubernetes sincronizados. os_type=<runtime os, provider=<provider name>
sync_k8s_secret_duration_sec Distribución del tiempo que se ha tardado en sincronizar el secreto de Kubernetes. os_type=<runtime os>
total_rotation_reconcile Número total de conciliaciones de rotación. os_type=<runtime os>, rotated=<true or false>
total_rotation_reconcile_error El número total de rotaciones se reconcilia con errores. os_type=<runtime os>, rotated=<true or false>, error_type=<error code>
total_rotation_reconcile_error Distribución del tiempo que se ha tardado en rotar el contenido de Secrets Store para pods. os_type=<runtime os>

Migrar del controlador CSI de Secrets Store de código abierto al controlador CSI de Secrets Store administrado por AKS

  1. Desinstale el controlador CSI de Secrets Store de código abierto utilizando el siguiente comando helm delete.

    helm delete <release name>
    

    Nota:

    Si instaló el controlador y el proveedor mediante YAML de implementación, puede eliminar los componentes mediante el siguiente 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. Actualice el clúster de AKS existente con la función mediante el comando az aks enable-addons.

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

Solución de problemas

Para conocer los pasos de solución de problemas, consulte Solución de problemas del proveedor de Azure Key Vault para el controlador CSI del almacén de secretos.

Pasos siguientes

Para más información sobre el proveedor de Azure Key Vault para el controlador CSI de Secrets Store, consulte los siguientes recursos: