Openshift / OKD - как шаблонизировать секреты докера - PullRequest
1 голос
/ 29 марта 2019

Как администратор с большим количеством параметризованных шаблонов Openshift, я изо всех сил пытаюсь создать параметризованные объекты SECRET в шаблонах для типа kubernetes.io/dockerconfigjson или kubernetes.io/dockercfg, чтобы этот секрет можно было использовать для извлечения докеров.

Задача: все предварительно кодируется в base64 в формате JSON для обычной настройки шаблона dockerconfigjson, и не уверен, как его изменить.

Вопрос: Как создать шаблон SECRET, который принимает параметры $ {DOCKER_USER}, $ {DOCKER_PASSWORD}, $ {DOCKER_SERVER} и $ {DOCKER_EMAIL}, чтобы затем создать действительный секрет, который можно использовать для извлечения изображений докера из личный / защищенный реестр докеров.

Это должно заменить методы командной строки "oc create secret docker-registry ....", поместив их в файл шаблона, хранящийся в gitlab / github, чтобы иметь шаблон развертывания в стиле gitOps.

Спасибо!

1 Ответ

3 голосов
/ 29 марта 2019

Формат секретов конфигурации докера можно найти в документации (или в вашем кластере через oc export secret/mysecret) в разделе Использование секретов .

apiVersion: v1
kind: Secret
metadata:
  name: aregistrykey
  namespace: myapps
type: kubernetes.io/dockerconfigjson 
data:
  .dockerconfigjson:<base64encoded docker-config.json>

Один метод будетпринять предварительно кодированное 64 кодированное содержимое файла json в параметрах вашего шаблона и вставить их в раздел данных.

apiVersion: v1
kind: Secret
metadata:
  name: aregistrykey
  namespace: myapps
type: kubernetes.io/dockerconfigjson 
data:
  .dockerconfigjson:${BASE64_DOCKER_JSON}

Другим методом будет использование поля stringData секретного объекта.Как отмечено на той же странице:

Записи в карте stringData преобразуются в base64, и запись автоматически перемещается в карту данных.Это поле только для записи;значение будет возвращено только через поле данных.

apiVersion: v1
kind: Secret
metadata:
  name: aregistrykey
  namespace: myapps
type: kubernetes.io/dockerconfigjson 
stringData:
  .dockerconfigjson:${REGULAR_DOCKER_JSON}

Формат фактического значения ключа .dockerconfigjson совпадает с содержимым .docker/config.json файл.Так что в вашем конкретном случае вы можете сделать что-то вроде:

apiVersion: v1
kind: Secret
metadata:
  name: aregistrykey
  namespace: myapps
type: kubernetes.io/dockerconfigjson 
stringData:
  .dockerconfigjson:'{"auths": {"${REGISTRY_URL}": {"auth": "${BASE64_USERNAME_COLON_PASSWORD}"}}}'

К сожалению, шаблон языка, который OpenShift использует для шаблонов, не достаточно мощный, чтобы base64 кодировал действительные значения параметров для вас, поэтому вы не можетеИзбегайте необходимости кодировать пару username:password вне самого шаблона, но ваш инструментарий CI / CD должен быть более чем способен выполнить это с необработанными строками имени пользователя / пароля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...