2016-04-27 6 views
6

Ich möchte Dateien in Kubernetes Secrets speichern, aber ich habe nicht gefunden, wie es mit einer yaml Datei zu tun.Wie setze ich geheime Dateien zu kubernetes Secrets von Yaml?

Ich habe in der Lage gewesen, um es den cli zu machen mit mit kubectl:

kubectl create secret generic some-secret --from-file=secret1.txt=secrets/secret1.txt 

Aber wenn ich versuche, etwas ähnliches in einem yaml:

apiVersion: v1 
kind: Secret 
metadata: 
    name: some-secret 
type: Opaque 
data: 
    secret1.txt: secrets/secret1.txt 

Ive diesen Fehler bekam:

[pos 73]: json: error decoding base64 binary 'assets/elasticsearch.yml': illegal base64 data at input byte 20 

Ich befolge diese Anleitung http://kubernetes.io/docs/user-guide/secrets/. Es wird erklärt, wie ein Geheimnis mit Hilfe einer yaml erstellt wird, aber nicht, wie ein Geheimnis aus einer Datei mit yaml erstellt wird.

Ist es möglich? Wenn ja, wie kann ich es tun?

Antwort

5

Wenn Sie das Format CLI verwenden, verwenden Sie grundsätzlich einen Generator des Yaml, bevor Sie es auf der Serverseite veröffentlichen.

Da es sich bei Kubernetes um eine Client-Server-App mit dazwischen liegender REST-API handelt und die Aktionen atomar sein müssen, muss der gepostete YAML den Inhalt der Datei enthalten. Dies geschieht am besten durch Einbetten als base64 Inline formatieren. Es wäre schön, wenn die Datei anderweitig eingebettet wäre (Einrückung könnte vielleicht verwendet werden, um die Grenzen der Datei zu erzeugen), aber ich habe bis jetzt kein Beispiel dafür gesehen.

Das heißt, eine Dateireferenz auf der Yaml ist nicht möglich, es gibt keine Vor-Flug-Rendering der Yaml, um den Inhalt aufzunehmen.

+0

Danke zu schlecht einen Dateiverweis hinzugefügt wird nicht :-(unterstützt – dgil

9

Wie im vorherigen Post beantwortet, müssen wir das Zertifikat/Schlüssel, der als based64 codiert ist, der Datei bereitstellen. Hier

ist allgemeines Beispiel für eine certiticate (in diesem Fall SSL):

Der secret.yml.tmpl:

apiVersion: v1  

    kind: Secret 
    metadata: 
     name: test-secret 
     namespace: default 
    type: Opaque 
    data: 
     server.crt: SERVER_CRT 
     server.key: SERVER_KEY 

Pre-Prozess der Datei um das Zertifikat zu schließen/Schlüssel:

sed "s/SERVER_CRT/`cat server.crt|base64 -w0`/g" secret.yml.tmpl | \ 
sed "s/SERVER_KEY/`cat server.key|base64 -w0`/g" | \ 
kubectl apply -f - 

Beachten Sie, dass das Zertifikat/Schlüssel mit base64 ohne Leerzeichen (-w0) codiert sind.

Für die TLS kann einfach sein:

kubectl create secret tls test-secret-tls --cert=server.crt --key=server.key