검색

9.3. 이미지 레지스트리 저장소 미러링 이해

download PDF

컨테이너 레지스트리 저장소 미러링을 설정하면 다음 작업을 수행할 수 있습니다.

  • 소스 이미지 레지스트리의 저장소에서 이미지를 가져오기 위해 요청을 리디렉션하고 미러링된 이미지 레지스트리의 저장소에서 이를 해결하도록 AWS 클러스터에서 Red Hat OpenShift Service를 구성합니다.
  • 하나의 미러가 다운된 경우 다른 미러를 사용할 수 있도록 각 대상 저장소에 대해 여러 미러링된 저장소를 확인합니다.

AWS의 Red Hat OpenShift Service의 저장소 미러링에는 다음 속성이 포함되어 있습니다.

  • 이미지 풀은 레지스트리 다운타임에 탄력적으로 대처할 수 있습니다.
  • 연결이 끊긴 환경의 클러스터는 중요한 위치(예: quay.io)에서 이미지를 가져오고 회사 방화벽 뒤의 레지스트리에서 요청된 이미지를 제공하도록 할 수 있습니다.
  • 이미지 가져오기 요청이 있으면 특정한 레지스트리 순서로 가져오기를 시도하며 일반적으로 영구 레지스트리는 마지막으로 시도합니다.
  • 입력한 미러 정보가 AWS 클러스터의 Red Hat OpenShift Service의 모든 노드의 /etc/containers/registries.conf 파일에 추가됩니다.
  • 노드가 소스 저장소에서 이미지를 요청하면 요청된 컨텐츠를 찾을 때 까지 미러링된 각 저장소를 차례로 시도합니다. 모든 미러가 실패하면 클러스터는 소스 저장소를 시도합니다. 성공하면 이미지를 노드로 가져올 수 있습니다.

저장소 미러링은 다음과 같은 방법으로 설정할 수 있습니다.

  • Red Hat OpenShift Service on AWS 설치 시:

    AWS에서 Red Hat OpenShift Service에 필요한 컨테이너 이미지를 가져온 다음 해당 이미지를 회사 방화벽 뒤에 배치하면 AWS에 Red Hat OpenShift Service를 연결이 끊긴 환경에 있는 데이터 센터에 설치할 수 있습니다.

  • AWS에서 Red Hat OpenShift Service 설치 후:

    AWS 설치 시 Red Hat OpenShift Service를 구성하지 않은 경우 다음 CR(사용자 정의 리소스) 오브젝트를 사용하여 설치 후 설치할 수 있습니다.

    • ImageDigestMirrorSet (IDMS). 이 오브젝트를 사용하면 다이제스트 사양을 사용하여 미러링된 레지스트리에서 이미지를 가져올 수 있습니다. IDMS CR을 사용하면 이미지 가져오기에 실패하는 경우 소스 레지스트리에서 지속적인 시도를 허용하거나 중지하는 fall back 정책을 설정할 수 있습니다.
    • ImageTagMirrorSet (ITMS). 이 오브젝트를 사용하면 이미지 태그를 사용하여 미러링된 레지스트리에서 이미지를 가져올 수 있습니다. ITMS CR을 사용하면 이미지 가져오기에 실패하는 경우 소스 레지스트리에서 지속적으로 시도하려는 시도를 허용하거나 중지하는 fall back 정책을 설정할 수 있습니다.
    • ICSP( ImageContentSourcePolicy ). 이 오브젝트를 사용하면 다이제스트 사양을 사용하여 미러링된 레지스트리에서 이미지를 가져올 수 있습니다. 미러가 작동하지 않는 경우 ICSP CR은 항상 소스 레지스트리로 대체됩니다.
    중요

    ICSP( ImageContentSourcePolicy ) 오브젝트를 사용하여 저장소 미러링을 구성하는 것은 더 이상 사용되지 않는 기능입니다. 더 이상 사용되지 않는 기능은 AWS의 Red Hat OpenShift Service에 계속 포함되어 있으며 계속 지원됩니다. 그러나 이 기능은 향후 릴리스에서 제거될 예정이므로 새 배포에는 사용하지 않는 것이 좋습니다. ImageContentSourcePolicy 개체를 생성하는 데 사용한 기존 YAML 파일이 있는 경우 oc adm migrate icsp 명령을 사용하여 해당 파일을 ImageDigestMirrorSet YAML 파일로 변환할 수 있습니다. 자세한 내용은 다음 섹션의 "이미지 레지스트리 저장소 미러링에 대한 ImageContentSourcePolicy (ICSP) 파일 변환"을 참조하십시오.

