2016-04-27 30 views
6

Kubernetes Secretsにファイルを保存したいのですが、yamlファイルを使用してファイルを作成する方法が見つかりませんでした。yamlでkubernetes秘密に秘密ファイルを設定するにはどうすればよいですか?

私はそれがkubectlでCLIを使用して作ることができました:私はyamlに似た何かをしようとすると、

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

しかし:

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

I'veこのエラーました:

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

私はこのガイドに従いますhttp://kubernetes.io/docs/user-guide/secrets/yamlを使用して秘密を作成する方法を説明しますが、ファイルから秘密を作成する方法ではなく、yamlを使用する方法は説明していません。

可能ですか?もしそうなら、どうしたらいいですか?

答えて

5

CLIフォーマットを使用する場合、基本的にyamlのジェネレーターを使用してサーバー側に送信しています。

KubernetesはREST APIを中間に持つクライアントサーバーアプリケーションであり、アクションはアトミックである必要があるため、投稿されたYAMLにはファイルの内容が含まれている必要があります。そのためにはbase64として埋め込むインラインでフォーマットします。ファイルが他の方法で埋め込まれていればいいでしょう(インデントはファイルの境界を作るために使われるかもしれませんが)。つまり、yamlにファイル参照を入れることはできません。コンテンツを含めるためのyamlのプレ・フライト・レンダリングはありません。

+0

はあまりにも悪いファイル参照が:-(サポートされていない追加、ありがとう – dgil

9

以前の投稿の回答から、ファイルにbased64としてエンコードされた証明書/キーを提供する必要があります。

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 - 
:鍵証明書/含むように

apiVersion: v1  

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

前処理ファイル:

secret.yml.tmpl:ここ

(この場合SSLで)certiticateための一般的な例であります

証明書/キーは、空白(-w0)のないbase64でエンコードされています。 TLSのために

は、単純にすることができます:

kubectl create secret tls test-secret-tls --cert=server.crt --key=server.key 
関連する問題