У меня есть проблема, которую я не могу решить должным образом. У меня есть Ku Кластер bernetes, работающий на 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 - совместное использование секрета в пространствах имен
, секрет
привязан к пространству имен, и на него можно ссылаться только из этого пространства имен.
Для этого может быть обходной путь , но я не думаю Вам было бы интересно.
Обходной путь должен создать контейнер
с правами администратора и использовать его для выполнения команды:
kubectl get secret test-secret --namespace=default --export -o yaml | kubectl apply --namespace=prod -f
Конечно, вам нужно будет создать специальный RBAC , для каждое пространство имен для запуска этого привилегированного модуля.
Я настоятельно не рекомендую, но это можно сделать и таким способом.