Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: AKS en Windows Server
El controlador se CSI de almacén de secretos de Kubernetes integra los almacenes de secretos en Kubernetes mediante un volumen de Container Storage Interface (CSI). Si integra el controlador CSI del almacén de secretos en AKS en Windows Server, puede montar secretos, claves y certificados como volumen. Los datos se montan en el sistema de archivos del contenedor.
Con el controlador CSI de Secrets Store, también puede integrar un almacén de claves en uno de los proveedores admitidos, como Azure Key Vault.
Antes de empezar
Asegúrese de que cumple los siguientes requisitos previos antes de empezar:
- Una cuenta y una suscripción de Azure.
- Una implementación existente de AKS en Windows Server con un clúster de cargas de trabajo existente. Si no tiene una implementación, siga este Inicio rápido para implementar un host de AKS y un clúster de cargas de trabajo.
- Si ejecuta clústeres Linux, deben estar en la versión Linux 1.16.0 o posterior.
- Si ejecuta clústeres Windows, deben estar en la versión Windows 1.18.0 o posterior.
- Asegúrese de haber completado las siguientes instalaciones:
- Timón
kubectl
- La versión más reciente de la CLI de Azure.
acceder a los clústeres mediante kubectl
Ejecute el siguiente comando para acceder a su clúster usando kubectl
. En el comando, reemplace el valor de -name
con el nombre de su clúster existente. El nombre de su clúster usa el archivo kubeconfig
especificado del clúster como el archivo kubeconfig
predeterminado para kubectl
:
Get-AksHciCredential -name mycluster
Instalación del controlador CSI de Secrets Store
Para instalar el controlador CSI de Secrets Store, ejecute el siguiente comando de Helm:
helm repo add csi-secrets-store-provider-azure https://azure.github.io/secrets-store-csi-driver-provider-azure/charts
El siguiente comando instala tanto el controlador CSI de Secrets Store como el proveedor de Azure Key Vault:
helm install csi csi-secrets-store-provider-azure/csi-secrets-store-provider-azure --namespace kube-system
Nota
Debe instalar el controlador CSI de Secrets Store y el proveedor de Azure Key Vault en el espacio de nombres kube-system
. Esta guía usa el espacio de nombres kube-system
para todas las instancias.
Compruebe que el controlador CSI de Secrets Store y el proveedor de Azure Key Vault se hayan instalado correctamente
Revise los pods en ejecución para confirmar que el controlador CSI de Secrets Store y el proveedor de Azure Key Vault se instalaron correctamente, mediante los siguientes comandos:
Para verificar que el controlador CSI de Secrets Store está instalado, ejecute este comando:
kubectl get pods -l app=secrets-store-csi-driver -n kube-system
Ejemplo:
NAME READY STATUS RESTARTS AGE secrets-store-csi-driver-spbfq 3/3 Running 0 3h52m
Para verificar que el proveedor de Azure Key Vault está instalado, ejecute este comando:
kubectl get pods -l app=csi-secrets-store-provider-azure -n kube-system
Ejemplo:
NAME READY STATUS RESTARTS AGE csi-csi-secrets-store-provider-azure-tpb4j 1/1 Running 0 3h52m
Agregue secretos en un Azure Key Vault.
Necesita un recurso de Azure Key Vault que contenga los datos de los secretos. Puede usar un recurso de Azure Key Vault existente o crear uno nuevo.
Si necesita crear un recurso de Azure Key Vault, ejecute el siguiente comando. Asegúrese de haber iniciado sesión ejecutando az login
con sus credenciales de Azure. Luego, cambie los siguientes valores según su entorno:
az keyvault create -n <keyvault-name> -g <resourcegroup-name> -l eastus
Azure Key Vault puede almacenar claves, secretos y certificados. En el ejemplo siguiente, se configura un secreto de texto sin formato denominado ExampleSecret
:
az keyvault secret set --vault-name <keyvault-name> -n ExampleSecret --value MyAKSHCIExampleSecret
Cree una identidad en Azure
Use una entidad de servicio para acceder a la instancia de Azure Key Vault creada en el paso anterior. Debe registrar la salida al ejecutar los comandos siguientes. Use tanto el secreto de cliente como el ID de cliente en los próximos pasos.
Proporcione el secreto de cliente ejecutando el siguiente comando:
az ad sp create-for-rbac --role Contributor --scopes /subscriptions/<subscription-id> --name http://secrets-store-test --query 'password' -otsv
Proporcione el ID de cliente ejecutando el siguiente comando:
az ad sp show --id http://secrets-store-test --query 'appId' -otsv
Proporcione la identidad para acceder a Azure Key Vault
Use los valores del paso anterior para establecer permisos como se muestra en el siguiente comando:
az keyvault set-policy -n <keyvault-name> --secret-permissions get --spn <client-id>
Cree el secreto de Kubernetes con credenciales
Para crear el secreto de Kubernetes con las credenciales de la entidad de servicio, ejecute el siguiente comando. Reemplace los siguientes valores por el ID de cliente y el secreto de cliente adecuados del paso anterior:
kubectl create secret generic secrets-store-creds --from-literal clientid=<client-id> --from-literal clientsecret=<client-secret>
De forma predeterminada, el proveedor del Secret Store ha filtrado los secretos con inspección habilitada. Puede permitir que el comando encuentre el secreto en la configuración predeterminada agregando la etiqueta secrets-store.csi.k8s.io/used=true
al secreto:
kubectl label secret secrets-store-creds secrets-store.csi.k8s.io/used=true
Creación y aplicación de un objeto SecretProviderClass personalizado
Para usar y configurar el controlador CSI de Secrets Store en su clúster de Kubernetes, cree un recurso personalizado SecretProviderClass
. Asegúrese de que la objects
matriz coincide con los objetos almacenados en la instancia de Azure Key Vault:
apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
kind: SecretProviderClass
metadata:
name: <keyvault-name> # The name of the Azure key vault
namespace: kube-system
spec:
provider: azure
parameters:
keyvaultName: "<keyvault-name>" # The name of the Azure key vault
useVMManagedIdentity: "false"
userAssignedIdentityID: "false"
cloudName: "" # [OPTIONAL for Azure] if not provided, the Azure environment defaults to AzurePublicCloud
objects: |
array:
- |
objectName: <secret-name> # In this example, 'ExampleSecret'
objectType: secret # Object types: secret, key or cert
objectVersion: "" # [OPTIONAL] object versions, default to latest if empty
tenantId: "<tenant-id>" # The tenant ID containing the Azure Key Vault instance
Aplicación de SecretProviderClass al clúster
Para implementar el SecretProviderClass
que creó en el paso anterior, use el siguiente comando:
kubectl apply -f ./new-secretproviderclass.yaml
Actualización y aplicación del archivo YAML de implementación del clúster
Para asegurarse de que el clúster use el nuevo recurso personalizado, actualice el archivo YAML de implementación. Por ejemplo:
kind: Pod
apiVersion: v1
metadata:
name: busybox-secrets-store-inline
spec:
containers:
- name: busybox
image: k8s.gcr.io/e2e-test-images/busybox:1.29
command:
- "/bin/sleep"
- "10000"
volumeMounts:
- name: secrets-store-inline
mountPath: "/mnt/secrets-store"
readOnly: true
volumes:
- name: secrets-store-inline
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: "<keyvault-name>"
nodePublishSecretRef: # Only required when using service principal mode
name: secrets-store-creds # Only required when using service principal mode
A continuación, aplique el archivo YAML de implementación actualizado al clúster:
kubectl apply -f ./my-deployment.yaml
Validación de la implementación del almacén de secretos
Para mostrar los secretos que se mantienen en secrets-store
, ejecute el siguiente comando:
kubectl exec busybox-secrets-store-inline --namespace kube-system -- ls /mnt/secrets-store/
La salida debe mostrar el nombre del secreto. En este ejemplo, se muestra la siguiente salida:
ExampleSecret
Para mostrar el secreto de prueba que se mantiene en secrets-store
, ejecute el siguiente comando:
kubectl exec busybox-secrets-store-inline --namespace kube-system -- cat /mnt/secrets-store/ExampleSecret
La salida debe mostrar el valor del secreto. En este ejemplo, se muestra la siguiente salida:
MyAKSHCIExampleSecret