Usa el complemento de Secret Manager con Google Kubernetes Engine

La integración entre Secret Manager y Google Kubernetes Engine (GKE) te permite almacenar datos sensibles, como contraseñas y certificados que usan los clústeres de GKE, como secretos en Secret Manager.

En esta página, se explica cómo puedes usar el complemento de Secret Manager para acceder a los Secrets almacenados en Secret Manager como volúmenes activados en Pods de Kubernetes.

Este proceso implica los siguientes pasos:

  1. Habilita el complemento de Secret Manager en un clúster de GKE nuevo o existente.
  2. Configurar aplicaciones para que se autentiquen en la API de Secret Manager
  3. Define qué secretos se deben activar en los Pods de Kubernetes con un archivo YAML de SecretProviderClass. El complemento de Secret Manager admite secretos globales y regionales.
  4. Crea un volumen en el que se activarán los secretos. Una vez que se adjunta el volumen, las aplicaciones del contenedor pueden acceder a los datos en el sistema de archivos del contenedor.

El complemento de Secret Manager se deriva del controlador de CSI de Kubernetes Secret Store de código abierto y del proveedor de Google Secret Manager. Si usas el controlador de CSI de Secrets Store de código abierto para acceder a los secretos, puedes migrar al complemento de Secret Manager. Para obtener más información, consulta Migra desde el controlador de CSI de Secrets Store existente.

Beneficios

El complemento de Secret Manager proporciona los siguientes beneficios:

  • Puedes usar una solución completamente administrada y compatible para acceder a los secretos de Secret Manager desde GKE sin ninguna sobrecarga operativa.
  • No tienes que escribir código personalizado para acceder a los secretos almacenados en Secret Manager.
  • Puedes almacenar y administrar todos tus secretos de forma centralizada en Secret Manager y acceder a ellos de forma selectiva desde los Pods de GKE con el complemento de Secret Manager. De esta manera, puedes usar las funciones que ofrece Secret Manager, como la encriptación con CMEK, el control de acceso detallado, la rotación administrada, la administración del ciclo de vida y los registros de auditoría, además de usar las funciones de Kubernetes, como pasar secretos a los contenedores en forma de volúmenes montados.
  • El complemento de Secret Manager es compatible con los clústeres Standard y los clústeres de Autopilot.
  • El complemento de Secret Manager admite nodos que usan imágenes de nodo de Container-Optimized OS o Ubuntu.

Limitaciones

El complemento de Secret Manager tiene las siguientes limitaciones:

  • El complemento de Secret Manager no admite la función Sync as Kubernetes Secret, que está disponible en el controlador de CSI de Secrets Store de código abierto. Si deseas sincronizar los secretos almacenados en Secret Manager con los Secrets de Kubernetes, usa la función integrada de sincronización de secretos de Secret Manager. Para obtener más información, consulta Sincroniza secretos con Secrets de Kubernetes.

  • El complemento de Secret Manager no admite nodos de Windows Server.

Antes de comenzar

  • Habilita las APIs de Secret Manager y Google Kubernetes Engine.

    Roles necesarios para habilitar las APIs

    Para habilitar APIs, necesitas el permiso serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.

    Habilitar las API

  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta el comando gcloud components update para obtener la versión más reciente.

    No puedes configurar el complemento de Secret Manager de forma manual con el SDK de Google Cloud ni con la consola de Google Cloud .

  • Asegúrate de que tu clúster ejecute la versión 1.27.14-gke.1042001 o posterior de GKE con una imagen de nodo de Linux.

  • Si usas un clúster de GKE Standard, asegúrate de que tenga habilitada la federación de identidades para cargas de trabajo en GKE. Workload Identity Federation for GKE está habilitada de forma predeterminada en un clúster de Autopilot. Los Pods de Kubernetes usan Workload Identity Federation for GKE para autenticarse en la API de Secret Manager.

Habilita el complemento de Secret Manager

Puedes habilitar el complemento de Secret Manager en clústeres Standard y Autopilot.

Habilita el complemento de Secret Manager en un clúster de GKE nuevo

Para habilitar el complemento de Secret Manager en la creación del clúster, haz lo siguiente:

