9.2. 이미지 레지스트리 설정 구성

image.config.openshift.io/cluster 사용자 지정 리소스 (CR)를 편집하여 이미지 레지스트리 설정을 구성할 수 있습니다. MCO(Machine Config Operator)는 레지스트리에 대한 변경 사항이 있는지 image.config.openshift.io/cluster CR을 감시하고 변경 사항이 탐지되면 노드를 재부팅합니다.

절차

  1. 다음과 같이 project.config.openshift.io/cluster 사용자 정의 리소스를 편집합니다.

    $ oc edit image.config.openshift.io/cluster

    다음은 image.config.openshift.io/cluster CR의 예입니다.

    apiVersion: config.openshift.io/v1
    kind: Image 1
    metadata:
      annotations:
        release.openshift.io/create-only: "true"
      creationTimestamp: "2019-05-17T13:44:26Z"
      generation: 1
      name: cluster
      resourceVersion: "8302"
      selfLink: /apis/config.openshift.io/v1/images/cluster
      uid: e34555da-78a9-11e9-b92b-06d6c7da38dc
    spec:
      allowedRegistriesForImport: 2
        - domainName: quay.io
          insecure: false
      additionalTrustedCA: 3
        name: myconfigmap
      registrySources:4
        allowedRegistries:
        - example.com
        - quay.io
        - registry.redhat.io
        - image-registry.openshift-image-registry.svc:5000
        insecureRegistries:
        - insecure.com
    status:
      internalRegistryHostname: image-registry.openshift-image-registry.svc:5000
    1
    이미지: 이미지 처리 방법에 대한 클러스터 전체 정보가 들어 있습니다. 유일하게 유효한 정식 이름은 cluster입니다.
    2
    allowedRegistriesForImport: 일반 사용자가 이미지를 가져올 수 있는 컨테이너 이미지 레지스트리를 제한합니다. 이 목록은 유효한 이미지를 포함한다고 신뢰할 수 있으며 애플리케이션을 가져올 수 있도록 하려는 레지스트리로 설정합니다. 이미지를 생성할 권한이 있는 사용자 또는 API의 ImageStreamMappings는 이 정책의 영향을 받지 않습니다. 일반적으로 클러스터 관리자에게만 적절한 권한이 있습니다.
    3
    additionalTrustedCA: 이미지 스트림 가져오기, Pod 이미지 가져오기, openshift-image-registry 풀스루 및 빌드 중에 신뢰할 수 있는 추가 CA(인증 기관)가 포함된 구성 맵에 대한 참조입니다. 이 구성 맵의 네임스페이스는 openshift-config입니다. 구성 맵 형식에서는 신뢰할 추가 레지스트리 CA마다 레지스트리 호스트 이름을 키로 사용하고 PEM 인증서를 값으로 사용합니다.
    4
    registrySources: 빌드 및 포드 이미지에 액세스할 때 컨테이너 런타임에서 개별 레지스트리를 허용하는지 또는 차단하는지 여부를 결정하는 구성이 포함되어 있습니다. allowedRegistries 매개변수 또는 blockedRegistries 매개변수 중 하나를 설정할 수 있지만 둘 다 설정할 수는 없습니다. 비보안 레지스트리에 대한 액세스를 허용할지 여부를 정의할 수도 있습니다. 이 예에서는 사용할 수 있는 레지스트리를 정의하는 allowedRegistries 매개변수를 사용합니다. 비보안 레지스트리 insecure.com 도 허용됩니다. registrySources paramter에는 내부 클러스터 레지스트리에 대한 구성이 포함되어 있지 않습니다.
    참고

    allowedRegistries 매개변수가 정의되면 명시적으로 나열되지 않은 경우 registry.redhat.io, quay.io 레지스트리 및 기본 내부 이미지 레지스트리를 포함한 모든 레지스트리가 차단됩니다. 이 매개변수를 사용하는 경우 Pod 실패를 방지하기 위해 registry.redhat.ioquay.io 레지스트리와 internalRegistryHostname 을 환경의 페이로드 이미지에서 필요하므로 allowedRegistries 목록에 추가해야 합니다. registry.redhat.ioquay.io 레지스트리를 blockedRegistries 목록에 추가하지 마십시오.

    가능한 보안 위험을 줄이려면 안전하지 않은 외부 레지스트리의 사용을 피해야합니다.

  2. 변경 사항이 적용되었는지 확인하려면 노드를 나열합니다.

    $ oc get nodes

    출력 예

    NAME                                       STATUS                     ROLES    AGE   VERSION
    ci-ln-j5cd0qt-f76d1-vfj5x-master-0         Ready                         master   98m   v1.19.0+7070803
    ci-ln-j5cd0qt-f76d1-vfj5x-master-1         Ready,SchedulingDisabled      master   99m   v1.19.0+7070803
    ci-ln-j5cd0qt-f76d1-vfj5x-master-2         Ready                         master   98m   v1.19.0+7070803
    ci-ln-j5cd0qt-f76d1-vfj5x-worker-b-nsnd4   Ready                         worker   90m   v1.19.0+7070803
    ci-ln-j5cd0qt-f76d1-vfj5x-worker-c-5z2gz   NotReady,SchedulingDisabled   worker   90m   v1.19.0+7070803
    ci-ln-j5cd0qt-f76d1-vfj5x-worker-d-stsjv   Ready                         worker   90m   v1.19.0+7070803

9.2.1. 특정 레지스트리 추가

