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

가상 사설 클라우드 클래식 인프라

오퍼레이터 허브 또는 기본 제공 개발자 컨텐츠 카탈로그와 같은 빌드 시 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>"
        
    • 내부 레지스트리의 이미지 스트림 사용: 개인용 레지스트리에서 가져온 이미지의 내부 레지스트에서 이미지 스트림을 작성하십시오. 그런 다음 개인용 레지스트리에서 직접 이미지를 가져오는 대신 이미지 스트림을 참조하도록 빌드 구성 파일을 업데이트하십시오.