Hinweis:
- Dieses Tutorial ist in einer von Oracle bereitgestellten kostenlosen Übungsumgebung verfügbar.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. In der Übung ersetzen Sie diese Werte durch die Werte, die für Ihre Cloud-Umgebung spezifisch sind.
Secrets mit Oracle Cloud Native Environment verwenden
Einführung
Viele Anwendungen verfügen über Informationen wie Passwörter, auf die nur autorisierte Benutzer zugreifen dürfen. In dieser Situation können Kubernetes-Secrets helfen. Sie bieten eine Möglichkeit, vertrauliche Daten wie Passwörter, SSH- und API-Schlüssel sicher zu verwalten. Die Verwendung von Secrets ermöglicht die Trennung vertraulicher Daten vom Code der Anwendung. Dadurch wird das Risiko verringert, dass sensible Daten während des Workflows Ihrer Pods offengelegt oder geändert werden.
Bevor Sie beginnen, können Sie einige grundlegende Details zu Kubernetes-Secrets kennen:
- Sie müssen vorhanden sein, bevor sie von einem Pod verwendet werden.
- Wird mit einem KEY- und VALUE-Paar definiert.
- Begrenzt auf eine maximale Größe von 1 MB, um zu verhindern, dass der gesamte kube-apiserver- und kubelet-Speicher verwendet wird.
- Definieren Sie sie als unveränderbar, um sie vor versehentlichen oder unerwünschten Änderungen zu schützen.
Wichtig: Kubernetes-Secrets werden nicht standardmäßig verschlüsselt, weil sie nur Base64-codiert sind und unverschlüsselt in etcd gespeichert werden. So kann jeder mit Zugriff auf etcd ein Secret anzeigen oder ändern. Die Verwendung von Kubernetes-Secrets kann mit einer der folgenden Methoden sicher gemacht werden:
- Aktivieren Sie Verschlüsselung im Ruhezustand für Secrets.
- Konfigurieren Sie den Zugriff mit den geringsten Berechtigungen mithilfe der RBAC-Autorisierung.
- Beschränken Sie den Zugriff auf Secrets auf bestimmte Container.
- Verwendung eines Management Service für externe Secrets.
Dieses Tutorial behandelt die Grundlagen von Kubernetes Secrets und zeigt einen einfachen Anwendungsfall.
Weitere Informationen zu Oracle Cloud Native Environment 2 finden Sie auf der aktuellen Releasedokumentations-site.
Ziele
In diesem Tutorial lernen Sie:
- Geheimwort erstellen
- Secret anzeigen
- Secret entschlüsseln
- Mit einem Secret eine Umgebungsvariable in einem Deployment definieren
Voraussetzungen
- Installation von Oracle Cloud Native Environment (Oracle CNE)
- Ein einzelner Kontrollknoten und ein Worker-Knoten
Oracle Cloud Native Environment konfigurieren
Hinweis: Wenn Sie in Ihrem eigenen Mandanten ausgeführt werden, lesen Sie das Projekt linux-virt-labs
GitHub README.md, und schließen Sie die Voraussetzungen ab, bevor Sie die Übungsumgebung bereitstellen.
-
Öffnen Sie ein Terminal im Luna-Desktop.
-
Klonen Sie das Projekt
linux-virt-labs
GitHub.git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
Wechseln Sie in das Arbeitsverzeichnis.
cd linux-virt-labs/ocne2
-
Installieren Sie die erforderlichen Sammlungen.
ansible-galaxy collection install -r requirements.yml
-
Bereitstellen der Übungsumgebung.
ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e install_ocne_rpm=true -e create_ocne_cluster=true -e "ocne_cluster_node_options='-n 1 -w 1'"
Die kostenlose Übungsumgebung erfordert die zusätzliche Variable
local_python_interpreter
, dieansible_python_interpreter
für Wiedergaben festlegt, die auf localhost ausgeführt werden. Diese Variable ist erforderlich, da die Umgebung das RPM-Package für das Oracle Cloud Infrastructure-SDK für Python unter den python3.6-Modulen installiert.Die Standard-Deployment-Ausprägung verwendet AMD-CPU und Oracle Linux 8. Um eine Intel CPU oder Oracle Linux 9 zu verwenden, fügen Sie dem Deployment-Befehl
-e instance_shape="VM.Standard3.Flex"
oder-e os_version="9"
hinzu.Wichtig: Warten Sie, bis das Playbook erfolgreich ausgeführt wird, und erreichen Sie die Unterbrechungsaufgabe. In dieser Phase des Playbooks ist die Installation von Oracle CNE abgeschlossen, und die Instanzen sind bereit. Notieren Sie sich die vorherige Wiedergabe, in der die öffentlichen und privaten IP-Adressen der bereitgestellten Knoten und alle anderen Deployment-Informationen gedruckt werden, die während der Ausführung der Übung erforderlich sind.
Auf Kubernetes-Cluster zugreifen
-
Öffnen Sie ein Terminal, und stellen Sie eine SSH-Verbindung zur ocne-Instanz her.
ssh oracle@<ip_address_of_instance>
-
Warten Sie, bis sich das Cluster stabilisiert und alle Pods in einem aktiven Status gemeldet werden.
watch kubectl get pods -A
Wenn alle Pods den STATUS Wird ausgeführt aufweisen, geben Sie
ctrl-c
ein, um den Befehlwatch
zu beenden. -
Prüfen Sie, wie viele Knoten vorhanden sind.
kubectl get nodes
Secrets erstellen
Es gibt drei Möglichkeiten, Kubernetes-Secrets zu erstellen:
- Mit dem kubectl-Befehlszeilentool können Sie Secrets direkt über die Befehlszeile verwalten.
- Verwenden des Befehlszeilentools kubectl mit einer Ressourcenkonfigurationsdatei.
- Verwenden des Kustomize Object Management-Tools mit einer
kustomization.yaml
-Datei.
Kubectl direkt über die Befehlszeile verwenden
Es gibt zwei Möglichkeiten, Secrets zu erstellen:
- Sie werden direkt über die Befehlszeile übergeben.
- Sie werden als Zugangsdaten in Dateien gespeichert.
-
Erstellen Sie ein Secret mit Literalwerten, die direkt aus der Befehlszeile übergeben werden.
kubectl create secret generic my-literal-secret --from-literal=username=my-user --from-literal=password=my-password
Hinweis: Verwenden Sie einfache Anführungszeichen
''
, um Sonderzeichen wie$
,\
,$
,&
,=
und!
zu maskieren, die in den Zeichenfolgenwerten enthalten sind. Andernfalls interpretiert die Befehls-Shell sie.Beispielausgabe:
[oracle@ocne ~]$ kubectl create secret generic my-literal-secret --from-literal=username=my-user --from-literal=password=my-password secret/my-literal-secret created
Kubectl mit gespeicherten Zugangsdaten verwenden
Der Inhalt der Datei wird zum Wert, und der Dateiname wird zum KEY.
-
Erstellen Sie die Zugangsdaten.
echo -n 'admin' > ./username.txt echo -n 'S!B\*d$zDsb=' > ./password.txt
-
Erstellen Sie ein Secret mit gespeicherten Dateien.
kubectl create secret generic my-file-secret \ --from-file=username=./username.txt \ --from-file=password=./password.txt
Hinweis: Beim Standardverhalten wird der Dateiname als KEY-Wert verwendet, um zu zeigen, wie das Standardverhalten außer Kraft gesetzt und der KEY-Namenswert mit der Methode
--from-file=[key]=[path to file]
direkt aus der Befehlszeile deklariert wird.Zusätzliche Information:
Alternativ können Sie ein Secret aus mehreren Dateien erstellen, die in einem Unterverzeichnis gespeichert sind.
-
Unterverzeichnis erstellen
mkdir secrets
-
Erstellen Sie die Zugangsdaten.
echo -n 'user1' > ./secrets/username.txt echo -n 'my-super-secret-password' > ./secrets/password.txt
-
Erstellen Sie ein Secret mit Zugangsdatendateien in einem Unterverzeichnis.
kubectl create secret generic my-secret --from-file=./secrets/
Hinweis: Bei dieser Methode wird jeder Dateiname als KEY-Wert und der Inhalt der Datei als VALUE verwendet.
-
YAML-Konfigurationsdatei mit Kubectl anwenden
-
Erstellen Sie die YAML-Definitionsdatei für Secrets.
cat << EOF | tee db-credentials.yaml > /dev/null apiVersion: v1 kind: Secret metadata: name: db-credentials # immutable: true type: Opaque data: username: "bXktdXNlcg==" password: "bXktcGFzc3dvcmQ=" EOF
Hinweis: Die Secret-Werte in der YAML-Datei müssen BASE64 codiert sein.
-
Wenden Sie das Secret an.
kubectl apply -f db-credentials.yaml
Kustomize mit einer kustomization.yaml
-Datei verwenden
Für das Erstellen von Secrets mit Kustomize ist eine Datei kustomization.yaml
erforderlich. Diese Datei muss eine secretGenerator
mit einer der folgenden Methoden definieren:
- Dateien, in denen die Secret-Datenwerte und die Dateinamen gespeichert sind, werden zu den KEY-Werten.
- Die unverschlüsselte Literalversion des data-Wertes in einer Datei.
- Umgebungsvariablendateien (
.env
).
Für alle oben genannten Werte müssen die Secret-Werte bei Verwendung von Kustomize nicht Base64 codiert werden. Der Name der von Kustomize verwendeten YAML-Datei muss entweder kustomization.yaml
oder kustomization.yml
lauten.
In diesem Beispiel wird gezeigt, wie Sie mit Literalen ein Secret erstellen.
-
Erstellen Sie die Datei secretGenerator.
cat << EOF | tee kustomization.yaml > /dev/null secretGenerator: - name: database-credentials literals: - username=admin - password=password EOF
-
Erstelle das Geheimnis mit Kustomize.
kubectl -n default apply -k .
Beispielausgabe:
[oracle@ocne ~]$ kubectl -n default apply -k . secret/database-credentials-fd8288cb7g created
Kubernetes-Secrets verwalten
Sie können Kubernetes-Secrets in verschiedenen Namespaces speichern. Daher müssen Sie die Option -n
verwenden, um Secrets aus einem bestimmten Namespace abzurufen, oder --all-namespaces
oder -A
verwenden, um Secrets aus allen Namespaces abzurufen. Der Befehl kubectl
verwendet den default
-Namespace, wenn Sie keinen Namespace angeben. Dasselbe Verhalten gilt beim Erstellen eines Kubernetes-Secrets.
Vorhandene Kubernetes-Secrets auflisten
-
Listen Sie die neu erstellten Secrets auf.
kubectl get secrets
Beispielausgabe:
NAME TYPE DATA AGE database-credentials-fd8288cb7g Opaque 2 34s db-credentials Opaque 2 2m16s my-file-secret Opaque 2 2m40s my-literal-secret Opaque 2 2m51s
-
Weitere Informationen zu den neu erstellten Secrets.
kubectl describe secrets
Beispielausgabe:
[oracle@ocne ~]$ kubectl describe secrets Name: database-credentials-fd8288cb7g Namespace: default Labels: <none> Annotations: <none> Type: Opaque Data ==== password: 8 bytes username: 5 bytes Name: db-credentials Namespace: default ... ... Name: my-literal-secret Namespace: default Labels: <none> Annotations: <none> Type: Opaque Data ==== username: 7 bytes password: 11 bytes
Beachten Sie, dass die Befehle
kubectl get
undkubectl describe
den Inhalt einessecret
nicht anzeigen, um eine versehentliche Exposition oder Aufnahme in eine Logdatei zu verhindern. -
Informationen für eines der Secrets anzeigen.
kubectl -n default describe secret db-credentials
Beispielausgabe:
[oracle@ocne ~]$ kubectl -n default describe secret db-credentials Name: db-credentials Namespace: default Labels: <none> Annotations: <none> Type: Opaque Data ==== password: 11 bytes username: 7 bytes
Kubernetes-Secret entschlüsseln
-
Die gespeicherten Daten für eines der Secrets anzeigen.
kubectl -n default get secret db-credentials -o jsonpath='{.data}'
Beispielausgabe:
[oracle@ocne ~]$ kubectl -n default get secret db-credentials -o jsonpath='{.data}' {"password":"bXktcGFzc3dvcmQ=","username":"bXktdXNlcg=="}[oracle@ocne ~]$
In der Ausgabe werden die codierten Schlüssel/Wert-Paare für die Secret-Daten angezeigt. Die Wertedaten sind base64-codiert.
-
Entschlüsseln Sie die codierten Schlüssel-Wert-Daten.
echo <BASE64-VALUE-FOR-PASSWORD> | base64 --decode
Beispielausgabe:
[oracle@ocne ~]$ echo bXktc3VwZXItc2VjcmV0LXBhc3Nvd3Jk | base64 --decode my-password[oracle@ocne ~]$
WARNUNG: Diese Schritte können zu einem Datensatz der Secret-Daten in der Shell-Historie führen. Vermeiden Sie dies, indem Sie beide Schritte kombinieren, wie im nächsten Schritt gezeigt.
-
Eine sicherere Methode zum Decodieren von codierten Key:Value-Daten.
kubectl -n default get secret db-credentials -o jsonpath='{.data.password}' | base64 --decode
Beispielausgabe:
[oracle@ocne ~]$ kubectl -n default get secret db-credentials -o jsonpath='{.data.password}' | base64 --decode my-password[oracle@ocne ~]$
Secret bearbeiten
Wie viele Kubernetes-Objekte können Sie ein Kubernetes-Secret bearbeiten. Die einzige Ausnahme ist, wenn ein Secret als unveränderbar deklariert wird.
-
Secret bearbeiten.
kubectl edit secrets my-literal-secret
Der Standardeditor wird geöffnet (standardmäßig
vi
), damit Sie die Base64-codierten Secret-Werte im Felddata:
aktualisieren können.Beispielausgabe:
# Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: v1 data: password: bXktcGFzc3dvcmQ= username: bXktdXNlcg== kind: Secret metadata: creationTimestamp: "2025-05-09T10:56:14Z" name: my-literal-secret namespace: default resourceVersion: "1689" uid: 394dfda3-025a-417d-bbfe-c4851a6b6cff type: Opaque ~ ~ ~ ~ "/tmp/kubectl-edit-1267071353.yaml" 16L, 480C
-
Beenden Sie den Editor ohne zu speichern, indem Sie die
Esc
-Taste gefolgt von den:q!
-Tasten drücken.Beispielausgabe:
[oracle@ocne ~]$ kubectl edit secrets my-literal-secret Edit cancelled, no changes made.
Secret entfernen
Sie können ein Secret mit dem Befehl kubectl -n <NAMESPACE> delete
entfernen.
-
Secrets löschen
kubectl -n default delete secret my-file-secret my-literal-secret
Beispielausgabe:
[oracle@ocne ~]$ kubectl -n default delete secret my-file-secret my-literal-secret secret "my-file-secret" deleted secret "my-literal-secret" deleted
Hinweis: Sie können mehrere Secrets löschen, indem Sie sie durch Leerzeichen trennen.
Secrets mit einem Deployment verwenden
Als Nächstes erstellen Sie ein Deployment mit den von Ihnen erstellten Kubernetes-Secret-Daten.
-
Listen Sie alle Secrets im Standard-Namespace auf.
kubectl get secrets -n default
Beispielausgabe:
[oracle@ocne ~]$ kubectl get secrets -n default NAME TYPE DATA AGE database-credentials-fd8288cb7g Opaque 2 10m db-credentials Opaque 2 8m
-
YAML-Datei für Deployment erstellen.
cat << EOF | tee echo-deployment.yaml > /dev/null apiVersion: apps/v1 kind: Deployment metadata: name: echo-deployment spec: replicas: 1 selector: matchLabels: app: echo template: metadata: labels: app: echo spec: containers: - name: echo image: ghcr.io/oracle/oraclelinux:9 command: ["/bin/bash", "-c"] args: ["echo 'Username: $USER' 'Password: $PASSWORD'; sleep infinity"] env: - name: USER valueFrom: secretKeyRef: name: db-credentials key: username - name: PASSWORD valueFrom: secretKeyRef: name: db-credentials key: password restartPolicy: Always EOF
-
Deployment erstellen
kubectl -n default apply -f echo-deployment.yaml
-
Bestätigen Sie das Deployment.
kubectl get deployments
Möglicherweise müssen Sie während der Bereitstellung einige Male eine erneute Abfrage durchführen.
Beispielausgabe:
[oracle@ocne ~]$ kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE echo-deployment 1/1 1 1 4m
-
Rufen Sie den Namen des bereitgestellten Pods ab.
kubectl get pods
Beispielausgabe:
[oracle@ocne ~]$ kubectl get pods NAME READY STATUS RESTARTS AGE echo-deployment-59bff74847-9nnkq 1/1 Running 0 6m
Hinweis: Der Name Ihres Pods ist unterschiedlich.
-
Prüfen Sie, ob der bereitgestellte Pod das Secret verwendet hat.
kubectl -n default describe pod <POD-NAME>
Dabei gilt:
<POD-NAME>
: Der Podname in Ihrem Deployment.
Beispielausgabe:
[oracle@ocne ~]$ kubectl -n default describe pod echo-deployment-59bff74847-9nnkq Name: echo-deployment-59bff74847-9nnkq Namespace: default Priority: 0 Service Account: default Node: ocne-worker-1/192.168.122.77 Start Time: Mon, 12 May 2025 13:42:25 +0000 ... ... Ready: True Restart Count: 0 Environment: USER: <set to the key 'username' in secret 'db-credentials'> Optional: false PASSWORD: <set to the key 'password' in secret 'db-credentials'> Optional: false Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-5fp4d (ro) Conditions: Type Status PodReadyToStartContainers True Initialized True ... .. QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: <none> [oracle@ocne ~]$
Hinweis: Prüfen Sie im Abschnitt
Environment:
, ob die Variablen$USER
und$PASSWORD
vorhanden sind. -
Vergewissern Sie sich, dass die Umgebungsvariablen im bereitgestellten Pod vorhanden sind.
kubectl exec -it <POD-NAME> -- printenv USER PASSWORD
Dabei gilt:
<POD-NAME>
: Der Podname in Ihrem Deployment.
Beispielausgabe:
[oracle@ocne ~]$ kubectl exec -it echo-deployment-59bff74847-9nnkq -- printenv USER PASSWORD my-user my-password
Die Ausgabe bestätigt, dass Sie Kubernetes-Secrets erfolgreich als Umgebungsvariable im bereitgestellten Pod verwendet haben.
Nächste Schritte
In diesem Tutorial wurde gezeigt, wie Sie Kubernetes-Secrets erstellen und verwenden, um den unbefugten Zugriff auf vertrauliche Informationen einzuschränken. Dies ist jedoch nur der Anfang. Weitere Tutorials und Inhalte finden Sie in der Oracle Linux-Schulungsstation.
Verwandte Links
- Oracle Cloud Native Environment-Dokumentation
- Oracle Cloud Native Environment-Track
- Oracle Linux-Schulungsstation
Weitere Lernressourcen
Sehen Sie sich weitere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um ein Oracle Learning Explorer zu werden.
Die Produktdokumentation finden Sie im Oracle Help Center.
Use Secrets with Oracle Cloud Native Environment
G39899-01
Copyright ©2025, Oracle and/or its affiliates.