이러한 사용자 정의 리소스 오브젝트 각각 다음 정보를 식별합니다.

  • 미러링하려는 컨테이너 이미지 저장소의 소스
  • 소스 저장소에서 요청된 컨텐츠를 제공하는 각 미러 저장소에 대한 개별 항목

새 클러스터의 경우 IDMS, ITMS 및 ICSP CRs 오브젝트를 원하는 대로 사용할 수 있습니다. 그러나 IDMS 및 ITMS를 사용하는 것이 좋습니다.

클러스터를 업그레이드한 경우 기존 ICSP 오브젝트가 안정적으로 유지되며 IDMS 및 ICSP 오브젝트가 모두 지원됩니다. ICSP 오브젝트를 사용하는 워크로드는 예상대로 계속 작동합니다. 그러나 IDMS CR에 도입된 대체 정책을 활용하려면 다음 이미지 레지스트리 저장소 미러링 섹션에 대해 ICSP(Conversioning ImageContentSourcePolicy) 파일에 표시된 대로 oc adm migrate icsp 명령을 사용하여 현재 워크로드를 IDMS 오브젝트로 마이그레이션할 수 있습니다. IDMS 오브젝트로 마이그레이션하려면 클러스터를 재부팅할 필요가 없습니다.

참고

클러스터에서 ImageDigestMirrorSet,ImageTagMirrorSet 또는 ImageContentSourcePolicy 개체를 사용하여 저장소 미러링을 구성하는 경우 미러링된 레지스트리에 대해 글로벌 풀 시크릿만 사용할 수 있습니다. 프로젝트에 풀 시크릿을 추가할 수 없습니다.

9.3.1. 이미지 레지스트리 저장소 미러링 설정

설치 후 미러 구성 CR(사용자 정의 리소스)을 생성하여 소스 이미지 레지스트리에서 미러링된 이미지 레지스트리로 이미지 가져오기 요청을 리디렉션할 수 있습니다.

사전 요구 사항

  • dedicated-admin 역할의 사용자로 클러스터에 액세스합니다.

