2016-04-27 12 views
6

Chcę przechowywać pliki w Secrets Kubernetes, ale nie znalazłem, jak to zrobić przy użyciu pliku yaml.Jak ustawić tajne pliki w sekretach kubernetes przez yaml?

Byłem w stanie zrobić to za pomocą CLI z kubectl:

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

Ale gdy próbuję coś podobnego w yaml:

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

Ive got ten błąd:

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

Postępuję zgodnie z tym przewodnikiem http://kubernetes.io/docs/user-guide/secrets/. Wyjaśnia, jak utworzyć klucz tajny za pomocą yaml, ale nie w jaki sposób utworzyć tajne z pliku plik przy użyciu yaml.

Czy to możliwe? Jeśli tak, jak mogę to zrobić?

Odpowiedz

5

Podczas korzystania z formatu CLI zasadniczo używasz generatora yaml przed umieszczeniem go na serwerze.

Ponieważ Kubernetes jest aplikacją klient-serwer z interfejsem API REST pomiędzy, a działania muszą być atomowe, opublikowany plik YAML musi zawierać treść pliku, a najlepszym sposobem na to jest przez osadzenie go jako bazy64 formatuj w linii. Byłoby miło, gdyby plik mógł być w inny sposób osadzony (może być użyte wcięcie do stworzenia granic pliku), ale nie widziałem żadnego takiego przykładu do tej pory.

W związku z powyższym, umieszczenie odniesienia do pliku na yaml nie jest możliwe, nie ma renderowania przed lotem yaml w celu uwzględnienia treści.

+0

Dziękuję, szkoda dodanie odniesienia pliku nie jest obsługiwany :-( – dgil

9

Jak już pisaliśmy w poprzednim poście, musimy dostarczyć certyfikat/klucz zakodowany jako based64 do pliku.

Oto generic Przykładem certiticate (w tym przypadku SSL):

secret.yml.tmpl:

apiVersion: v1  

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

Wstępnie proces plik zawierać certyfikat/klucz:

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 - 

Należy zauważyć, że certyfikat/klucz są kodowane przy użyciu base64 bez białych znaków (-w0).

Dla TLS może być po prostu:

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