Как установить секретные файлы в Kubernetes secrets от yaml?

Я хочу хранить файлы в секретах Kubernetes, но я не нашел, как это сделать с помощью .

я смог сделать это с помощью cli с kubectl:

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

но когда я пробую что-то подобное в yaml:

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

Ive получил эту ошибку:

[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.

возможно ли это? Если да, то как я могу это сделать?

3 ответов


при использовании CLI формат в основном вы используете генератор yaml перед отправкой его на серверную сторону.

поскольку Kubernetes является клиент-серверным приложением с REST API между ними, а действия должны быть атомарными, опубликованный YAML должен содержать содержимое файла, и лучший способ сделать это-внедрить его в качестве формата base64 в строке. Было бы неплохо, если бы файл мог быть иначе встроен (возможно, отступ может быть использован для создания границ файл), но до сих пор я не видел ни одного примера такого.

при этом размещение ссылки на файл в yaml невозможно, нет предварительного рендеринга yaml для включения содержимого.


как ответили на предыдущем посте, нам нужно предоставить сертификат / ключ, закодированный как based64 в файл.

вот общий пример для сертификата (в данном случае 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

предварительная обработка файла для включения сертификата / ключа:

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 -

обратите внимание, что сертификат/ключ кодируются с помощью base64 без пробелов (В0).

для TLS может быть просто:

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

для пользователей Windows в комнате используйте это для каждого из них .cer and .ключ (пример показывает .ключ кодируется для вставки в файл YAML):

$Content = Get-Content -Raw -Path C:\ssl-cert-decrypted.key

[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($Content)) | Out-File -FilePath C:\ssl-cert-decrypted.key.b64

открыть .b64 file и вставьте (однострочный) вывод в файл YAML-имейте в виду, что при проверке файла YAML в репозиторий исходного кода с этой информацией в нем ключ будет эффективно скомпрометирован, так как base64 не является шифрованием.