프로세스

  1. 미러링된 저장소를 설정합니다.

    • Red Hat Quay Repository Mirroring에 설명된대로 Red Hat Quay를 사용하여 미러링된 저장소를 설정합니다. Red Hat Quay를 사용하면 한 저장소에서 다른 저장소로 이미지를 복사하고 시간이 지남에 따라 해당 저장소를 반복해서 자동으로 동기화할 수 있습니다.
    • skopeo 와 같은 툴을 사용하여 소스 저장소에서 미러링된 저장소로 이미지를 수동으로 복사합니다.

      예를 들어, Red Hat Enterprise Linux(RHEL) 7 또는 RHEL 8 시스템에 skopeo RPM 패키지를 설치한 후 다음 예와 같이 skopeo 명령을 사용합니다.

      $ skopeo copy --all \
      docker://registry.access.redhat.com/ubi9/ubi-minimal:latest@sha256:5cf... \
      docker://example.io/example/ubi-minimal

      이 예제에는 example.io 라는 컨테이너 이미지 레지스트리가 있으며, registry.access.redhat.com 에서 ubi9/ubi-minimal 이미지를 복사할 example 이라는 이미지 저장소가 있습니다. 미러링된 레지스트리를 생성한 후 AWS 클러스터에서 Red Hat OpenShift Service를 구성하여 소스 저장소의 요청을 미러링된 저장소로 리디렉션할 수 있습니다.

  2. 다음 예제 중 하나를 사용하여 설치 후 미러 구성 CR을 생성합니다.

    • 필요에 따라 ImageDigestMirrorSet 또는 ImageTagMirrorSet CR을 생성하여 소스 및 미러를 자체 레지스트리 및 저장소 쌍과 이미지로 교체합니다.

      apiVersion: config.openshift.io/v1 1
      kind: ImageDigestMirrorSet 2
      metadata:
        name: ubi9repo
      spec:
        imageDigestMirrors: 3
        - mirrors:
          - example.io/example/ubi-minimal 4
          - example.com/example/ubi-minimal 5
          source: registry.access.redhat.com/ubi9/ubi-minimal 6
          mirrorSourcePolicy: AllowContactingSource 7
        - mirrors:
          - mirror.example.com/redhat
          source: registry.example.com/redhat 8
          mirrorSourcePolicy: AllowContactingSource
        - mirrors:
          - mirror.example.com
          source: registry.example.com 9
          mirrorSourcePolicy: AllowContactingSource
        - mirrors:
          - mirror.example.net/image
          source: registry.example.com/example/myimage 10
          mirrorSourcePolicy: AllowContactingSource
        - mirrors:
          - mirror.example.net
          source: registry.example.com/example 11
          mirrorSourcePolicy: AllowContactingSource
        - mirrors:
          - mirror.example.net/registry-example-com
          source: registry.example.com 12
          mirrorSourcePolicy: AllowContactingSource
      1
      이 CR과 함께 사용할 API를 나타냅니다. config.openshift.io/v1 이어야 합니다.
      2
      풀 유형에 따라 오브젝트의 종류를 나타냅니다.
      • ImageDigestMirrorSet: 다이제스트 참조 이미지를 가져옵니다.
      • ImageTagMirrorSet: 태그 참조 이미지를 가져옵니다.
      3
      이미지 가져오기 방법 유형을 나타냅니다.
      • imageDigestMirrors: ImageDigestMirrorSet CR에 사용합니다.
      • imageTagMirrors: ImageTagMirrorSet CR에 사용합니다.
      4
      미러링된 이미지 레지스트리 및 저장소의 이름을 나타냅니다.
      5
      선택 사항: 각 대상 저장소에 대한 보조 미러 저장소를 나타냅니다. 하나의 미러가 다운되면 대상 저장소에서 보조 미러를 사용할 수 있습니다.
      6
      이미지 가져오기 사양에서 참조되는 리포지토리인 레지스트리 및 리포지토리 소스를 나타냅니다.
      7
      선택 사항: 이미지 가져오기에 실패하는 경우 대체 정책을 표시합니다.
      • AllowContactingSource: 소스 저장소에서 이미지를 계속 가져올 수 있습니다. 이는 기본값입니다.
      • NeverContactSource: 소스 저장소에서 이미지를 가져 오는 지속적인 시도를 방지합니다.
      8
      선택 사항: 레지스트리 내부의 네임스페이스를 나타내며, 이를 통해 해당 네임스페이스의 이미지를 사용할 수 있습니다. 레지스트리 도메인을 소스로 사용하는 경우 오브젝트는 레지스트리의 모든 리포지토리에 적용됩니다.
      9
      선택 사항: 레지스트리를 나타내며, 레지스트리의 이미지를 사용할 수 있습니다. 레지스트리 이름을 지정하면 오브젝트가 소스 레지스트리의 모든 리포지토리에 적용됩니다.
      10
      미러 mirror.example.net/image@sha256:..에서 registry.example.com/example/myimage@sha256:…​ 이미지를 가져옵니다.
      11
      미러 mirror.example.net/image@sha256:…​에서 소스 레지스트리 네임스페이스에서 registry.example.com/example/image@sha256:…​ 이미지를 가져옵니다.
      12
      미러 레지스트리 example.net/registry-example-com/myimage@sha256:…​ 에서 registry.example.com/myimage@sha256 이미지를 가져옵니다.
    • ImageContentSourcePolicy 사용자 정의 리소스를 생성하여 소스 및 미러를 고유한 레지스트리 및 저장소 쌍 및 이미지로 교체합니다.

      apiVersion: operator.openshift.io/v1alpha1
      kind: ImageContentSourcePolicy
      metadata:
        name: mirror-ocp
      spec:
        repositoryDigestMirrors:
        - mirrors:
          - mirror.registry.com:443/ocp/release 1
          source: quay.io/openshift-release-dev/ocp-release 2
        - mirrors:
          - mirror.registry.com:443/ocp/release
          source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
      1
      미러 이미지 레지스트리 및 저장소의 이름을 지정합니다.
      2
      미러링된 콘텐츠가 포함된 온라인 레지스트리 및 저장소를 지정합니다.
  3. 새 오브젝트를 생성합니다.

    $ oc create -f registryrepomirror.yaml

    오브젝트가 생성되면 MCO(Machine Config Operator)는 ImageTagMirrorSet 오브젝트에 대해서만 노드를 드레이닝합니다. MCO는 ImageDigestMirrorSetImageContentSourcePolicy 개체에 대해 노드를 드레이닝하지 않습니다.

  4. 미러링된 구성 설정이 적용되었는지 확인하려면 노드 중 하나에서 다음을 수행하십시오.

    1. 노드를 나열합니다.

      $ oc get node

      출력 예

      NAME                           STATUS                     ROLES    AGE  VERSION
      ip-10-0-137-44.ec2.internal    Ready                      worker   7m   v1.30.3
      ip-10-0-138-148.ec2.internal   Ready                      master   11m  v1.30.3
      ip-10-0-139-122.ec2.internal   Ready                      master   11m  v1.30.3
      ip-10-0-147-35.ec2.internal    Ready                      worker   7m   v1.30.3
      ip-10-0-153-12.ec2.internal    Ready                      worker   7m   v1.30.3
      ip-10-0-154-10.ec2.internal    Ready                      master   11m  v1.30.3

    2. 디버깅 프로세스를 시작하고 노드에 액세스합니다.

      $ oc debug node/ip-10-0-147-35.ec2.internal

      출력 예

      Starting pod/ip-10-0-147-35ec2internal-debug ...
      To use host binaries, run `chroot /host`

    3. 루트 디렉토리를 /host 로 변경합니다.

      sh-4.2# chroot /host
    4. /etc/containers/registries.conf 파일을 체크하여 변경 사항이 적용되었는지 확인합니다.

      sh-4.2# cat /etc/containers/registries.conf

      다음 출력은 설치 후 미러 구성 CR이 적용된 registries.conf 파일을 나타냅니다. 마지막 두 항목은 각각 digest-onlytag-only 로 표시됩니다.

      출력 예

      unqualified-search-registries = ["registry.access.redhat.com", "docker.io"]
      short-name-mode = ""
      
      [[registry]]
        prefix = ""
        location = "registry.access.redhat.com/ubi9/ubi-minimal" 1
      
        [[registry.mirror]]
          location = "example.io/example/ubi-minimal" 2
          pull-from-mirror = "digest-only" 3
      
        [[registry.mirror]]
          location = "example.com/example/ubi-minimal"
          pull-from-mirror = "digest-only"
      
      [[registry]]
        prefix = ""
        location = "registry.example.com"
      
        [[registry.mirror]]
          location = "mirror.example.net/registry-example-com"
          pull-from-mirror = "digest-only"
      
      [[registry]]
        prefix = ""
        location = "registry.example.com/example"
      
        [[registry.mirror]]
          location = "mirror.example.net"
          pull-from-mirror = "digest-only"
      
      [[registry]]
        prefix = ""
        location = "registry.example.com/example/myimage"
      
        [[registry.mirror]]
          location = "mirror.example.net/image"
          pull-from-mirror = "digest-only"
      
      [[registry]]
        prefix = ""
        location = "registry.example.com"
      
        [[registry.mirror]]
          location = "mirror.example.com"
          pull-from-mirror = "digest-only"
      
      [[registry]]
        prefix = ""
        location = "registry.example.com/redhat"
      
        [[registry.mirror]]
          location = "mirror.example.com/redhat"
          pull-from-mirror = "digest-only"
      [[registry]]
        prefix = ""
        location = "registry.access.redhat.com/ubi9/ubi-minimal"
        blocked = true 4
      
        [[registry.mirror]]
          location = "example.io/example/ubi-minimal-tag"
          pull-from-mirror = "tag-only" 5

      1
      가져오기 사양에 참조되는 리포지토리를 나타냅니다.
      2
      해당 저장소에 대한 미러를 나타냅니다.
      3
      미러에서 이미지 가져오기가 다이제스트 참조 이미지임을 나타냅니다.
      4
      NeverContactSource 매개변수가 이 리포지토리에 설정되어 있음을 나타냅니다.
      5
      미러에서 이미지 가져오기가 태그 참조 이미지임을 나타냅니다.
    5. 소스에서 이미지를 노드로 가져와 미러링에 의해 해결되는지 확인합니다.

      sh-4.2# podman pull --log-level=debug registry.access.redhat.com/ubi9/ubi-minimal@sha256:5cf...

