Собственная сборка и вставка образа завершается неудачно, доступ запрещен - PullRequest
1 голос
/ 02 июля 2019

Я пытаюсь создать и отправить образ докера с помощью Knative. У меня есть Java-приложение maven и многоступенчатое Dockerfile, которое создает и запускает приложение:

WORKDIR /usr/app

COPY pom.xml ./
COPY src/ ./src/
RUN mvn package


FROM openjdk:8-jdk-alpine

WORKDIR /usr/app

ENV PORT 8080

COPY --from=build /usr/app/target/*.jar ./app.jar

CMD ["java", "-jar", "/usr/app/app.jar"]

Я хочу собрать и отправить приложение в репозиторий gcr. Итак, у меня есть ServiceAccount и Build:

apiVersion: v1
data:
  password: ENCODED_PASS
  username: ENCODED_USERNAME
kind: Secret
metadata:
  annotations:
    build.knative.dev/docker-0: https://gcr.io
  name: knative-build-auth
  namespace: default
  resourceVersion: "3001"
  selfLink: /api/v1/namespaces/default/secrets/knative-build-auth
type: kubernetes.io/basic-auth
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: knative-build
secrets:
  - name: knative-build-auth
---
apiVersion: build.knative.dev/v1alpha1
kind: Build
metadata:
  name: example-build
spec:
  serviceAccountName: knative-build
  source:
    git:
      url: https://github.com/pathtorepo.git
      revision: master
  steps:
    - name: build-and-push
      image: gcr.io/kaniko-project/executor:v0.1.0
      args:
        - --dockerfile=/workspace/Dockerfile
        - --destination=gcr.io/$projectid/my-build

Я пытался использовать kaniko-project для этого. Однако, есть некоторые проблемы с его использованием. Версия 0.1.0 работает с простой Dockerfile:

FROM ubuntu

CMD ["/bin/sh", "-c", "echo Hiiiiiii"]

Но не поддерживает многоступенчатые Dockerfile s и файлы с ошибкой доступа запрещены. Любая другая версия kaniko не работает и дает сбой. В журналах версии 0.1.0 многоэтапной сборки я вижу следующую ошибку: 2019/07/02 14:43:13 Не найдено подходящих учетных данных для index.docker.io, возвращаясь к анонимному time = "2019-07-02T14: 43: 15Z" level = info msg = "сохранение зависимостей []" time = "2019-07-02T14: 43: 15Z" уровень = ошибка msg = "копирование не удалось: исходные файлы не указаны"

и статус сборки:

  conditions:
  - lastTransitionTime: "2019-07-02T14:43:16Z"
    message: 'build step "build-step-build-and-push" exited with code 1 (image: "docker-pullable://gcr.io/kaniko-project/executor@sha256:501056bf52f3a96f151ccbeb028715330d5d5aa6647e7572ce6c6c55f91ab374");
      for logs run: kubectl -n default logs example-build-pod-7d95a9 -c build-step-build-and-push'
    status: "False"
    type: Succeeded

Для любых других версий kaniko выше 0.1.0 здесь есть ошибка:

error pushing image: failed to push to destination gcr.io/star-wars-istio/reverse-function:latest: DENIED: Access denied.

Также в логах есть что-то вроде:

ERROR: logging before flag.Parse: E0702 14:54:23.003241       1 metadata.go:142] while reading 'google-dockercfg' metadata: http status code: 404 while fetching url http://metadata.google.internal./computeMetadata/v1/instance/attributes/google-dockercfg

Я нашел проблему в их репо, которая закрыта. Однако это все еще воспроизводимо. Вот GitHub выпуск

Я могу подтвердить, что мой ServiceAccount правильный, так как я могу собрать и протолкнуть простой образ докера с этой конфигурацией. Я также пробовал разные образы для сборки и push. Например, тот, который описан здесь . Несмотря на то, что я выполнил все описанные здесь шаги (создавая ServiceAccount, следуя инструкциям, который работает с простым Dockerfile), он все равно не работает, когда я пытаюсь создать и отправить свое приложение. Поэтому, когда я применяю следующую сборку:

apiVersion: build.knative.dev/v1alpha1
kind: Build
metadata:
  name: reverse-build
spec:
  serviceAccountName: knative-build
  source:
    git:
      url: https://github.com/lvivJavaClub/spring-cloud-functions.git
      revision: init-knative
    subPath: reverse-function
  steps:
    - name: build-and-push
      image: gcr.io/cloud-builders/mvn
      args: ["compile", "jib:build", "-Dimage=gcr.io/star-wars-istio/reverse-function"]

Сборка не удалась, и я получаю сообщение об ошибке в журналах:

[ERROR] Failed to execute goal com.google.cloud.tools:jib-maven-plugin:0.9.3:build (default-cli) on project reverse: Build image failed, perhaps you should set a credential helper name with the configuration '<from><credHelper>' or set credentials for 'gcr.io' in your Maven settings: com.google.api.client.http.HttpResponseException: 401 Unauthorized
[ERROR] {"errors":[{"code":"UNAUTHORIZED","message":"You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication"}]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...