Как установить секретные файлы в 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 не является шифрованием.