저장소 미러링 문제 해결

저장소 미러링 절차가 설명대로 작동하지 않는 경우 저장소 미러링 작동 방법에 대한 다음 정보를 사용하여 문제를 해결하십시오.

  • 가져온 이미지는 첫 번째 작동 미러를 사용하여 공급합니다.
  • 주요 레지스트리는 다른 미러가 작동하지 않는 경우에만 사용됩니다.
  • 시스템 컨텍스트에서 Insecure 플래그가 폴백으로 사용됩니다.
  • /etc/containers/registries.conf 파일 형식이 최근에 변경되었습니다. 현재 버전은 TOML 형식의 버전 2입니다.

9.3.2. 이미지 레지스트리 저장소 미러링을 위한 ICP( ImageContentSourcePolicy) 파일 변환

ICSP( ImageContentSourcePolicy ) 오브젝트를 사용하여 저장소 미러링을 구성하는 것은 더 이상 사용되지 않는 기능입니다. 이 기능은 여전히 AWS의 Red Hat OpenShift Service에 포함되어 있으며 계속 지원됩니다. 그러나 이 기능은 향후 릴리스에서 제거될 예정이므로 새 배포에는 사용하지 않는 것이 좋습니다.

ICSP 오브젝트는 저장소 미러링을 구성하기 위해 ImageDigestMirrorSetImageTagMirrorSet 개체로 교체됩니다. ImageContentSourcePolicy 개체를 생성하는 데 사용한 기존 YAML 파일이 있는 경우 oc adm migrate icsp 명령을 사용하여 해당 파일을 ImageDigestMirrorSet YAML 파일로 변환할 수 있습니다. 명령은 현재 버전으로 API를 업데이트하고, kind 값을 ImageDigestMirrorSet 로 변경하고, spec.repositoryDigestMirrorsspec.imageDigestMirrors 로 변경합니다. 파일의 나머지 부분은 변경되지 않습니다.

