Канико в конвейере Tekton на Openshift возвращает ошибку при проверке push-разрешений
У нас есть задача конвейера Tekton в Openshift, которая использует Kaniko для создания образа контейнера и последующей отправки его во внешний реестр.
Шаг сборки задачи всегда завершается с ошибкой:
error checking push permissions -- make sure you entered the correct tag name, and that you are authenticated correctly, and try again: checking push permission for "xxxxxxx.io/xxxxxxxxxxx/frontend:frontend-secure-pipeline-csd6ur": POST https://xxxxxxx.io/v2/xxxxxxxxxxx/frontend/blobs/uploads/: DENIED: You are not authorized to access the specified resource. See https://cloud.ibm.com/docs/Registry?topic=Registry-troubleshoot-access-denied; [map[Action:pull Class: Name:xxxxxxxxxxx/frontend Type:repository] map[Action:push Class: Name:xxxxxxxxxxx/frontend Type:repository]]
Задача yaml (аннотации, комментарии и последующие шаги удалены для краткости)...
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
annotations:
name: source-to-image-cache
namespace: openshift-pipelines
resourceVersion: '259117173'
uid: xxxxxxxxxxxxxxxxxxxxx
spec:
params:
- description: The path to the dockerfile to build
name: pathToDockerfile
type: string
- default: .
description: >-
The build context used by Kaniko
(https://github.com/GoogleContainerTools/kaniko#kaniko-build-contexts)
name: pathToContext
type: string
- default: ''
description: Image tag
name: imageTag
type: string
- default: sbu-pipeline
description: Is the name of the base image registry namespace secret
name: base-reg-secret-name
type: string
- default: sbu-pipeline
description: Is the name of the built image registry namespace secret
name: build-reg-secret-name
type: string
- default: ''
description: >-
This is the URL to save the built image to - used with
imageRespositoryPath below
name: imageRegistryUrl
type: string
- default: ''
description: >-
This is the repository path at the imageRegistryUrl to save the built
image to
name: imageRepositoryPath
type: string
results:
- description: The image SHA code for the built application
name: image-digest
type: string
steps:
- image: 'uk.icr.io/sbu-pipeline/alpine-curl-jq:6'
imagePullPolicy: IfNotPresent
name: merge-json
resources: {}
script: >
#!/usr/bin/env bash
set +x
printf "\nSorting out config.json for Kaniko.\n"
diff /home/.dockerwip/base.dockerconfigjson
/home/.dockerwip/build.dockerconfigjson -q
myDiff=$?
if [ "$myDiff" -gt 0 ]; then
# Hopefully short-term fix until Kaniko supports multiple auths...
cp /home/.dockerwip/base.dockerconfigjson /home/.docker/config.json
else
cp /home/.dockerwip/base.dockerconfigjson /home/.docker/config.json
fi
printf "\nFinished sorting out config.json for Kaniko.\n"
securityContext:
runAsUser: 0
volumeMounts:
- mountPath: /home/.dockerwip/base.dockerconfigjson
name: base-registry-creds
subPath: base.dockerconfigjson
- mountPath: /home/.dockerwip/build.dockerconfigjson
name: build-registry-creds
subPath: build.dockerconfigjson
- mountPath: /home/.docker
name: docker-config
- resources: {}
name: build
command:
- /kaniko/executor
env:
- name: DOCKER_CONFIG
value: /kaniko/.docker/
securityContext:
runAsUser: 0
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /kaniko/.docker/
name: docker-config
image: 'gcr.io/kaniko-project/executor:v1.16.0'
args:
- >-
--dockerfile=$(workspaces.source.path)/$(inputs.params.pathToDockerfile)
- >-
--destination=$(params.imageRegistryUrl)/$(params.imageRepositoryPath):$(inputs.params.imageTag)
- '--context=$(workspaces.source.path)/$(inputs.params.pathToContext)'
- '--single-snapshot=true'
- '--image-name-with-digest-file=$(workspaces.source.path)/image-digest'
- '--cache=true'
- '--cache-copy-layers=true'
- '--use-new-run=true'
volumes:
- emptyDir: {}
name: docker-config
- name: base-registry-creds
secret:
items:
- key: .dockerconfigjson
path: base.dockerconfigjson
secretName: $(params.base-reg-secret-name)
- name: build-registry-creds
secret:
items:
- key: .dockerconfigjson
path: build.dockerconfigjson
secretName: $(params.build-reg-secret-name)
workspaces:
- name: source
Я проверил учетные данные локально, и все в порядке. Я могу смонтировать секрет, содержащий учетные данные докера, в другой контейнер, а затем успешно войти в систему, извлечь и отправить изображения. Ошибка возникает только с Канико. Кажется, Канико не читает переменную среды DOCKER_CONFIG. Я пробовал несколько разных версий Канико, но безуспешно.
Есть какие-нибудь предложения по возможным исправлениям или следующим шагам по отладке?