Console

  1. En la consola de Google Cloud , ve a la página Google Kubernetes Engine.

    Ir a Google Kubernetes Engine

  2. Haga clic en Crear.

  3. En el cuadro de diálogo Crear clúster, haz clic en Configurar.

  4. En el menú de navegación, en la sección Clúster, haz clic en Seguridad.

  5. Selecciona la casilla de verificación Habilitar Secret Manager.

  6. Selecciona la casilla de verificación Habilitar Workload Identity.

  7. Continúa con la configuración del clúster y, luego, haz clic en Crear.

gcloud

{ Standard cluster}

Para habilitar el complemento de Secret Manager en un clúster Estándar nuevo, ejecuta el siguiente comando:

Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

  • CLUSTER_NAME: El nombre de tu clúster.
  • LOCATION: Es la región de Compute Engine del clúster, como us-central1.
  • VERSION: Es la versión específica de GKE que deseas usar. Asegúrate de que tu clúster ejecute la versión 1.27.14-gke.1042001 o posterior de GKE. Si el canal de versiones predeterminado no incluye esta versión, usa la marca --release-channel para elegir un canal de versiones que sí la incluya.
  • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud container clusters create CLUSTER_NAME \
    --enable-secret-manager \
    --location=LOCATION \
    --cluster-version=VERSION \
    --workload-pool=PROJECT_ID.svc.id.goog

Windows (PowerShell)

gcloud container clusters create CLUSTER_NAME `
    --enable-secret-manager `
    --location=LOCATION `
    --cluster-version=VERSION `
    --workload-pool=PROJECT_ID.svc.id.goog

Windows (cmd.exe)

gcloud container clusters create CLUSTER_NAME ^
    --enable-secret-manager ^
    --location=LOCATION ^
    --cluster-version=VERSION ^
    --workload-pool=PROJECT_ID.svc.id.goog

{Clúster de Autopilot}

Para habilitar el complemento de Secret Manager en un clúster de Autopilot nuevo, ejecuta el siguiente comando:

Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud container clusters create-auto CLUSTER_NAME \
    --enable-secret-manager \
    --cluster-version=VERSION \
    --location=LOCATION

Windows (PowerShell)

gcloud container clusters create-auto CLUSTER_NAME `
    --enable-secret-manager `
    --cluster-version=VERSION `
    --location=LOCATION

Windows (cmd.exe)

gcloud container clusters create-auto CLUSTER_NAME ^
    --enable-secret-manager ^
    --cluster-version=VERSION ^
    --location=LOCATION

Después de habilitar el complemento de Secret Manager, puedes usar el controlador de CSI de Secrets Store en volúmenes de Kubernetes con el controlador y el nombre del aprovisionador: secrets-store-gke.csi.k8s.io.

Habilita el complemento de Secret Manager en un clúster de GKE existente

Para habilitar el complemento de Secret Manager en un clúster existente, haz lo siguiente:

Console

  1. En la consola de Google Cloud , ve a la página Google Kubernetes Engine.

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. En la página de detalles del clúster, en la sección Seguridad, haz clic en Secret Manager.

  4. En el diálogo Editar Secret Manager, selecciona la casilla de verificación Habilitar Secret Manager.

  5. Haz clic en Guardar cambios.

gcloud

Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

  • CLUSTER_NAME: Es el nombre de tu clúster.
  • LOCATION: Es la región de Compute Engine del clúster, como us-central1.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud container clusters update CLUSTER_NAME \
    --enable-secret-manager \
    --location=LOCATION \

Windows (PowerShell)

gcloud container clusters update CLUSTER_NAME `
    --enable-secret-manager `
    --location=LOCATION `

Windows (cmd.exe)

gcloud container clusters update CLUSTER_NAME ^
    --enable-secret-manager ^
    --location=LOCATION ^

Verifica la instalación del complemento de Secret Manager

Para verificar que el complemento de Secret Manager esté instalado en el clúster de Kubernetes, ejecuta el siguiente comando:

  gcloud container clusters describe CLUSTER_NAME --location LOCATION | grep secretManagerConfig -A 4

Reemplaza lo siguiente:

  • CLUSTER_NAME: es el nombre del clúster.
  • LOCATION: Es la ubicación de tu clúster, como us-central1.

Configura la rotación automática de secretos

Puedes configurar el complemento de Secret Manager para que rote automáticamente los secretos, de modo que los secretos actualizados en Secret Manager después de la implementación inicial del pod se envíen al pod de forma automática y periódica. La rotación automática de secretos montados permite que las aplicaciones reciban automáticamente los secretos actualizados sin necesidad de reiniciarse ni de intervención manual. Esta función garantiza que las aplicaciones siempre usen los secretos más actualizados.

