Формат секретов конфигурации докера можно найти в документации (или в вашем кластере через 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 должен быть более чем способен выполнить это с необработанными строками имени пользователя / пароля.