Archiviazione dei dati in un secret Kubernetes

Questo argomento spiega come archiviare dati sensibili in un secret di Kubernetes e recuperare i dati dalle variabili di flusso in un flusso proxy API.

Introduzione

A volte potresti voler archiviare dati per recuperarli in fase di runtime, dati in scadenza che non devono essere hardcoded nella logica del proxy API. Un'opzione è utilizzare la funzionalità ibrida mappa chiave-valore (KVM). Se utilizzi già Kubernetes per la gestione dei secret in un vault personalizzato per dati sensibili, potresti considerare l'utilizzo della funzionalità dei secret di Kubernetes descritta in questo argomento. Come con i dati KVM, puoi accedere ai dati secret di Kubernetes nelle variabili di flusso API.

Quali tipi di dati possono essere archiviati in un secret di Kubernetes?

Apigee hybrid limita l'archiviazione dei seguenti tipi di file di dati in un secret di Kubernetes. tra cui:

Formato file Estensioni dei file supportate
File di chiavi e certificati TLS *.crt, *.key e *.pem
File delle proprietà *.properties

I file delle proprietà sono file che contengono coppie chiave/valore. Ad esempio:

username=admin
password=1f2d1e2e7df

Creazione di un secret Kubernetes

Questa sezione spiega come creare un secret Kubernetes per l'archiviazione di dati sensibili nel cluster.

  1. Crea il file o i file che vuoi archiviare nel secret di Kubernetes. I file devono essere in uno dei formati supportati con le estensioni file elencate in Quali tipi di dati possono essere archiviati in un secret di Kubernetes.
  2. Esegui il comando kubectl create secret generic. Ad esempio:
    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
    

    Dove:

    • namespace: lo spazio dei nomi Kubernetes in cui viene eseguito il deployment dei componenti di runtime.
    • org: nome della tua organizzazione Apigee.
    • env: il nome di un ambiente nella tua organizzazione.
    • filepath: il percorso del file che vuoi includere nel secret. Devi specificare almeno un file da includere nel secret.
    • prop-file: il nome di un file delle proprietà da includere nel secret.
    • key-file: il nome di un file di chiave TLS da includere nel secret.
    • cert-file: il nome di un file di certificato TLS da includere nel secret.

    Puoi includere uno o più file nel secret. Ad esempio:

    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. Dopo la creazione, la modifica in tutti i cluster potrebbe richiedere fino a 90 secondi. I processori dei messaggi eseguono il polling delle modifiche ai secret ogni 30 secondi. Se rilevano una modifica, la cache viene aggiornata.

Recupero dei dati da un secret

Una volta creato e disponibile il secret (di solito circa 90 secondi dopo la creazione), puoi accedere ai dati del secret in una variabile di flusso in un flusso proxy API nell'organizzazione o nell'ambiente in cui è archiviato il secret. Ad esempio, supponiamo che il secret contenga un file *.properties denominato credentials.properties con una chiave API, come segue:

apikey=OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z

Puoi quindi recuperare la chiave API da una variabile di flusso utilizzando un criterio come Assegna messaggio. Ad esempio:

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

Il nome della variabile a cui viene fatto riferimento nell'elemento Ref, private.secret.credential.properties.apikey, è composto dai seguenti elementi:

Parte del nome variabile Descrizione
private.secret Lo spazio dei nomi fisso della variabile. Tutti i secret di Kubernetes archiviati nel cluster ibrido condividono questo spazio dei nomi.
credential.properties Il nome di un file archiviato nel secret di Kubernetes.
apikey Il nome di una chiave archiviata in un file delle proprietà.

In questo esempio, il criterio Assegna messaggio ritira il valore OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z di apikey e lo archivia nella variabile di flusso my-apikey.

Aggiornamento di un secret

Poiché kubectl non supporta l'aggiornamento dei secret di Kubernetes, devi prima eliminare il secret esistente e ricrearlo seguendo i passaggi descritti in Creazione di un secret Kubernetes.