Ten en cuenta lo siguiente sobre la configuración de la rotación automática de secretos:

  • La rotación automática de secretos es una configuración opcional.
  • Puedes configurar esta función cuando crees un clúster nuevo o actualices uno existente.
  • Puedes configurar la frecuencia de rotación automática especificando el intervalo de rotación y la unidad del intervalo de rotación.
  • La rotación automática de secretos es compatible con la versión 1.32.2-gke.1059000 de GKE o versiones posteriores.

Para configurar la rotación automática de secretos, debes habilitar la función enable-secret-manager-rotation y configurar el intervalo de rotación estableciendo secret-manager-rotation-interval.

Configura la rotación automática de secretos en un clúster de GKE nuevo

Para configurar la rotación automática de secretos en la creación del clúster, haz lo siguiente:

Console

{Clúster de Autopilot}

  1. En la consola de Google Cloud , ve a la página Crea un clúster de Autopilot.

    Ir a Crea un clúster de Autopilot

  2. En el menú de navegación, en la sección Configuración avanzada, haz clic en Seguridad.

  3. Selecciona la casilla de verificación Habilitar Secret Manager.

  4. Selecciona la casilla de verificación Configurar la rotación automática.

  5. Especifica el Intervalo de rotación y la Unidad de intervalo de rotación.

  6. Continúa con la configuración del clúster y, luego, haz clic en Crear.

{ Standard cluster}

  1. En la consola de Google Cloud , ve a la página Crea un clúster de Kubernetes.

    Ir a Crea un clúster de Kubernetes

  2. En el menú de navegación, en la sección Clúster, haz clic en Seguridad.

  3. Selecciona la casilla de verificación Habilitar Secret Manager.

  4. Selecciona la casilla de verificación Configurar la rotación automática.

  5. Especifica el Intervalo de rotación y la Unidad de intervalo de rotación.

  6. Continúa con la configuración del clúster y, luego, haz clic en Crear.

gcloud

{Clúster de Autopilot}

Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

  • CLUSTER_NAME: es el nombre del clúster.
  • VERSION: Es la versión específica de GKE que deseas usar. Asegúrate de que tu clúster ejecute la versión 1.27.14-gke.1042001 o posterior de GKE. Si el canal de versiones predeterminado no incluye esta versión, usa la marca --release-channel para elegir un canal de versiones que sí la incluya.
  • LOCATION: Es la ubicación de tu clúster, como us-central1.
  • ROTATION_INTERVAL: Es el intervalo de rotación en segundos. El valor debe ser un número entero positivo seguido del sufijo s. El valor mínimo permitido es 120s. Por ejemplo, para establecer el intervalo en 5 minutos, usa 300s.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud container clusters create CLUSTER_NAME \
    --cluster-version=VERSION \
    --location=LOCATION \
    --enable-secret-manager \
    --enable-secret-manager-rotation \
    --secret-manager-rotation-interval=ROTATION_INTERVAL
    

Windows (PowerShell)

