9.3. 이미지 레지스트리 설정 구성
image.config.openshift.io/cluster 사용자 지정 리소스 (CR)를 편집하여 이미지 레지스트리 설정을 구성할 수 있습니다.
프로세스
다음 명령을 실행하여
image.config.openshift.io/clusterCR을 편집합니다.$ oc edit image.config.openshift.io/cluster다음은
image.config.openshift.io/clusterCR의 예입니다.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: 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참고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.32.3 ip-10-0-139-120.us-east-2.compute.internal Ready,SchedulingDisabled control-plane 74m v1.32.3 ip-10-0-176-102.us-east-2.compute.internal Ready control-plane 75m v1.32.3 ip-10-0-188-96.us-east-2.compute.internal Ready worker 65m v1.32.3 ip-10-0-200-59.us-east-2.compute.internal Ready worker 63m v1.32.3 ip-10-0-223-123.us-east-2.compute.internal Ready control-plane 73m v1.32.3
9.3.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 및 기본 OpenShift 이미지 레지스트리를 포함한 모든 레지스트리는 명시적으로 나열되지 않는 한 차단됩니다. 페이로드 이미지에 필요한 모든 레지스트리를 allowedRegistries 목록에 추가해야 합니다. 예를 들어 registry.redhat.io , quay.io 및 internalRegistryHostname 레지스트리를 나열합니다. 연결이 끊긴 클러스터의 경우 미러 레지스트리도 추가해야 합니다. 그렇지 않으면 포드가 고장날 위험이 있습니다.
프로세스
다음 명령을 실행하여
image.config.openshift.io/cluster사용자 지정 리소스를 편집합니다.$ oc edit image.config.openshift.io/cluster다음은 허용 목록을 포함한
image.config.openshift.io/clusterCR의 예입니다.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: allowedRegistries: - 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구성을 업데이트한 후 다음 명령을 실행하여 노드를 나열합니다.
$ oc get nodes출력 예
NAME STATUS ROLES AGE VERSION <node_name> Ready control-plane,master 37m v1.27.8+4fab27b다음 명령을 실행하여 노드에서 디버그 모드로 들어갑니다.
$ oc debug node/<node_name><node_name>을 노드 이름으로 바꾸세요.
메시지가 표시되면 터미널에
chroot /host를입력하세요.sh-4.4# chroot /host
검증
다음 명령을 실행하여 레지스트리가 정책 파일에 있는지 확인하세요.
sh-5.1# cat /etc/containers/policy.json | jq '.'다음 정책은
example.com,quay.io,registry.redhat.io레지스트리의 이미지만 이미지 풀 및 푸시에 액세스할 수 있음을 나타냅니다.이미지 서명 정책 파일 예
{ "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
9.3.2. 특정 레지스트리 차단 링크 복사링크가 클립보드에 복사되었습니다!
image.config.openshift.io/cluster 사용자 정의 리소스(CR)를 편집하여 레지스트리 내의 모든 레지스트리 또는 개별 저장소를 차단할 수 있습니다.
OpenShift Container Platform은 이 CR에 대한 변경 사항을 클러스터의 모든 노드에 적용합니다.
이미지를 풀하거나 푸시할 때 컨테이너 런타임은 image.config.openshift.io/cluster CR에서 registrySources 매개변수 아래에 나열된 레지스트리를 검색합니다. blockedRegistries 매개변수 아래에 레지스트리 목록을 생성한 경우 컨테이너 런타임에서 해당 레지스트리를 검색하지 않습니다. 다른 모든 레지스트리는 허용됩니다.
포드 실패를 방지하려면 registry.redhat.io 및 quay.io 레지스트리를 blockedRegistries 목록에 추가하지 마세요. 사용자 환경 내의 페이로드 이미지는 이러한 레지스트리에 액세스해야 합니다.
프로세스
다음 명령을 실행하여
image.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: blockedRegistries: - untrusted.com - reg1.io/myrepo/myapp:latest status: internalRegistryHostname: image-registry.openshift-image-registry.svc:5000blockedRegistries와allowedRegistries매개변수를 동시에 설정할 수는 없습니다. 둘 중 하나를 선택해야 합니다.다음 명령을 실행하여 노드 목록을 가져옵니다.
$ oc get nodes출력 예
NAME STATUS ROLES AGE VERSION <node_name> Ready control-plane,master 37m v1.27.8+4fab27b다음 명령을 실행하여 노드에서 디버그 모드를 시작합니다.
$ oc debug node/<node_name><node_name>을 세부 정보를 알고 싶은 노드의 이름으로 바꾸세요.
메시지가 표시되면 터미널에
chroot /host를입력하세요.sh-4.4# chroot /host
검증
다음 명령을 실행하여 레지스트리가 정책 파일에 있는지 확인하세요.
sh-5.1# cat etc/containers/registries.conf다음 예는
untrusted.com레지스트리의 이미지가 이미지 풀링 및 푸시에서 차단되었음을 나타냅니다.출력 예
unqualified-search-registries = ["registry.access.redhat.com", "docker.io"] [[registry]] prefix = "" location = "untrusted.com" blocked = true
9.3.3. 페이로드 레지스트리 차단 링크 복사링크가 클립보드에 복사되었습니다!
미러링 구성에서는 ImageContentSourcePolicy (ICSP) 객체를 사용하여 연결이 끊긴 환경에서 업스트림 페이로드 레지스트리를 차단할 수 있습니다. 다음 예제 절차에서는 quay.io/openshift- payload 페이로드 레지스트리를 차단하는 방법을 보여줍니다.
프로세스
ICSP(
ImageContentSourcePolicy) 오브젝트를 사용하여 미러 구성을 생성하여 인스턴스의 레지스트리에 페이로드를 미러링합니다. 다음 예제 ICSP 파일은internal-mirror.io/openshift-payload를 미러링합니다.apiVersion: operator.openshift.io/v1alpha1 kind: ImageContentSourcePolicy metadata: name: my-icsp spec: repositoryDigestMirrors: - mirrors: - internal-mirror.io/openshift-payload source: quay.io/openshift-payload개체가 노드에 배포된 후
/etc/containers/registries.conf사용자 정의 리소스(CR)를 확인하여 미러 구성이 설정되었는지 확인합니다.출력 예
[[registry]] prefix = "" location = "quay.io/openshift-payload" mirror-by-digest-only = true [[registry.mirror]] location = "internal-mirror.io/openshift-payload"다음 명령을 사용하여
image.config.openshift.ioCR을 편집합니다.$ oc edit image.config.openshift.io cluster페이로드 레지스트리를 차단하려면
image.config.openshift.ioCR에 다음 구성을 추가하세요.spec: registrySources: blockedRegistries: - quay.io/openshift-payload
검증
노드에서
/etc/containers/registries.conf파일을 확인하여 업스트림 페이로드 레지스트리가 차단되었는지 확인합니다./etc/containers/registries.conf파일 예시[[registry]] prefix = "" location = "quay.io/openshift-payload" blocked = true mirror-by-digest-only = true [[registry.mirror]] location = "internal-mirror.io/openshift-payload"
9.3.4. 안전하지 않은 레지스트리 허용 링크 복사링크가 클립보드에 복사되었습니다!
image.config.openshift.io/cluster 사용자 정의 리소스(CR)를 편집하여 레지스트리 내에 안전하지 않은 레지스트리나 개별 저장소를 추가할 수 있습니다.
OpenShift Container Platform은 이 CR에 대한 변경 사항을 클러스터의 모든 노드에 적용합니다. 유효한 SSL 인증서를 사용하지 않거나 HTTPS 연결이 필요하지 않은 레지스트리는 안전하지 않은 레지스트리로 간주됩니다.
보안 위험을 줄이려면 안전하지 않은 외부 레지스트리를 피하세요.
+ :leveloffset: +1
allowedRegistries 매개변수를 정의하면 registry.redhat.io , quay.io 및 기본 OpenShift 이미지 레지스트리를 포함한 모든 레지스트리는 명시적으로 나열되지 않는 한 차단됩니다. 페이로드 이미지에 필요한 모든 레지스트리를 allowedRegistries 목록에 추가해야 합니다. 예를 들어 registry.redhat.io , quay.io 및 internalRegistryHostname 레지스트리를 나열합니다. 연결이 끊긴 클러스터의 경우 미러 레지스트리도 추가해야 합니다. 그렇지 않으면 포드가 고장날 위험이 있습니다.
프로세스
다음 명령을 실행하여
image.config.openshift.io/cluster사용자 정의 리소스(CR)를 편집합니다.$ oc edit image.config.openshift.io/cluster다음은 안전하지 않은 레지스트리 목록이있는
image.config.openshift.io/clusterCR의 예입니다.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: insecureRegistries: - insecure.com - reg4.io/myrepo/myapp:latest allowedRegistries: - example.com - quay.io - registry.redhat.io - insecure.com - reg4.io/myrepo/myapp:latest - image-registry.openshift-image-registry.svc:5000 status: internalRegistryHostname: image-registry.openshift-image-registry.svc:5000
검증
다음 명령을 노드에서 실행하여 레지스트리가 정책 파일에 추가되었는지 확인하세요.
$ cat /etc/containers/registries.conf다음 예는
insecure.com레지스트리의 이미지가 안전하지 않으며 이미지 풀링과 푸시가 허용된다는 것을 보여줍니다.출력 예
unqualified-search-registries = ["registry.access.redhat.com", "docker.io"] [[registry]] prefix = "" location = "insecure.com" insecure = true