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 complementoenable-secret-rotation
.az aks create \ --name myAKSCluster2 \ --resource-group myResourceGroup \ --enable-addons azure-keyvault-secrets-provider \ --enable-secret-rotation \ --generate-ssh-keys
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ámetroenable-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ámetrorotation-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
.
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
Vuelva a habilitar el complemento del proveedor de secretos sin el parámetro
enable-secret-rotation
mediante el comandoaz 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 unSecretProviderClass
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 camposecretObjects
coincida con el nombre de archivo del contenido montado. Si usaobjectAlias
, 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
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
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:
Azure Kubernetes Service