image.config.openshift.io/cluster CR(사용자 지정 리소스)를 편집하여 이미지 풀 및 푸시 작업에 허용되는 레지스트리 목록을 추가할 수 있습니다. OpenShift Container Platform은 이 CR에 대한 변경 사항을 클러스터의 모든 노드에 적용합니다.

이미지를 풀하거나 푸시할 때 컨테이너 런타임은 image.config.openshift.io/cluster CR에서 registrySources 매개변수 아래에 나열된 레지스트리를 검색합니다. allowedRegistries 매개변수 아래에 레지스트리 목록을 생성한 경우 컨테이너 런타임은 해당 레지스트리만 검색합니다. 목록에 없는 레지스트리는 차단됩니다.

주의

allowedRegistries 매개변수가 정의되면 명시적으로 나열되지 않은 경우 registry.redhat.io, quay.io 레지스트리 및 기본 내부 이미지 레지스트리를 포함한 모든 레지스트리가 차단됩니다. 이 매개변수를 사용하는 경우 Pod 실패를 방지하기 위해 환경의 페이로드 이미지에서 필요한 registry .redhat.io 및 quay.io 레지스트리 및 internalRegistryHostnameallowedRegistries 목록에 추가합니다. 연결 해제된 클러스터의 경우 미러 레지스트리도 추가해야 합니다.

절차

  1. 다음과 같이 project.config.openshift.io/cluster CR을 편집합니다.

    $ oc edit image.config.openshift.io/cluster

    다음은 허용 목록을 포함한 image.config.openshift.io/cluster CR의 예입니다.

    apiVersion: config.openshift.io/v1
    kind: Image
    metadata:
      annotations:
        release.openshift.io/create-only: "true"
      creationTimestamp: "2019-05-17T13:44:26Z"
      generation: 1
      name: cluster
      resourceVersion: "8302"
      selfLink: /apis/config.openshift.io/v1/images/cluster
      uid: e34555da-78a9-11e9-b92b-06d6c7da38dc
    spec:
      registrySources: 1
        allowedRegistries: 2
        - example.com
        - quay.io
        - registry.redhat.io
    status:
      internalRegistryHostname: image-registry.openshift-image-registry.svc:5000
    1
    registrySources: 빌드 및 pod 이미지에 액세스하는 경우 컨테이너 런타임에서 개별 레지스트리를 처리하는 방법을 결정할 구성이 포함되어 있습니다. 내부 클러스터 레지스트리에 대한 구성은 포함되어 있지 않습니다.
    2
    allowedRegistries: 이미지 풀 및 푸시 작업에 사용할 레지스트리입니다. 다른 모든 레지스트리는 차단됩니다.
    참고

    allowedRegistries 매개변수 또는 blockedRegistries 매개변수 중 하나를 설정할 수 있지만 둘 다 설정할 수는 없습니다.

    MCO(Machine Config Operator)는 레지스트리에 대한 변경 사항이 있는지 image.config.openshift.io/cluster CR을 감시하고 변경 사항이 탐지되면 노드를 재부팅합니다. 허용되는 레지스트리를 변경하면 각 노드의 /host/etc/containers/policy.json 파일에서 이미지 서명 정책을 생성하거나 업데이트합니다.

  2. 레지스트리가 정책 파일에 추가되었는지 확인하려면 노드에서 다음 명령을 사용하십시오.

    $ cat /host/etc/containers/policy.json

    다음 정책은 example.com, quay.io 및 registry.redhat.io 레지스트리의 이미지만 이미지 풀 및 푸시할 수 있음을 나타냅니다.

    예 9.1. 이미지 서명 정책 파일 예

    {
       "default":[
          {
             "type":"reject"
          }
       ],
       "transports":{
          "atomic":{
             "example.com":[
                {
                   "type":"insecureAcceptAnything"
                }
             ],
             "image-registry.openshift-image-registry.svc:5000":[
                {
                   "type":"insecureAcceptAnything"
                }
             ],
             "insecure.com":[
                {
                   "type":"insecureAcceptAnything"
                }
             ],
             "quay.io":[
                {
                   "type":"insecureAcceptAnything"
                }
             ],
             "reg4.io/myrepo/myapp:latest":[
                {
                   "type":"insecureAcceptAnything"
                }
             ],
             "registry.redhat.io":[
                {
                   "type":"insecureAcceptAnything"
                }
             ]
          },
          "docker":{
             "example.com":[
                {
                   "type":"insecureAcceptAnything"
                }
             ],
             "image-registry.openshift-image-registry.svc:5000":[
                {
                   "type":"insecureAcceptAnything"
                }
             ],
             "insecure.com":[
                {
                   "type":"insecureAcceptAnything"
                }
             ],
             "quay.io":[
                {
                   "type":"insecureAcceptAnything"
                }
             ],
             "reg4.io/myrepo/myapp:latest":[
                {
                   "type":"insecureAcceptAnything"
                }
             ],
             "registry.redhat.io":[
                {
                   "type":"insecureAcceptAnything"
                }
             ]
          },
          "docker-daemon":{
             "":[
                {
                   "type":"insecureAcceptAnything"
                }
             ]
          }
       }
    }
참고

클러스터에서 registrySources.insecureRegistries 매개변수를 사용하는 경우 비보안 레지스트리가 허용 목록에 포함되어 있는지 확인합니다.

예를 들면 다음과 같습니다.

spec:
  registrySources:
    insecureRegistries:
    - insecure.com
    allowedRegistries:
    - example.com
    - quay.io
    - registry.redhat.io
    - insecure.com
    - image-registry.openshift-image-registry.svc:5000