gcloud container clusters create CLUSTER_NAME `
    --cluster-version=VERSION `
    --location=LOCATION `
    --enable-secret-manager `
    --enable-secret-manager-rotation `
    --secret-manager-rotation-interval=ROTATION_INTERVAL
    

Windows (cmd.exe)

gcloud container clusters create CLUSTER_NAME ^
    --cluster-version=VERSION ^
    --location=LOCATION ^
    --enable-secret-manager ^
    --enable-secret-manager-rotation ^
    --secret-manager-rotation-interval=ROTATION_INTERVAL
    

{ Standard cluster}

Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

  • CLUSTER_NAME: es el nombre del clúster.
  • LOCATION: La ubicación de tu clúster, como us-central1
  • VERSION: Es la versión específica de GKE que deseas usar. Asegúrate de que tu clúster ejecute la versión 1.27.14-gke.1042001 o posterior de GKE. Si el canal de versiones predeterminado no incluye esta versión, usa la marca --release-channel para elegir un canal de versiones que sí la incluya.
  • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
  • ROTATION_INTERVAL: Es el intervalo de rotación en segundos. El valor debe ser un número entero positivo seguido del sufijo s. El valor mínimo permitido es 120s. Por ejemplo, para establecer el intervalo en 5 minutos, usa 300s.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --cluster-version=VERSION \
    --workload-pool=PROJECT_ID.svc.id.goog \
    --enable-secret-manager \
    --enable-secret-manager-rotation \
    --secret-manager-rotation-interval=ROTATION_INTERVAL
    

Windows (PowerShell)

gcloud container clusters create CLUSTER_NAME `
    --location=LOCATION `
    --cluster-version=VERSION `
    --workload-pool=PROJECT_ID.svc.id.goog `
    --enable-secret-manager `
    --enable-secret-manager-rotation `
    --secret-manager-rotation-interval=ROTATION_INTERVAL
    

Windows (cmd.exe)

gcloud container clusters create CLUSTER_NAME ^
    --location=LOCATION ^
    --cluster-version=VERSION ^
    --workload-pool=PROJECT_ID.svc.id.goog ^
    --enable-secret-manager ^
    --enable-secret-manager-rotation ^
    --secret-manager-rotation-interval=ROTATION_INTERVAL
    

Configura la rotación automática de secretos en un clúster de GKE existente

Para configurar la rotación automática de secretos en un clúster de GKE existente, haz lo siguiente:

Console

  1. En la consola de Google Cloud , accede a la página Clústeres de Kubernetes.

    Ir a clústeres de Kubernetes

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. En la página de detalles del clúster, haz clic en Editar.

  4. En la sección Seguridad, haz clic en Secret Manager.

  5. En el diálogo Editar Secret Manager, selecciona la casilla de verificación Habilitar Secret Manager.

  6. Selecciona la casilla de verificación Configurar la rotación automática.

  7. Especifica el Intervalo de rotación y la Unidad de intervalo de rotación.

  8. Haz clic en Guardar cambios.

gcloud

Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

  • CLUSTER_NAME: es el nombre del clúster.
  • LOCATION: La ubicación de tu clúster, como us-central1
  • ROTATION_INTERVAL: Es el intervalo de rotación en segundos. El valor debe ser un número entero positivo seguido del sufijo s. El valor mínimo permitido es 120s. Por ejemplo, para establecer el intervalo en 5 minutos, usa 300s.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud container clusters update CLUSTER_NAME \
    --enable-secret-manager \
    --location=LOCATION \
    --enable-secret-manager-rotation \
    --secret-manager-rotation-interval=ROTATION_INTERVAL

Windows (PowerShell)

gcloud container clusters update CLUSTER_NAME `
    --enable-secret-manager `
    --location=LOCATION `
    --enable-secret-manager-rotation `
    --secret-manager-rotation-interval=ROTATION_INTERVAL

Windows (cmd.exe)

gcloud container clusters update CLUSTER_NAME ^
    --enable-secret-manager ^
    --location=LOCATION ^
    --enable-secret-manager-rotation ^
    --secret-manager-rotation-interval=ROTATION_INTERVAL

Configura aplicaciones para que se autentiquen en la API de Secret Manager

El proveedor de Google Secret Manager usa la identidad de carga de trabajo del Pod en el que se activa un secreto cuando se autentica en la API de Secret Manager. Para permitir que tus aplicaciones se autentiquen en la API de Secret Manager con la federación de identidades para cargas de trabajo para GKE, sigue estos pasos:

  • Crea una ServiceAccount de Kubernetes o usa una existente en el mismo espacio de nombres que el Pod en el que deseas activar el Secret.

  • Crea una política de Identity and Access Management (IAM) de permiso para el secreto en Secret Manager.

Los Pods que usan la ServiceAccount de Kubernetes configurada se autentican automáticamente como el identificador principal de IAM que corresponde a la ServiceAccount de Kubernetes cuando acceden a la API de Secret Manager.

Crea una ServiceAccount de Kubernetes

  1. Guarda el siguiente manifiesto como service-account.yaml:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: KSA_NAME
      namespace: NAMESPACE
    

    Reemplaza lo siguiente:

    • KSA_NAME: Es el nombre de tu ServiceAccount de Kubernetes nueva.
    • NAMESPACE: El nombre del espacio de nombres de Kubernetes para la ServiceAccount
  2. Aplica el manifiesto

    kubectl apply -f service-account.yaml
    
  3. Crea una política de permisos de IAM que haga referencia a la nueva ServiceAccount de Kubernetes y otórgale permiso para acceder al secreto:

    gcloud secrets add-iam-policy-binding SECRET_NAME \
        --role=roles/secretmanager.secretAccessor \
        --member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME
    

    Reemplaza lo siguiente:

    • SECRET_NAME: Es el nombre del secreto en Secret Manager.
    • PROJECT_NUMBER: Tu Google Cloud número de proyecto numérico
    • PROJECT_ID: Es el ID del proyecto de Google Cloud el proyecto que contiene tu clúster de GKE.
    • NAMESPACE: El nombre del espacio de nombres de Kubernetes para la ServiceAccount
    • KSA_NAME: Es el nombre de tu ServiceAccount de Kubernetes existente.

Usa una ServiceAccount de Kubernetes existente

Crea una política de permisos de IAM que haga referencia a la ServiceAccount de Kubernetes existente y otórgale permiso para acceder al secreto:

gcloud secrets add-iam-policy-binding SECRET_NAME \
    --role=roles/secretmanager.secretAccessor \
    --member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME

Reemplaza lo siguiente:

  • SECRET_NAME: Es el nombre del secreto en Secret Manager.
  • PROJECT_NUMBER: Tu Google Cloud número de proyecto numérico
  • PROJECT_ID: Es el ID del proyecto de Google Cloud el proyecto que contiene tu clúster de GKE.
  • NAMESPACE: El nombre del espacio de nombres de Kubernetes para la ServiceAccount
  • KSA_NAME: Es el nombre de tu ServiceAccount de Kubernetes existente.

Define qué secretos se deben activar

Para especificar qué secretos se activarán como archivos en el Pod de Kubernetes, crea un manifiesto YAML SecretProviderClass y enumera los secretos que se activarán y el nombre de archivo con el que se activarán. Lleva a cabo los pasos siguientes:

  1. Guarda el siguiente manifiesto como app-secrets.yaml:

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: SECRET_PROVIDER_CLASS_NAME
    spec:
      provider: gke
      parameters:
        secrets: |
          - resourceName: "projects/PROJECT_ID/secrets/SECRET_NAME/versions/SECRET_VERSION"
            path: "FILENAME.txt"
    

    Reemplaza lo siguiente:

    • SECRET_PROVIDER_CLASS_NAME: Es el nombre de tu objeto SecretProviderClass.
    • PROJECT_ID: el ID de tu proyecto
    • SECRET_NAME: Es el nombre del secreto.
    • SECRET_VERSION: Es la versión del secreto. La versión del secreto debe estar en la misma región que el clúster.
    • FILENAME.txt: Es el nombre del archivo en el que se activará el valor del secreto. Puedes crear varios archivos con las variables resourceName y path.

    En el caso de un Secret regional, resourceName es la ruta de acceso completa al recurso del Secret que incluye la ubicación del Secret regional. Por ejemplo, "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_NAME/versions/SECRET_VERSION"

  2. Aplica el manifiesto

    kubectl apply -f app-secrets.yaml -n NAMESPACE
    

    Reemplaza NAMESPACE por el nombre del espacio de nombres de Kubernetes para la ServiceAccount.

  3. Verifica que se haya creado el objeto SecretProviderClass:

    kubectl get SecretProviderClasses -n NAMESPACE
    

Configura un volumen en el que se activarán los secretos

  1. Guarda la siguiente configuración como my-pod.yaml.

    apiVersion: v1
    kind: Pod
    metadata:
      name: POD_NAME
      namespace: NAMESPACE
    spec:
      serviceAccountName: KSA_NAME
      containers:
      - image: IMAGE_NAME
        imagePullPolicy: IfNotPresent
        name: POD_NAME
        resources:
          requests:
            cpu: 100m
        stdin: true
        stdinOnce: true
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        tty: true
        volumeMounts:
          - mountPath: "/var/secrets"
            name: mysecret
      volumes:
      - name: mysecret
        csi:
          driver: secrets-store-gke.csi.k8s.io
          readOnly: true
          volumeAttributes:
            secretProviderClass: SECRET_PROVIDER_CLASS_NAME
    

    Reemplaza lo siguiente:

    • POD_NAME: Es el nombre del Pod de Kubernetes en el que se montó el Secret.
    • NAMESPACE: El nombre del espacio de nombres de Kubernetes para la ServiceAccount
    • KSA_NAME: Es la cuenta de servicio de Kubernetes que configuraste en el paso Configura las aplicaciones para que se autentiquen en la API de Secret Manager.
    • IMAGE_NAME: Es el nombre de la imagen del contenedor
    • SECRET_PROVIDER_CLASS_NAME: El nombre de tu objeto SecretProviderClass
  2. Solo en clústeres estándar, agrega lo siguiente al campo template.spec para colocar los Pods en grupos de nodos que usan la federación de identidades para cargas de trabajo para GKE.

    Omite este paso en los clústeres de Autopilot, que rechazan este nodeSelector porque cada nodo usa la federación de identidades para cargas de trabajo para GKE.

    spec:
      nodeSelector:
        iam.gke.io/gke-metadata-server-enabled: "true"
    
  3. Aplica la configuración al clúster.

    kubectl apply -f my-pod.yaml
    

En este paso, se activa un volumen mysecret en /var/secrets con el controlador de CSI (secrets-store-gke.csi.k8s.io). Este volumen hace referencia al objeto SecretProviderClass, que actúa como proveedor.

Migra desde el controlador de CSI del almacén de secrets de Kubernetes de código abierto existente

Si usas el controlador CSI de Kubernetes Secret Store de código abierto y el proveedor de Google Secret Manager, puedes migrar tus cargas de trabajo al complemento administrado de Secret Manager.

El complemento administrado y el controlador de código abierto pueden ejecutarse de forma simultánea en el mismo clúster. Esta capacidad te permite migrar aplicaciones y espacios de nombres individuales de forma incremental sin tiempo de inactividad del clúster.

Para migrar al complemento de Secret Manager, sigue estos pasos:

  1. Habilita el complemento de Secret Manager en tu clúster
  2. Crea manifiestos de SecretProviderClass
  3. Actualiza los manifiestos de cargas de trabajo
  4. Verifica la migración
  5. Limpia los recursos de código abierto antiguos

Paso 1: Habilita el complemento de Secret Manager en tu clúster

Habilita el complemento de Secret Manager en tu clúster de GKE existente:

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --enable-secret-manager \
    [--enable-secret-manager-rotation \
     --secret-manager-rotation-interval=ROTATION_INTERVAL]

Reemplaza lo siguiente:

  • CLUSTER_NAME: Es el nombre de tu clúster.
  • LOCATION: Es la ubicación de tu clúster, como us-central1.
  • (Opcional) ROTATION_INTERVAL: Es la frecuencia con la que se actualizan automáticamente los secretos activados, como 120s o 3600s. El valor mínimo permitido es 60s, y el valor predeterminado es 120s.

Paso 2: Crea manifiestos de SecretProviderClass

Crea un manifiesto SecretProviderClass con provider: gke para cada aplicación. Te recomendamos que agregues -gke al nombre del recurso para que los recursos SecretProviderClass antiguos y nuevos puedan coexistir durante las actualizaciones progresivas.

  1. Guarda el siguiente manifiesto como secret-provider-class-gke.yaml:

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: SECRET_PROVIDER_CLASS_NAME-gke # Append -gke to coexist with existing SPC
      namespace: NAMESPACE
    spec:
      provider: gke # Changed from 'gcp'
      parameters:
        secrets: |
          - resourceName: "projects/PROJECT_ID/secrets/SECRET_NAME/versions/SECRET_VERSION"
            path: "FILENAME.txt"
    

    Reemplaza lo siguiente:

    • SECRET_PROVIDER_CLASS_NAME-gke: Es el nombre de tu nuevo recurso SecretProviderClass.
    • NAMESPACE: El espacio de nombres de Kubernetes en el que se ejecuta tu carga de trabajo
    • PROJECT_ID: ID del proyecto de Google Cloud
    • SECRET_NAME: El nombre del secreto en Secret Manager
    • SECRET_VERSION: Es la versión del secreto, como latest o 1.
    • FILENAME.txt: Es el nombre de archivo en el que se activa el valor del secreto.

    En el caso de los secretos regionales, especifica la ruta de acceso completa al recurso, incluida la ubicación: "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_NAME/versions/SECRET_VERSION"

  2. Aplica el nuevo manifiesto SecretProviderClass:

    kubectl apply -f secret-provider-class-gke.yaml
    

Paso 3: Actualiza los manifiestos de la carga de trabajo

Actualiza los manifiestos de tu Pod o Deployment para usar el controlador administrado (secrets-store-gke.csi.k8s.io) y hacer referencia al nuevo nombre de SecretProviderClass.

  1. Actualiza la sección volumes del manifiesto de tu carga de trabajo (por ejemplo, deployment.yaml):

    spec:
      containers:
      - name: CONTAINER_NAME
        image: IMAGE_NAME
        volumeMounts:
        - name: secrets-volume
          mountPath: "/var/secrets"
          readOnly: true
      volumes:
      - name: secrets-volume
        csi:
          driver: secrets-store-gke.csi.k8s.io # Changed from 'secrets-store.csi.k8s.io'
          readOnly: true
          volumeAttributes:
            secretProviderClass: SECRET_PROVIDER_CLASS_NAME-gke # Reference new SPC name
    

    Reemplaza lo siguiente:

    • CONTAINER_NAME: El nombre del contenedor en tu carga de trabajo
    • IMAGE_NAME: El nombre de tu imagen de contenedor
    • SECRET_PROVIDER_CLASS_NAME-gke: Es el nombre de tu nuevo recurso SecretProviderClass.
  2. Aplica el manifiesto de carga de trabajo actualizado para activar una implementación progresiva:

    kubectl apply -f deployment.yaml
    

Paso 4: Verifica la migración

Verifica que tus cargas de trabajo estén usando correctamente el complemento administrado:

  1. Verifica que tus Pods se hayan implementado y hayan alcanzado el estado Running:

    kubectl get pods -n NAMESPACE
    

    Reemplaza NAMESPACE por el espacio de nombres de Kubernetes en el que se ejecuta tu carga de trabajo.

  2. Verifica que los secretos estén activados de forma correcta y que se pueda acceder a ellos dentro del contenedor:

    kubectl exec -it POD_NAME -n NAMESPACE -- cat /var/secrets/FILENAME.txt
    

    Reemplaza lo siguiente:

    • POD_NAME: El nombre de tu Pod de Kubernetes
    • NAMESPACE: El espacio de nombres de Kubernetes en el que se ejecuta tu carga de trabajo
    • FILENAME.txt: Es el nombre del archivo secreto montado configurado en tu SecretProviderClass.
  3. (Opcional) Si habilitaste la rotación automática, verifica las actualizaciones de secretos:

    1. Agrega una versión nueva del secreto en Secret Manager.
    2. Espera el intervalo de rotación configurado, como 120 segundos.
    3. Vuelve a inspeccionar el archivo de secretos montado dentro del Pod para verificar que el contenido se actualizó sin reiniciar el Pod:

      kubectl exec -it POD_NAME -n NAMESPACE -- cat /var/secrets/FILENAME.txt
      

Paso 5: Libera espacio de los recursos de código abierto antiguos

  1. Borra los recursos SecretProviderClass antiguos:

    kubectl delete secretproviderclass OLD_SECRET_PROVIDER_CLASS_NAME -n NAMESPACE
    

    Reemplaza lo siguiente:

    • OLD_SECRET_PROVIDER_CLASS_NAME: Es el nombre de tu recurso SecretProviderClass heredado, como my-app-secrets.
    • NAMESPACE: El espacio de nombres de Kubernetes en el que se ejecuta tu carga de trabajo
  2. Si implementaste el complemento del proveedor de Google Secret Manager de código abierto con un manifiesto, borra el DaemonSet:

    kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/secrets-store-csi-driver-provider-gcp/main/deploy/provider-gcp-plugin.yaml
    
  3. Si instalaste el controlador de CSI de Secrets Store de código abierto con Helm, desinstala la versión de Helm:

    helm uninstall csi-secrets-store -n kube-system
    

Inhabilita el complemento de Secret Manager

Para inhabilitar el complemento de Secret Manager en un clúster de Standard existente o en un clúster de Autopilot, ejecuta el siguiente comando:

Console

  1. En la consola de Google Cloud , ve a la página Google Kubernetes Engine.

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. En la página de detalles del clúster, en la sección Seguridad, haz clic en Secret Manager.

  4. En el cuadro de diálogo Editar Secret Manager, desmarca la casilla de verificación Habilitar Secret Manager.

  5. Haz clic en Guardar cambios.

gcloud

Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

  • CLUSTER_NAME: Es el nombre de tu clúster.
  • REGION: La región de Compute Engine del clúster, como us-central1

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud container clusters update CLUSTER_NAME \
    --no-enable-secret-manager \
    --region=REGION \

Windows (PowerShell)

gcloud container clusters update CLUSTER_NAME `
    --no-enable-secret-manager `
    --region=REGION `

Windows (cmd.exe)

gcloud container clusters update CLUSTER_NAME ^
    --no-enable-secret-manager ^
    --region=REGION ^

¿Qué sigue?