9.2. 이미지 레지스트리 설정 구성
image.config.openshift.io/cluster
사용자 지정 리소스 (CR)를 편집하여 이미지 레지스트리 설정을 구성할 수 있습니다. 레지스트리 변경 사항이 image.config.openshift.io/cluster
CR에 적용되는 경우 MCO(Machine Config Operator)는 다음과 같은 순차적 작업을 수행합니다.
- 노드 차단
- CRI-O를 다시 시작하여 변경 사항 적용
노드 차단 해제
참고MCO는 변경 사항을 감지하면 노드를 재시작하지 않습니다.
프로세스
다음과 같이
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 - reg1.io/myrepo/myapp:latest insecureRegistries: - insecure.com status: internalRegistryHostname: image-registry.openshift-image-registry.svc:5000
- 1
Image
: 이미지 처리 방법에 대한 클러스터 전체 정보가 들어 있습니다. 유일하게 유효한 정식 이름은cluster
입니다.- 2
allowedRegistriesForImport
: 일반 사용자가 이미지를 가져올 수 있는 컨테이너 이미지 레지스트리를 제한합니다. 이 목록은 유효한 이미지를 포함한다고 신뢰할 수 있으며 애플리케이션을 가져올 수 있도록 하려는 레지스트리로 설정합니다. 이미지를 생성할 권한이 있는 사용자 또는 API의ImageStreamMappings
는 이 정책의 영향을 받지 않습니다. 일반적으로 클러스터 관리자에게만 적절한 권한이 있습니다.- 3
additionalTrustedCA
: 이미지 스트림 가져오기, pod 이미지 가져오기,openshift-image-registry
풀스루 및 빌드 중에 신뢰해야 하는 추가 CA (인증 기관)가 포함된 구성 맵에 대한 참조입니다. 이 구성 맵의 네임스페이스는openshift-config
입니다. 구성 맵 형식에서는 신뢰할 추가 레지스트리 CA마다 레지스트리 호스트 이름을 키로 사용하고 PEM 인증서를 값으로 사용합니다.- 4
registrySources
: 빌드 및 pod 이미지에 액세스할 때 컨테이너 런타임에서 개별 레지스트리를 허용하는지 여부를 결정하는 구성이 포함되어 있습니다.allowedRegistries
매개변수 또는blockedRegistries
매개변수 중 하나를 설정할 수 있지만 둘 다 설정할 수는 없습니다. 이미지 단축 이름을 사용하는 레지스트리를 허용하는 비보안 레지스트리 또는 레지스트리에 대한 액세스를 허용할지 여부를 정의할 수도 있습니다. 이 예에서는 사용할 수 있는 레지스트리를 정의하는allowedRegistries
매개변수를 사용합니다. 비보안 레지스트리insecure.com
도 허용됩니다.registrySources
매개변수에 내부 클러스터 레지스트리에 대한 구성이 포함되어 있지 않습니다.
참고allowedRegistries
매개변수가 정의되면 명시적으로 나열되지 않은 경우 registry.redhat.io 및 quay.io 레지스트리 및 기본 OpenShift 이미지 레지스트리를 포함한 모든 레지스트리가 차단됩니다. 이 매개변수를 사용하는 경우 Pod 실패를 방지하기 위해 환경의 페이로드 이미지에서 필요한registry.redhat.io
및quay.io
레지스트리와internalRegistryHostname
을allowedRegistries
목록에 추가해야 합니다.registry.redhat.io
및quay.io
레지스트리를blockedRegistries
목록에 추가하지 마십시오.allowedRegistries
,blockedRegistries
또는insecureRegistries
매개변수를 사용하는 경우 레지스트리 내에서 개별 리포지토리를 지정할 수 있습니다. 예:reg1.io/myrepo/myapp:latest
.가능한 보안 위험을 줄이려면 안전하지 않은 외부 레지스트리의 사용을 피해야합니다.
변경 사항이 적용되었는지 확인하려면 노드를 나열합니다.
$ oc get nodes
출력 예
NAME STATUS ROLES AGE VERSION ip-10-0-137-182.us-east-2.compute.internal Ready,SchedulingDisabled worker 65m v1.30.3 ip-10-0-139-120.us-east-2.compute.internal Ready,SchedulingDisabled control-plane 74m v1.30.3 ip-10-0-176-102.us-east-2.compute.internal Ready control-plane 75m v1.30.3 ip-10-0-188-96.us-east-2.compute.internal Ready worker 65m v1.30.3 ip-10-0-200-59.us-east-2.compute.internal Ready worker 63m v1.30.3 ip-10-0-223-123.us-east-2.compute.internal Ready control-plane 73m v1.30.3
9.2.1. 특정 레지스트리 추가
image.config.openshift.io/cluster
사용자 정의 리소스(CR)를 편집하여 이미지 가져오기 및 푸시 작업에 허용되는 레지스트리 목록을 추가할 수 있습니다. AWS의 Red Hat OpenShift Service는 이 CR에 변경 사항을 클러스터의 모든 노드에 적용합니다.
이미지를 풀하거나 푸시할 때 컨테이너 런타임은 image.config.openshift.io/cluster
CR에서 registrySources
매개변수 아래에 나열된 레지스트리를 검색합니다. allowedRegistries
매개변수 아래에 레지스트리 목록을 생성한 경우 컨테이너 런타임은 해당 레지스트리만 검색합니다. 목록에 없는 레지스트리는 차단됩니다.
allowedRegistries
매개변수가 정의되면 명시적으로 나열되지 않은 경우 registry.redhat.io
및 quay.io
레지스트리 및 기본 OpenShift 이미지 레지스트리를 포함한 모든 레지스트리가 차단됩니다. 이 매개변수를 사용하는 경우 Pod 실패를 방지하기 위해 사용자 환경의 페이로드 이미지에서 필요한 registry.redhat.io
및 quay.io
레지스트리와 internalRegistryHostname
을 allowedRegistries
목록에 추가합니다. 연결 해제된 클러스터의 경우 미러 레지스트리도 추가해야 합니다.
프로세스
다음과 같이
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 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 - reg1.io/myrepo/myapp:latest - image-registry.openshift-image-registry.svc:5000 status: internalRegistryHostname: image-registry.openshift-image-registry.svc:5000
참고allowedRegistries
매개변수 또는blockedRegistries
매개변수 중 하나를 설정할 수 있지만 둘 다 설정할 수는 없습니다.MCO(Machine Config Operator)는
image.config.openshift.io/cluster
리소스를 통해 레지스트리에 대한 변경 사항을 확인합니다. MCO가 변경사항을 감지하면 노드를 비우고, 변경 사항을 적용한 다음 노드를 분리합니다. 노드가Ready
상태가 되면 허용되는 레지스트리 목록을 사용하여 각 노드의/etc/containers/policy.json
파일에서 이미지 서명 정책을 업데이트합니다.
클러스터에서 registrySources.insecureRegistries
매개변수를 사용하는 경우 비보안 레지스트리가 허용 목록에 포함되어 있는지 확인합니다.
예를 들면 다음과 같습니다.
spec: registrySources: insecureRegistries: - insecure.com allowedRegistries: - example.com - quay.io - registry.redhat.io - insecure.com - image-registry.openshift-image-registry.svc:5000
9.2.2. 특정 레지스트리 차단
image.config.openshift.io/cluster
CR(사용자 정의 리소스)을 편집하여 레지스트리 내의 모든 레지스트리를 차단할 수 있습니다. AWS의 Red Hat OpenShift Service는 이 CR에 변경 사항을 클러스터의 모든 노드에 적용합니다.
이미지를 풀하거나 푸시할 때 컨테이너 런타임은 image.config.openshift.io/cluster
CR에서 registrySources
매개변수 아래에 나열된 레지스트리를 검색합니다. blockedRegistries
매개변수 아래에 레지스트리 목록을 생성한 경우 컨테이너 런타임에서 해당 레지스트리를 검색하지 않습니다. 다른 모든 레지스트리는 허용됩니다.
Pod 실패를 방지하려면 사용자 환경의 페이로드 이미지에서 필요한 registry.redhat.io
및 quay.io
레지스트리를 blockedRegistries
목록에 추가하지 마십시오.
프로세스
다음과 같이
project.config.openshift.io/cluster
사용자 정의 리소스를 편집합니다.$ oc edit image.config.openshift.io/cluster
다음은 차단 목록이 포함된
image.config.openshift.io/cluster
리소스의 예입니다.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 blockedRegistries: 2 - untrusted.com - reg1.io/myrepo/myapp:latest status: internalRegistryHostname: image-registry.openshift-image-registry.svc:5000
참고blockedRegistries
레지스트리 또는allowedRegistries
레지스트리 중 하나를 설정할 수 있지만 둘 다 설정할 수는 없습니다.MCO(Machine Config Operator)는
image.config.openshift.io/cluster
리소스를 통해 레지스트리에 대한 변경 사항을 확인합니다. MCO가 변경사항을 감지하면 노드를 비우고, 변경 사항을 적용한 다음 노드를 분리합니다. 노드가Ready
상태가 되면 차단된 레지스트리에 대한 변경이 각 노드의/etc/containers/registries.conf
파일에 표시됩니다.
9.2.3. 안전하지 않은 레지스트리 허용
image.config.openshift.io/cluster
사용자 정의 리소스(CR)를 편집하여 비보안 레지스트리를 추가하거나 선택적으로 레지스트리 내에 개별 저장소를 추가할 수 있습니다. AWS의 Red Hat OpenShift Service는 이 CR에 변경 사항을 클러스터의 모든 노드에 적용합니다.
유효한 SSL 인증서를 사용하지 않거나 HTTPS 연결이 필요하지 않은 레지스트리는 안전하지 않은 레지스트리로 간주됩니다.
가능한 보안 위험을 줄이려면 안전하지 않은 외부 레지스트리의 사용을 피해야합니다.
프로세스
다음과 같이
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 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 insecureRegistries: 2 - insecure.com - reg4.io/myrepo/myapp:latest allowedRegistries: - example.com - quay.io - registry.redhat.io - insecure.com 3 - reg4.io/myrepo/myapp:latest - image-registry.openshift-image-registry.svc:5000 status: internalRegistryHostname: image-registry.openshift-image-registry.svc:5000
참고allowedRegistries
매개변수가 정의되면 명시적으로 나열되지 않은 경우 registry.redhat.io 및 quay.io 레지스트리 및 기본 OpenShift 이미지 레지스트리를 포함한 모든 레지스트리가 차단됩니다. 이 매개변수를 사용하면 Pod 실패를 방지하기 위해 사용자 환경의 페이로드 이미지에서 필요한registry.redhat.io
및quay.io
레지스트리와internalRegistryHostname
을 포함하여 모든 레지스트리를allowedRegistries
목록에 추가합니다. 연결 해제된 클러스터의 경우 미러 레지스트리도 추가해야 합니다.MCO(Machine Config Operator)는 레지스트리에 대한 변경 사항이 있는지
image.config.openshift.io/cluster
CR를 감시하고 변경 사항이 탐지되면 노드를 비우고 차단을 해제합니다. 노드가Ready
상태가 되면 안전하지 않고 차단된 레지스트리에 대한 변경이 각 노드의/etc/containers/registries.conf
파일에 표시됩니다.
9.2.4. 이미지의 단축 이름을 허용하는 레지스트리 추가
image.config.openshift.io/cluster
사용자 정의 리소스(CR)를 편집하여 이미지의 단축 이름을 검색하기 위해 레지스트리를 추가할 수 있습니다. AWS의 Red Hat OpenShift Service는 이 CR에 변경 사항을 클러스터의 모든 노드에 적용합니다.
이미지 단축 이름을 사용하면 가져오기 사양에 정규화된 도메인 이름을 포함하지 않고도 이미지를 검색할 수 있습니다. 예를 들어 registry.access.redhat.com/rhe7/etcd
대신 rhel7/etcd
를 사용할 수 있습니다.
전체 경로를 사용하지 않는 경우 단축 이름을 사용할 수 있습니다. 예를 들어, 클러스터가 DNS가 자주 변경되는 여러 내부 레지스트리를 참조하는 경우 각 변경에 따라 풀 사양에서 정규화된 도메인 이름을 업데이트해야 합니다. 이 경우 이미지 단축 이름을 사용하는 것이 유용할 수 있습니다.
이미지를 풀하거나 푸시할 때 컨테이너 런타임은 image.config.openshift.io/cluster
CR에서 registrySources
매개변수 아래에 나열된 레지스트리를 검색합니다. containerRuntimeSearchRegistries
매개변수 아래에 레지스트리 목록을 생성한 경우, 단축 이름으로 이미지를 가져오면 컨테이너 런타임에서 해당 레지스트리를 검색합니다.
공용 레지스트리에 인증이 필요한 경우 이미지가 배포되지 않을 수 있으므로 공용 레지스트리에서 이미지 단축 이름을 사용하는 것이 좋습니다. 공용 레지스트리와 함께 정규화된 이미지 이름을 사용합니다.
Red Hat 내부 또는 개인 레지스트리는 일반적으로 이미지의 단축 이름을 사용할 수 있습니다.
containerRuntimeSearchRegistries
매개변수( registry.redhat.io
,docker.io
및 quay.io
레지스트리 포함) 아래에 공용 레지스트리를 나열하는 경우 목록의 모든 레지스트리에 인증 정보를 노출하고 네트워크 및 레지스트리 공격이 발생할 위험이 있습니다. 글로벌 풀 시크릿에 정의된 대로 이미지를 가져오기 위해 하나의 풀 시크릿만 있을 수 있으므로 해당 시크릿은 해당 목록의 모든 레지스트리에 대해 인증하는 데 사용됩니다. 따라서 목록에 공용 레지스트리를 포함하는 경우 보안 위험이 발생합니다.
각 공개 레지스트리에 다른 인증 정보가 필요하고 클러스터에 글로벌 풀 시크릿의 공개 레지스트리가 나열되지 않는 경우 containerRuntimeSearchRegistries
매개변수 아래에 여러 개의 공용 레지스트리를 나열할 수 없습니다.
인증이 필요한 퍼블릭 레지스트리의 경우 레지스트리에 글로벌 풀 시크릿에 저장된 인증 정보가 있는 경우에만 이미지의 단축 이름을 사용할 수 있습니다.
MCO(Machine Config Operator)는 image.config.openshift.io/cluster
리소스를 통해 레지스트리에 대한 변경 사항을 확인합니다. MCO가 변경사항을 감지하면 노드를 비우고, 변경 사항을 적용한 다음 노드를 분리합니다. 노드가 Ready
상태가 된 후 containerRuntimeSearchRegistries
매개변수가 추가되면 MCO가 나열된 레지스트리를 사용하여 각 노드에 /etc/containers/registries.conf.d
디렉터리에 파일을 생성합니다. 파일은 /etc/containers/registries.conf
파일의 정규화되지 않은 검색 레지스트리 목록을 덮어씁니다. 정규화되지 않은 검색 레지스트리의 기본 목록으로 돌아갈 수 없습니다.
containerRuntimeSearchRegistries
매개변수는 Podman 및 CRI-O 컨테이너 엔진에서만 작동합니다. 목록의 레지스트리는 빌드 및 이미지 스트림에서 아닌 Pod 사양에서만 사용할 수 있습니다.
프로세스
다음과 같이
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 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: - domainName: quay.io insecure: false additionalTrustedCA: name: myconfigmap registrySources: containerRuntimeSearchRegistries: 1 - reg1.io - reg2.io - reg3.io allowedRegistries: 2 - example.com - quay.io - registry.redhat.io - reg1.io - reg2.io - reg3.io - image-registry.openshift-image-registry.svc:5000 ... status: internalRegistryHostname: image-registry.openshift-image-registry.svc:5000
참고allowedRegistries
매개변수가 정의되면 명시적으로 나열되지 않은 경우registry.redhat.io
및quay.io
레지스트리 및 기본 OpenShift 이미지 레지스트리를 포함한 모든 레지스트리가 차단됩니다. 이 매개변수를 사용하는 경우 Pod 실패를 방지하기 위해 사용자 환경의 페이로드 이미지에서 필요한registry.redhat.io
및quay.io
레지스트리와internalRegistryHostname
을allowedRegistries
목록에 포함한 모든 레지스트리를 추가합니다. 연결 해제된 클러스터의 경우 미러 레지스트리도 추가해야 합니다.
9.2.5. 이미지 레지스트리 액세스를 위한 추가 신뢰 저장소 구성
image.config.openshift.io/cluster
사용자 지정 리소스에는 이미지 레지스트리 액세스 중에 신뢰할 수 있는 추가 인증 기관이 포함된 구성 맵에 대한 참조가 포함될 수 있습니다.
사전 요구 사항
- 인증 기관(CA)은 PEM으로 인코딩되어야 합니다.
프로세스
openshift-config
네임 스페이스에 구성 맵을 만들고 image.config.openshift.io
사용자 지정 리소스에서 AdditionalTrustedCA
의 해당 이름을 사용하여 외부 레지스트리에 연결할 때 신뢰할 수있는 추가 CA를 제공할 수 있습니다.
구성 맵 키는 이 CA가 신뢰할 수있는 포트가 있는 레지스트리의 호스트 이름이며 PEM 인증서 콘텐츠는 신뢰할 수 있는 각 추가 레지스트리 CA의 값입니다.
이미지 레지스트리 CA 구성 맵의 예
apiVersion: v1
kind: ConfigMap
metadata:
name: my-registry-ca
data:
registry.example.com: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
registry-with-port.example.com..5000: | 1
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
- 1
- 레지스트리에
registry-with-port.example.com:5000
같은 포트가 있는 경우:
이..
로 교체되어야 합니다.
다음 절차에 따라 추가 CA를 구성할 수 있습니다.
추가 CA를 구성하려면 다음을 실행합니다.
$ oc create configmap registry-config --from-file=<external_registry_address>=ca.crt -n openshift-config
$ oc edit image.config.openshift.io cluster
spec: additionalTrustedCA: name: registry-config