Almacena datos en un secreto de Kubernetes

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

Introducción

Hay momentos en los que deseas almacenar datos para recuperarlos durante el entorno de ejecución, datos que no vencen y que no deben estar hard-coded en la lógica del proxy de la API. Una opción es usar la función de mapa de clave-valor (KVM) híbrida. Si ya usas Kubernetes para la administración de secretos en un vault personalizado de datos sensibles, deberías considerar usar la característica secreta de Kubernetes descrita en este tema. Al igual que con los datos de KVM, puedes acceder a los datos del secreto 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 limita el almacenamiento de los siguientes tipos de archivos de datos en un secreto de Kubernetes. En ellos se incluye lo siguiente:

Formato del archivo Extensiones de archivo compatibles
Certificado TLS y archivos de claves *.crt, *.key y *.pem
Archivos de propiedad *.properties

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

username=admin
password=1f2d1e2e7df

Crea 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 deseas almacenar en el secreto de Kubernetes. Los archivos deben estar en uno de los formatos admitidos con las extensiones de archivo que se enumeran en Qué tipos de datos pueden almacenarse 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
    

    Aquí:

    • namespace: El espacio de nombres de Kubernetes en el que se implementan tus componentes del entorno de ejecución.
    • org: El nombre de tu organización de Apigee.
    • env: El nombre de un entorno de tu organización.
    • filepath: La ruta de acceso al archivo que deseas incluir en el secreto. Debes especificar al menos un archivo para incluir en el secreto.
    • prop-file: El nombre de un archivo de propiedades que deseas incluir en el secreto.
    • key-file: El nombre de un archivo de claves 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 más 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. Luego de la creación, el cambio puede demorar hasta 90 segundos en verse reflejado en todos los clústeres. Los procesadores de mensajes sondean los cambios secretos cada 30 segundos. La caché se actualiza si detectan un cambio.

Recupera datos de un secreto

Una vez que se crea el secreto y está disponible (generalmente, 90 segundos después de su creación), puedes acceder a los datos del secreto en una variable de flujos en un flujo de proxy de API en la organización o entorno en el que se almacena el secreto. Por ejemplo, supongamos que tu secreto contiene un archivo *.properties llamado credentials.properties con una clave de API en él, como en el siguiente ejemplo:

apikey=OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z

A continuación, puedes recuperar la clave de API desde una variable de flujo con 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 variable al que se hace referencia en el elemento Ref, private.secret.credential.properties.apikey, se compone de las siguientes partes:

Parte del nombre de variable Descripción
private.secret El 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 El nombre de un archivo almacenado en el secreto de Kubernetes.
apikey El nombre de una clave almacenada en un archivo de propiedades.

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

Actualiza un secreto

Debido a que kubectl no admite la actualización de secretos de Kubernetes, primero debes borrar el secreto existente y volver a crearlo. Para ello, sigue los pasos en Crea un secreto de Kubernetes.