IBM Cloud Docs
이미지 가져오기 인증으로 인해 빌드 오류가 발생한 이유는 무엇입니까?

이미지 가져오기 인증으로 인해 빌드 오류가 발생한 이유는 무엇입니까?

가상 프라이빗 클라우드 클래식 인프라

오퍼레이터 허브 또는 기본 제공 개발자 컨텐츠 카탈로그와 같은 빌드 시 Red Hat 레지스트리에서 이미지를 가져오려는 경우 다음과 같은 인증 오류로 인해 빌드에 실패할 수 있습니다.

error: build error: After retrying 2 times, Pull image still failed due to error: unauthorized: authentication required

기본적으로 클러스터는 registry.redhat.io, registry.connect.redhat.comcloud.openshift.com과 같은 Red Hat 등록에 대한 이미지 풀 시크릿으로 설정됩니다. 또한 default 프로젝트에서 클러스터에는 IBM Cloud Container Registry에 대한 <region>.icr.io 레지스트리에 액세스하기 위한 이미지 풀 시크릿이 있습니다.

그러나 오퍼레이터 또는 기본 제공 템플리트에 개인용 레지스트리에서 이미지를 가져와야 하는 기본 제공 컴포넌트가 있는 경우, 빌드에는 서비스 계정의 기본 이미지 풀 시크릿에 대한 액세스 권한이 없으므로 인증 오류로 인해 빌드에 실패할 수 있습니다. 기본적으로 빌드는 내부 레지스트리에만 저장되는 이미지를 가져올 수 있습니다.

개인용 레지스트리에서 이미지를 가져오거나 개인용 레지스트리에서 내부 레지스트리로 이미지를 가져와서 이미지에 대한 액세스 권한으로 빌드를 설정하십시오.

자세한 정보는 Red Hat OpenShift 문서를 참조하십시오.

  1. 빌드에 어떠한 레지스트리에 대한 풀 액세스가 필요한지 확인하려면 빌드 구성 파일을 확인하십시오. 예를 들어 빌드가 Red Hat OpenShift 템플릿의 일부인 경우 빌드 구성 spec.strategy.sourceStrategy.from.name 값은 registry.redhat.io 비공개 레지스트리를 참조합니다.

    oc -n openshift get template react-web-app-example -o yaml
    

    출력 예

    strategy:
      sourceStrategy:
        from:
          kind: DockerImage
          name: registry.redhat.io/rhoar-nodejs-tech-preview/rhoar-nodejs-10-webapp
    
  2. 이미지 풀 액세스 권한이 있는 빌드를 설정하십시오. 개인용 레지스트리에서 이미지를 가져오기 또는 내부 레지스트리에서 이미지 스트림 사용하기 중에서 선택할 수 있습니다.

    • 개인용 레지스트리에서 이미지 가져오기:
      1. 각 프로젝트에서 풀 액세스 권한이 있는 이미지 풀 시크릿을 빌드에서 사용하는 개인용 레지스트리로 추가하십시오.

        • Red Hat 레지스트리: pull-secret 프로젝트에서 시크릿openshift-config 프로젝트를 복사하십시오. 이 시크릿에는 cloud.openshift.com, quay.io, registry.connect.redhat.comregistry.redhat.io의 개인용 레지스트리에 대한 풀 액세스 권한이 포함됩니다.
        • IBM Cloud Container Registry: default 프로젝트에서 <region>.icr.io 시크릿을 복사하십시오.
        • 개인용 레지스트리: 개인용 레지스트리에 대한 이미지 풀 액세스 권한이 있는 이미지 풀 시크릿을 작성하십시오.
      2. 시크릿을 빌더 서비스 계정에 추가하거나 빌드 구성 파일에서 이미지 풀 시크릿을 지정하십시오.

        프로젝트에서 빌더 서비스 계정에 대한 시크릿을 링크하는 예입니다.

        oc secrets link builder <pull-secret>
        

        빌드 구성 파일에서 시크릿을 참조하는 예입니다.

        spec:
          output:
            to:
              kind: "DockerImage"
              name: "<private.registry.com>/<namespace>/<image>:<tag>"
            pushSecret:
              name: "<pull-secret>"
        
    • 내부 레지스트리의 이미지 스트림 사용: 개인용 레지스트리에서 가져온 이미지의 내부 레지스트에서 이미지 스트림을 작성하십시오. 그런 다음 개인용 레지스트리에서 직접 이미지를 가져오는 대신 이미지 스트림을 참조하도록 빌드 구성 파일을 업데이트하십시오.