Thank you for reading this post, don't forget to subscribe!
Как скопировать secret (секрет) Kubernetes из одного пространства имен в другое пространство имен (namespace)?
Secret – это объект Kubernetes, в котором хранятся конфиденциальные данные, такие как пароль, токен или ключ.
В противном случае такая информация могла бы быть помещена в спецификацию пода или образа, но для совместного использования между подами и службами это лучше сделать через объект Kubernetes.
Пользователи кластера Kubernetes могут создавать секреты, а также и система создает некоторые секреты.
мы скопируем секрет, уже созданный в пространстве имен или проекте и применим его к другому пространству имен.
Это хорошая практика – например секреты registry, общие учетные данные git, сертификаты и ключи SSL, общие учетные данные API и т. д.
Создание секретов Kubernetes
Мы создадим секрет с именем пользователя и паролем из файла.
echo -n 'admin' > ./username.txt
echo -n 'Password' > ./password.txt
Запустите команду kubectl create secret, чтобы упаковать эти файлы в секрет и создать объект на сервере API.
1 2 |
$ kubectl create secret generic my-user-pass --from-file=./username.txt --from-file=./password.txt secret/my-user-pass created |
Перечислим наши секреты:
1 |
$ kubectl get secrets |
Копирование секретов Kubernetes между неймспейсами
Используйте следующий синтаксис команды kubectl, чтобы скопировать секрет из одного пространства имен в другое пространство имен.
1 2 3 4 |
kubectl get secret <secret-name>\ --namespace=<source-nemespace> \ --export -o yaml | \ kubectl apply --namespace=<new-namespace> -f - |
В моем примере я выполню:
1 2 3 4 |
kubectl get secret my-user-pass \ --namespace=namespace1 \ --export -o yaml | \ kubectl apply --namespace=namespace2 -f - |
Вывод выполнения команды:
1 |
secret/my-user-pass created |
Подтвердите создание секрета в пространстве имен.
1 2 3 |
$ kubectl get secret -n namespace2 my-user-pass NAME TYPE DATA AGE my-user-pass Opaque 2 38s |
Расшифруйте секрет, чтобы подтвердить правильность данных:
1 2 3 |
secret_name="my-user-pass" namespace="namespace2" kubectl get secret -n $namespace $secret_name -o go-template='{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}' |
Вывод команды:
1 2 |
password.txt: Password username.txt: admin |
Если у вас есть jq, вы можете использовать следующую команду для расшифровки.
1 2 3 4 5 6 |
$ kubectl get secret my-user-pass -o json | jq '.data | map_values(@base64d)' { "password.txt": "Password", "username.txt": "admin" } |
Вот как вы можете легко скопировать секрет между пространствами имен в Kubernetes и OpenShift кластерах.