Almacenar datos en un secreto de Kubernetes

En este tema se explica cómo almacenar datos sensibles en un secreto de Kubernetes y cómo recuperar los datos de las variables de flujo en un flujo de proxy de API.

Introducción

Hay ocasiones en las que quieres almacenar datos para recuperarlos en el tiempo de ejecución. Se trata de datos que no caducan y que no deben estar codificados en la lógica de tu proxy de API. Una opción es usar la función de mapa de clave-valor (KVM) híbrido. Si ya usas Kubernetes para gestionar secretos en un almacén personalizado de datos sensibles, puedes usar la función de secretos de Kubernetes que se describe en este tema. Al igual que con los datos de KVM, puedes acceder a los datos secretos de Kubernetes en las variables de flujo del proxy de API.

¿Qué tipos de datos se pueden almacenar en un secreto de Kubernetes?

Apigee hybrid solo te permite almacenar los siguientes tipos de archivos de datos en un secreto de Kubernetes. Entre ellas, se incluyen las siguientes:

Formato de archivo Extensiones de archivo admitidas
Archivos de certificado y clave TLS *.crt, *.key y *.pem
Archivos de propiedad *.properties

Los archivos de propiedades son archivos que contienen pares clave-valor. Por ejemplo:

username=admin
password=1f2d1e2e7df

Crear un secreto de Kubernetes

En esta sección se explica cómo crear un secreto de Kubernetes para almacenar datos sensibles en el clúster.

  1. Crea los archivos que quieras almacenar en el secreto de Kubernetes. Los archivos deben tener uno de los formatos admitidos con las extensiones de archivo que se indican en ¿Qué tipos de datos se pueden almacenar en un secreto de Kubernetes?
  2. Ejecuta el comando kubectl create secret generic. Por ejemplo:
    kubectl -n namespace create secret generic org-env-policy-secret \
      --from-file=filepath/prop-file.properties \
      --from-file=filepath/key-file.key \
      --from-file="filepath/cert-file.pem
    

    Donde:

    • namespace: el espacio de nombres de Kubernetes en el que se implementan los componentes del tiempo de ejecución.
    • org: nombre de tu organización de Apigee.
    • env: nombre de un entorno de tu organización.
    • filepath: la ruta al archivo que quieras incluir en el secreto. Debes especificar al menos un archivo para incluirlo en el secreto.
    • prop-file: el nombre de un archivo de propiedades que se incluirá en el secreto.
    • key-file: el nombre de un archivo de clave TLS que se incluirá en el secreto.
    • cert-file: el nombre de un archivo de certificado TLS que se incluirá en el secreto.

    Puedes incluir uno o varios archivos en el secreto. Por ejemplo:

    kubectl -n apigee create secret generic myorg-test-policy-secret \
      --from-file="$policy_secrets_path"/credential.properties \
      --from-file="$policy_secrets_path"/secrets.properties \
      --from-file="$policy_secrets_path"/public.key \
      --from-file="$policy_secrets_path"/fullchain.pem
    
  3. Después de la creación, el cambio puede tardar hasta 90 segundos en reflejarse en todos los clústeres. Los procesadores de mensajes comprueban si hay cambios en los secretos cada 30 segundos. Si detectan un cambio, la caché se actualiza.

Recuperar datos de un secreto

Una vez que se haya creado el secreto y esté disponible (normalmente, unos 90 segundos después de la creación), podrá acceder a los datos del secreto en una variable de flujo de un flujo de proxy de API de la organización o el entorno en el que se almacene el secreto. Por ejemplo, supongamos que tu secreto contiene un archivo *.properties llamado credentials.properties con una clave de API, como se muestra a continuación:

apikey=OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z

A continuación, puedes recuperar la clave de API de una variable de flujo mediante una política como Asignar mensaje. Por ejemplo:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>my-apikey</Name>
    <Ref>private.secret.credential.properties.apikey</Ref>
  </AssignVariable>
</AssignMessage>

El nombre de la variable a la que se hace referencia en el elemento Ref, private.secret.credential.properties.apikey, se compone de las siguientes partes:

Parte del nombre de la variable Descripción
private.secret Espacio de nombres fijo de la variable. Todos los secretos de Kubernetes almacenados en el clúster híbrido comparten este espacio de nombres.
credential.properties Nombre de un archivo almacenado en el secreto de Kubernetes.
apikey Nombre de una clave almacenada en un archivo de propiedades.

En este ejemplo, la política Asignar mensaje obtiene el valor apikey OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z y lo almacena en la variable de flujo my-apikey.

Actualizar un secreto

Como kubectl no admite la actualización de secretos de Kubernetes, primero debes eliminar el secreto y volver a crearlo siguiendo los pasos que se indican en Crear un secreto de Kubernetes.