마이그레이션은 registries.conf 파일을 변경하지 않으므로 클러스터를 재부팅할 필요가 없습니다.

ImageDigestMirrorSet 또는 ImageTagMirrorSet 오브젝트에 대한 자세한 내용은 이전 섹션의 "이미지 레지스트리 저장소 미러링 설정"을 참조하십시오.

사전 요구 사항

  • dedicated-admin 역할의 사용자로 클러스터에 액세스합니다.
  • 클러스터에 ImageContentSourcePolicy 개체가 있는지 확인합니다.

프로세스

  1. 다음 명령을 사용하여 하나 이상의 ImageContentSourcePolicy YAML 파일을 ImageDigestMirrorSet YAML 파일로 변환합니다.

    $ oc adm migrate icsp <file_name>.yaml <file_name>.yaml <file_name>.yaml --dest-dir <path_to_the_directory>

    다음과 같습니다.

    <file_name>
    소스 ImageContentSourcePolicy YAML의 이름을 지정합니다. 여러 파일 이름을 나열할 수 있습니다.
    --dest-dir
    선택 사항: 출력 ImageDigestMirrorSet YAML의 디렉터리를 지정합니다. 설정되지 않으면 파일이 현재 디렉터리에 기록됩니다.

    예를 들어 다음 명령은 icsp.yamlicsp-2.yaml 파일을 변환하고 새 YAML 파일을 idms-files 디렉터리에 저장합니다.

    $ oc adm migrate icsp icsp.yaml icsp-2.yaml --dest-dir idms-files

    출력 예

    wrote ImageDigestMirrorSet to idms-files/imagedigestmirrorset_ubi8repo.5911620242173376087.yaml
    wrote ImageDigestMirrorSet to idms-files/imagedigestmirrorset_ubi9repo.6456931852378115011.yaml

  2. 다음 명령을 실행하여 CR 오브젝트를 생성합니다.

    $ oc create -f <path_to_the_directory>/<file-name>.yaml

    다음과 같습니다.

    <path_to_the_directory>
    --dest-dir 플래그를 사용한 경우 디렉터리의 경로를 지정합니다.
    <file_name>
    ImageDigestMirrorSet YAML의 이름을 지정합니다.
  3. IDMS 오브젝트가 롤아웃된 후 ICSP 오브젝트를 제거합니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.