Назад | Перейти на главную страницу

Создать секрет извлечения изображения из другого секрета или скопировать секрет из другого пространства имен

У меня есть проблема, которую я, кажется, не могу решить. У меня есть кластер Kubernetes, работающий на GCP, и настраиваемая диаграмма HELM helm / foo. У меня есть несколько экземпляров диаграммы, работающих с разными именами, и мне нужно изменить их, чтобы каждая из них работала в своем собственном пространстве имен. Не очень сложно, поскольку это просто параметр для руля:

helm install --name bar --namespace bar helm/foo

Внутри диаграммы есть несколько вещей, в том числе развертывание с предоставленным imagePullSecret:

imagePullSecret: scrt

Это прекрасно работает при развертывании в пространстве имен по умолчанию, или, скорее, в том же пространстве имен, в котором находится секрет. Но не работает, когда пространство имен предоставляется, поскольку пространство имен «bar» не имеет доступа к «scrt», который находится в пространстве имен по умолчанию.

Чтобы решить эту проблему, многие источники сделают что-то вроде здесь: https://stackoverflow.com/questions/46297949/kubernetes-sharing-secret-across-namespaces где секрет копируется между пространствами имен. Это прекрасное решение, если у вас есть скрипт, запускающий все шоу, но для меня это невозможно, поскольку Terraform развернул N экземпляров диаграммы / теста.

Итак, мой вопрос: как я могу создать новый imagePullSecret из существующего, используя только helm / yaml? Я мог бы упаковать json-файл в диаграмму, но хотел бы избежать секретов за пределами K8.

Спасибо!

Краткий ответ: не стоит.

Ты должен перейти Декларативное управление объектами Kubernetes с помощью файлов конфигурации, что может помочь вам понять, как использовать Kubernetes.

Объекты Kubernetes можно создавать, обновлять и удалять, сохраняя несколько файлов конфигурации объекта в каталоге и используя kubectl apply для рекурсивного создания и обновления этих объектов по мере необходимости. Этот метод сохраняет записи, сделанные в живые объекты, без обратного объединения изменений в файлы конфигурации объекта.

Обычно это невозможно, потому что, как вы указывали из Kubernetes - совместное использование секретов в пространствах имен , secret привязан к пространству имен, и на него можно ссылаться только из этого пространства имен.

Может быть обходной путь чтобы добиться этого, но я не думаю, что Вам это будет интересно. Обходной путь должен создать Container с участием админ привилегии и используйте его для выполнения команды:

kubectl get secret test-secret --namespace=default --export -o yaml | kubectl apply --namespace=prod -f 

Конечно, вам нужно будет создать специальные RBACдля каждого пространства имен для запуска этого привилегированного модуля.

Я категорически не советую этого делать, но это можно сделать и так.