Daten in einem Kubernetes-Secret speichern

In diesem Thema wird erläutert, wie Sie sensible Daten in einem Kubernetes-Secret speichern und die Daten aus Ablaufvariablen in einem API-Proxy-Ablauf abrufen.

Einführung

Es kann vorkommen, dass Sie Daten zum Abrufen zur Laufzeit speichern möchten – nicht ablaufende Daten, die in Ihrer API-Proxy-Logik nicht fest codiert sein sollten. Eine Option besteht darin, die Hybrid-Funktion KVM (Key-Value Map) zu verwenden. Wenn Sie Kubernetes bereits für die Secret-Verwaltung in einem benutzerdefinierten Vault für vertrauliche Daten verwenden, können Sie die in diesem Thema beschriebene Kubernetes-Funktion "Secret" verwenden. Genau wie bei KVM-Daten können Sie auf die Kubernetes-Secret-Daten in API-Proxy-Ablaufvariablen zugreifen.

Welche Datenarten können in Kubernetes-Secrets gespeichert werden?

Mit Apigee Hybrid können nur gewisse Datendateiarten in Kubernetes-Secrets gespeichert werden. Hierzu gehören:

Dateiformat Unterstützte Dateiendungen
TLS-Zertifikat- und Schlüsseldateien *.crt, *.key und *.pem
Attributdateien *.properties

Attributdateien sind Dateien, die Schlüssel/Wert-Paare enthalten. Beispiel:

username=admin
password=1f2d1e2e7df

Ein Kubernetes-Secret erstellen

In diesem Abschnitt wird erläutert, wie Sie ein Kubernetes-Secret zum Speichern sensibler Daten im Cluster erstellen.

  1. Erstellen Sie die Datei(en), die Sie im Kubernetes-Secret speichern möchten. Die Dateien müssen eines der unterstützten Formate nutzen und eine der unter Welche Datenarten können in Kubernetes-Secrets gespeichert werden? aufgeführten Dateiendungen haben.
  2. Führen Sie den Befehl kubectl create secret generic aus. Beispiel:
    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
    

    Wobei:

    • namespace: Der Kubernetes-Namespace, in dem Ihre Laufzeitkomponenten bereitgestellt sind.
    • org: Der Name Ihrer Apigee-Organisation.
    • env: Der Name einer Umgebung in Ihrer Organisation.
    • filepath: Der Pfad zur Datei, die im Secret enthalten sein soll. Sie müssen mindestens eine Datei angeben, die in das Secret aufgenommen werden soll.
    • prop-file: Der Name einer Attributdatei, die im Secret enthalten sein soll.
    • key-file: Der Name einer TLS-Schlüsseldatei, die in das Secret aufgenommen werden soll.
    • cert-file: Der Name einer TLS-Zertifikatsdatei, die in das Secret aufgenommen werden soll.

    Sie können eine oder mehrere Dateien in das Secret aufnehmen. Beispiel:

    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. Nach der Erstellung kann es bis zu 90 Sekunden dauern, bis die Änderung in allen Clustern sichtbar ist. Der Nachrichtenprozessor ruft alle Secrets von 30 Sekunden ab. Wird eine Änderung erkannt, wird der Cache aktualisiert.

Daten aus einem Secret abrufen

Sobald das Secret erstellt wurde und verfügbar ist (ca. 90 Sekunden nach der Erstellung), können Sie auf die Secret-Daten in den Ablaufvariablen in einem API-Proxy-Ablauf in der Organisation/Umgebung zugreifen, in der das Secret gespeichert ist. Angenommen, Ihr Secret enthält eine *.properties-Datei namens credentials.properties mit einem API-Schlüssel:

apikey=OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z

Sie können den API-Schlüssel dann mit einer Richtlinie wie Nachricht zuweisen aus einer Ablaufvariablen abrufen. Beispiel:

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

Der Variablenname, auf den im Ref-Element private.secret.credential.properties.apikey verwiesen wird, besteht aus folgenden Teilen:

Teil des Variablennamens Beschreibung
private.secret Der feste Namespace der Variable. Alle im Hybrid-Cluster gespeicherten Kubernetes-Secrets teilen diesen Namespace.
credential.properties

Der Name einer Datei, die im Kubernetes-Secret gespeichert ist.

apikey Der Name eines in einer Attributdatei gespeicherten Schlüssels.

In diesem Beispiel wird der apikey-Wert OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z von der Richtlinie "Nachricht zuweisen" abgerufen und in der Ablaufvariablen my-apikey gespeichert.

Secrets aktualisieren

Da kubectl die Aktualisierung von Kubernetes-Secrets nicht unterstützt, müssen Sie zuerst das vorhandene Secret löschen und es anschließend neu erstellen. Folgen Sie dazu den Schritten unter Kubernetes-Secret erstellen.