이미지 레지스트리 설정
Red Hat® OpenShift® on IBM Cloud® 클러스터에 컨테이너 이미지를 로컬로 빌드하고 배치하고 관리하기 위한 내부 레지스트리가 포함됩니다. 또한 개인용 레지스트리에서 엔터프라이즈 전체의 이미지에 대한 액세스를 관리하고 제어하기 위해 IBM Cloud® Container Registry를 사용하도록 클러스터를 설정할 수 있습니다.
이미지 레지스트리 솔루션 선택
컨테이너 이미지를 클러스터에 애플리케이션을 배포할 수 있도록 클러스터가 접근할 수 있는 컨테이너 레지스트리에 저장해야 합니다. Red Hat OpenShift 클러스터의 기본 제공 레지스트리, 액세스가 일부 사용자로 제한된 개인용 레지스트리 또는 공용 레지스트리를 사용하도록 선택할 수 있습니다. 다음 표를 검토하여 유스 케이스에 가장 적합한 옵션을 선택하십시오.
- 내부 Red Hat OpenShift Container Registry(OCR)
-
클러스터는 Red Hat OpenShift이(가) 클러스터 내에서 애플리케이션 라이프사이클을 자동으로 빌드, 배치 및 관리할 수 있도록 내부 Red Hat OpenShift Container Registry를 사용하여 설정됩니다. 이미지는 클러스터 작성 시 프로비저닝된 지원 IBM Cloud 클래식 파일 스토리지 디바이스에 저장됩니다. 추가 스토리지가 필요한 경우 디바이스의 크기를 조정할 수 있습니다. 유스 케이스:
- 클러스터별 Red Hat OpenShift 기반 이미지 스트림, 빌드, 앱 배치 프로세스입니다.
- RBAC 역할을 통해 제어되는 액세스 권한으로 클러스터의 모든 프로젝트에서 이미지를 공유할 수 있습니다.
- 취약성 검사 등 확장된 기능을 위해 내부 레지스트리를 CloudForms와 같은 다른 Red Hat 제품과 통합합니다.
- 사용자가 공용 네트워크를 통해 레지스트리에서 이미지를 가져올 수 있도록 라우트를 사용하여 내부 레지스트리를 노출하는 옵션입니다.
- 개인용 레지스트리(예: IBM Cloud Container Registry)에 대해 이미지 푸시 또는 이미지 가져오기(pull)를 수행하도록 내부 레지스트리를 설정하는 옵션입니다.
-
자세한 정보는 내부 레지스트리 사용을 참조하십시오.
- 개인용 레지스트리
-
개인용 레지스트리는 권한 없는 사용자로부터 이미지를 보호하는 좋은 방법입니다. 액세스, 스토리지 할당량, 이미지 신뢰, 기타 기능이 의도한 대로 작동하도록 하려면 클러스터 관리자가 개인용 레지스트리를 설정해야 합니다. 기본적으로 Red Hat OpenShift 클러스터는
default프로젝트의 이미지 풀 시크릿을 통해 개인용 IBM Cloud Container Registry와 통합됩니다. IBM Cloud Container Registry는 사용자 고유의 이미지를 저장하는 데 사용되는 고가용성의 멀티 테넌트 개인용 레지스트리입니다. 글로벌icr.io레지스트리에서 IBM 제공 이미지를 가져오고 권한 있는 레지스트리에서 라이센스가 부여된 소프트웨어를 가져올 수도 있습니다. IBM Cloud Container Registry을(를) 사용하면 IBM Cloud IAM 및 청구와 통합하여 여러 클러스터의 이미지를 관리할 수 있습니다. 내부 레지스트리와 IBM Cloud Container Registry 사용 시 장점:- 내부 레지스트리를 통해 더 빠르게 빌드하도록 로컬 이미지를 캐싱합니다.
- 다른 프로젝트의 배치에서 이미지 스트림을 확인할 수 있으므로 각 프로젝트에 가져오기(pull) 시크릿을 복사할 필요가 없습니다.
- 여러 레지스트리에 이미지를 푸시할 필요 없이 여러 클러스터에서 이미지를 공유합니다.
- 이미지 취약성을 자동으로 스캔합니다.
- IBM Cloud IAM 정책 및 개별 지역 레지스트리를 통해 액세스를 제어합니다.
- 클러스터 또는 연결된 스토리지 디바이스의 스토리지 공간 없이도 이미지를 보유합니다. 또한 너무 많은 공간을 차지하지 않도록 이미지 양을 관리하는 정책을 설정할 수 있습니다.
- VPC 인프라: 프라이빗 레지스트리 서비스 엔드포인트를 사용하여 프라이빗 클라우드 서비스 엔드포인트만 사용하는 클러스터도 레지스트리에 계속 액세스할 수 있도록 합니다.
- 이미지 스토리지와 사용, 비용 청구를 더 효과적으로 제어할 수 있도록 스토리지 및 이미지 가져오기 트래픽 할당량을 설정합니다.
- 권한 있는 레지스트리에서 라이센스가 부여된 IBM 컨텐츠를 가져옵니다.
-
시작하려면 다음 주제를 참조하십시오.
- IBM Cloud Container Registry 시작하기.
- 이미지를 IBM Cloud Container Registry에서 내부 레지스트리 이미지 스트림으로 가져오기.
- IBM Cloud Container Registry 사용.
- 공용 레지스트리
-
Docker 허브와 같은 공용 레지스트리는 팀, 동료, 클러스터 또는 클라우드 제공자 간에 이미지를 공유하는 방법입니다. 일부 공용 레지스트리는 개인용 레지스트리 구성요소를 제공하기도 합니다. 유스 케이스:
- 공용 네트워크에서 이미지 푸시 및 가져오기.
- 클라우드 제공자에서 컨테이너의 빠른 테스트.
- 취약성 스캔 또는 액세스 관리와 같은 엔터프라이즈급 기능이 필요하지 않습니다.
이미지를 내부 레지스트리에 저장하기
Red Hat OpenShift 클러스터에는 기본적으로 내부 레지스트리가 있습니다. 내부 레지스트리의 이미지는 백업되지만 Red Hat OpenShift on IBM Cloud 클러스터의 인프라 제공자에 따라 다릅니다.
- 클래식 클러스터
- 클러스터는 Red Hat OpenShift 기본적으로 내부 레지스트리를 사용하여 File Storage for Classic 백엔드 스토리지로 설정됩니다. 클러스터를 삭제하면 내부 레지스트리 및 해당 이미지도 삭제됩니다. 이미지를 유지하려는 경우, 개인용 레지스트리(예: IBM Cloud Container Registry)를 사용하거나 이미지를 지속적 스토리지(예: Object Storage)에 백업하거나 별도의 독립형 Red Hat OpenShift Container Registry(OCR) 클러스터를 작성하는 것이 좋습니다. 자세한 정보는 Red Hat OpenShift 문서를 참조하십시오.
- VPC 클러스터
- 클러스터의 Red Hat OpenShift 내부 레지스트리는 이미지를 계정의 IBM Cloud Object Storage 인스턴스에 자동 생성되는 버킷으로 백업합니다. 클러스터를 삭제하더라도 오브젝트 스토리지 버킷에 저장된 데이터는 그대로 유지됩니다.
- 클래식, VPC 또는 Satellite 클러스터
- 선택적으로 내부 레지스트리를 설정하여 내부 레지스트리 포드가 실행되는 워커 노드의
emptyDir데이터 저장소로 사용할 수 있습니다. 이 데이터는 지속되지 않으며, 팟(Pod) 또는 작업자 노드를 다시 시작하면 저장된 데이터가 삭제되고 복구할 수 없다는 점에 유의하십시오. 대용량 이미지에서 컨테이너를 주기적으로 빌드하는 경우 성능을 향상시키기 위해emptyDir에 로컬로 이미지를 저장할 수 있습니다.
내부 이미지 레지스트리를 백업하려면 IBM Cloud Object Storage
가상 사설 클라우드
Red Hat OpenShift 클러스터 내부 레지스트리의 이미지는 IBM Cloud Object Storage 버킷에 자동으로 백업됩니다. 클러스터를 삭제하더라도 오브젝트 스토리지 버킷에 저장된 데이터는 그대로 유지됩니다.
하지만, 클러스터를 작성할 때 버킷을 작성하지 못한 경우 버킷을 수동으로 작성하고 해당 버킷을 사용하도록 클러스터를 설정해야 합니다. 그동안 내부 레지스트리는 작업자 노드의 보조 디스크에 컨테이너 이미지를 저장하는 emptyDir Kubernetes 볼륨을 사용합니다. emptyDir 볼륨은 고가용성의 지속적 스토리지로 간주되지 않으며, 이미지를 사용하는 팟(Pod)을 삭제하면
이미지가 자동으로 삭제됩니다.
내부 레지스트리의 버킷을 수동으로 작성하려면 클라우드 오브젝트 스토리지 버킷에 대한 클러스터 작성 오류를 참조하십시오.
클래식 클러스터의 내부 레지스트리에 이미지 저장
기본적으로 Red Hat OpenShift 클러스터의 내부 레지스트리는 레지스트리 이미지를 저장하기 위해 IBM CloudFile Storage for Classic 볼륨을 사용합니다. 스토리지 볼륨의 기본 크기를 검토하거나 볼륨 크기를 업데이트할 수 있습니다.
볼륨 세부사항 보기
스토리지 클래스 및 크기를 포함한 볼륨 세부사항을 보려면 지속적 볼륨 청구를 설명합니다.
oc describe pvc -n openshift-image-registry image-registry-storage
볼륨 세부사항 변경
레지스트리에 이미지에 대한 추가 기가바이트 스토리지가 필요한 경우 파일 스토리지 볼륨의 크기를 조정할 수 있습니다. 자세한 정보는 기존 스토리지 디바이스의 크기 및 IOPS 변경을 참조하십시오. IBM Cloud 인프라 계정에서 볼륨의 크기를 조정하는 경우
첨부된 PVC 설명이 업데이트되지 않습니다. 대신, PVC를 registry-backing 사용하는 포드에 openshift-image-registry 로그인하여 볼륨 크기가 조정되었는지 확인할 수 있습니다.
작업자 노드의 빈 디렉토리에 이미지 저장
대용량 이미지에서 컨테이너를 주기적으로 빌드하는 경우 베어메탈 작업자 노드와 같은 작업자 노드의 emptyDir에 로컬로 내부 레지스트리 이미지를 저장하여 성능을 향상시킬 수 있습니다.
이 데이터는 지속되지 않으며, 팟(Pod) 또는 작업자 노드를 다시 시작하면 저장된 데이터가 삭제되고 복구할 수 없다는 점에 유의하십시오.
- Red Hat OpenShift 클러스터에 액세스하십시오.
- 이미지 레지스트리 연산자 구성 맵을 업데이트하여 작업자 노드의
emptyDir을 사용하도록 스토리지를 설정합니다.emptyDir를 사용하도록 configmap을 업데이트해도 이미지 레지스트리의 원래 PVC는 제거되지 않습니다.oc patch configs.imageregistry.operator.openshift.io/cluster --type merge --patch '{"spec":{"storage":{"emptyDir":{}}}}' - 이미지 레지스트리 운영자 관리 상태가 클러스터 Satellite 등에서 로 설정된
Unmanaged경우, 관리 상태를 로Managed업데이트하십시오. 이제 오퍼레이터가 내부 레지스트리 팟(Pod)을 업데이트합니다.oc patch configs.imageregistry.operator.openshift.io/cluster --type merge -p '{"spec":{"managementState":"Managed"}}' - 업데이트를 확인할 수 있도록 내부 레지스트리 팟(Pod)의 세부사항을 가져오십시오.
-
image-registry팟(Pod)이 실행 중이고 팟이 클러스터의 작업자 노드마다 실행되는지 확인하십시오.oc get pods -n openshift-image-registry출력 예
NAME READY STATUS RESTARTS AGE cluster-image-registry-operator-695bf78ffc-zvkhd 2/2 Running 0 33m image-registry-6774598589-65cnx 1/1 Running 0 112s node-ca-gg66r 1/1 Running 0 113s node-ca-n8jpq 1/1 Running 0 113s node-ca-p2d7j 1/1 Running 0 113s -
** 팟(Pod)이 실행되는 **노드
image-registry의 공용 IP 주소를 가져오십시오.oc describe pod -n openshift-image-registry <image-registry-pod> | grep Node출력 예
Node: 169.xx.xxx.xxx/169.xx.xxx.xxx작업자 노드 IP 주소가 사설 IP 주소인 경우에는
ibmcloud oc worker ls -c <cluster> | grep <private_IP>를 실행하고 해당 공인 IP 주소를 기록해 두십시오. -
팟(Pod) YAML에서 ** 섹션에 있는 ** 팟(Pod)의
image-registryUIDmetadata.uid를 가져오십시오(metadata.ownerReferences.uid섹션에 설정된 복제본의 UID 아님).oc get pod -n openshift-image-registry <image-registry-pod> -o yaml출력 예
apiVersion: v1 kind: Pod metadata: uid: e8d7718d-b0bd-47e2-9aaa-05f3a608fd9b ...
-
- 내부 레지스트리가 작업자 노드의
emptyDir에 데이터를 저장하는지 확인하십시오.-
클러스터에서 직접 레지스트리에 접근하려면, 이전에 검색한 워커 노드를 사용하십시오. 단계에 따라 내부 레지스트리로 테스트 이미지를 푸시하십시오.
Red Hat OpenShift 문서에서 이러한 단계를 완료하려면
podmanCLI 도구가 필요합니다. 작업자 노드에 기본적으로 이 CLI 도구가 없을 수도 있습니다. 사용 가능한 RHEL 버전에 대해서는 설치 Podman 가이드를 참조하십시오. -
emptyDir에 저장하는 내부 레지스트리 팟(Pod) 폴더로 이동하십시오.<pod_uid>의 경우 이전에 검색한 팟(Pod) UID를 사용하십시오.cd var/lib/kubelet/pods/<pod_uid>/volumes/kubernetes.io~empty-dir/registry-storage/docker/registry/v2/repositories/openshift -
이미지가 저장소 디렉토리에 있는지 확인하십시오.
ls출력 예
<myimage> nginx ...
-
내부 이미지 레지스트리 제거
가상 사설 클라우드
이미지 레지스트리 운영자 배포는 툴킷 관리 Red Hat OpenShift on IBM Cloud 클러스터에서만 존재합니다. HyperShift 관리형 클러스터는 제어 평면에서 이미지 레지스트리 오퍼레이터를 실행합니다.
내부 이미지 레지스트리를 사용하지 않으려면 다음 단계를 완료하여 제거할 수 있습니다.
- 내부 레지스트리 구성의 사본을 저장하십시오.
oc get configs.imageregistry.operator.openshift.io cluster -o yaml > configs.yaml - 다음 패치 명령을 실행하여 이미지 레지스트리의 관리 상태를
Removed로 변경하십시오.kubectl patch configs.imageregistry.operator.openshift.io cluster -p '{"spec":{"managementState":"Removed"}}' --type='merge' - 관리 상태를 변경하면 이미지 레지스트리 서비스 및 배치가 클러스터의
openshift-image-registry네임스페이스에서 제거됩니다. 다음 명령을 실행하여 제거되었는지 확인할 수 있습니다. 이미지 레지스트리 배치 및 서비스만 제거됩니다. 이미지 레지스트리 운영자 배치 및 서비스는 남아 있습니다.oc get deployment -n openshift-image-registryoc get svc -n openshift-image-registry
내부 레지스트리의 보안 외부 라우트 설정
기본적으로, Red Hat OpenShift 클러스터에 내부 IP 주소를 사용하는 서비스를 통해 사용 가능한 내부 레지스트리가 있습니다. 내부 레지스트리를 공용 네트워크에서 사용할 수 있도록 하려면 보안 재암호화 라우트를 설정합니다. 예를 들어, 클러스터의 내부 레지스트리가 다른 프로젝트나 클러스터 배치에서 공용 레지스트리의 역할을 하도록 설정할 수도 있습니다.
시작하기 전에:
- 클러스터의 관리자 IBM Cloud IAM 서비스 액세스 역할이 있는지 확인하십시오.
- 클러스터에 공용 라우트를 통해 내부 레지스트리를 노출하는 데 필요한 공용 네트워크 연결이 있는지 확인하십시오.
- 로컬 머신에 Docker를 설치하십시오.
- Red Hat OpenShift 클러스터에 액세스하십시오.
내부 레지스트리를 사용하려면 레지스트리에 액세스하도록 공용 라우트를 설정하십시오. 그런 다음, 다른 프로젝트의 배치가 이 레지스트리에서 이미지를 가져올 수 있도록 레지스트리에 액세스하는 데 필요한 인증 정보가 포함된 이미지 가져오기 시크릿을 작성하십시오.
-
openshift-image-registry프로젝트에서 내부 레지스트리에 대한image-registry서비스가 있는지 확인하십시오.oc get svc -n openshift-image-registry출력 예
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE image-registry ClusterIP 172.21.xxx.xxx <none> 5000/TCP 36d image-registry-operator ClusterIP None <none> 60000/TCP 36d -
image-registryTLS 종료를 사용하는reencrypt서비스에 대한 보안 라우트를 작성하십시오. 재암호화에서는 라우터가 인증서로 TLS 연결을 종료한 다음 다른 인증서로 내부 레지스트리에 대한 연결을 다시 암호화합니다. 이 방식을 사용하면 사용자와 내부 레지스트리 간 연결의 전체 경로가 암호화됩니다. 사용자 지정 도메인 이름을 제공하려면 옵션을--hostname포함하십시오.oc create route reencrypt --service=image-registry -n openshift-image-registry -
** 라우트에 지정된 호스트 이름(HOST/PORT) 및 **PORT
image-registry를 검색하십시오.oc get route image-registry -n openshift-image-registry출력 예
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD image-registry image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud image-registry 5000-tcp reencrypt None -
경로를 편집하여 부하 분산 전략을 로 설정하십시오
source. 이렇게 하면 동일한 클라이언트 IP 주소가 동일한 서버에 도달하게 되며, 이는 패스스루 경로 설정과 동일합니다.metadata.annotations섹션에 다음 어노테이션을 추가하여 전략을 설정할 수 있습니다.haproxy.router.openshift.io/balance: source다음 명령을 실행하여 Red Hat OpenShift 애플리케이 콘솔 또는 명령행에서 구성 파일을 편집할 수 있습니다.oc edit route image-registry -n openshift-image-registry어노테이션을 추가하십시오.
apiVersion: route.openshift.io/v1 kind: Route metadata: annotations: haproxy.router.openshift.io/balance: source ... -
회사 네트워크 정책에 따라 프록시 또는 방화벽을 통해 로컬 시스템에서 공용 엔드포인트로 액세스하는 것이 금지되는 경우, 다음 단계에서 내부 레지스트리에 대해 작성한 라우트 서브도메인에 대한 액세스를 허용하십시오.
-
라우트를 호스트 이름으로 사용하여 내부 레지스트리에 로그인하십시오.
docker login -u $(oc whoami) -p $(oc whoami -t) image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud -
로그인되었으므로 내부 레지스트리에 샘플
hello-world앱을 푸시해 보십시오.-
DockerHub에서
hello-world이미지를 가져오거나 로컬 시스템에서 이미지를 빌드하십시오.docker pull hello-world -
내부 레지스트리의 호스트 이름, 이미지를 배치할 프로젝트, 이미지 이름 및 태그를 사용해 로컬 이미지에 태그를 지정하십시오.
docker tag hello-world:latest image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud/<project>/<image_name>:<tag> -
클러스터의 내부 레지스트리에 이미지를 푸시하십시오.
docker push image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud/<project>/<image_name>:<tag> -
이미지가 Red Hat OpenShift 이미지 스트림에 추가되었는지 확인하십시오.
oc get imagestream출력 예
NAME DOCKER REPO TAGS UPDATED hello-world image-registry-openshift-image-registry.svc:5000/default/hello-world latest 7 hours ago
-
-
프로젝트 배치에서 내부 레지스트리의 이미지를 가져올 수 있게 하려면 내부 레지스트리에 액세스하는 데 필요한 인증 정보를 보유한 이미지 가져오기 시크릿을 프로젝트에 작성하십시오. 그런 다음, 프로젝트별로 기본 서비스 계정에 이미지 가져오기 시크릿을 추가하십시오.
-
기본 서비스 계정이 사용하는 이미지 가져오기 시크릿을 나열하고
default-dockercfg로 시작하는 시크릿을 확인하십시오.oc describe sa default출력 예
... Image pull secrets: all-icr-io default-dockercfg-mpcn4 ... -
구성 파일의
data필드에서 인코딩된 시크릿 정보를 가져오십시오.oc get secret <default-dockercfg-name> -o yaml출력 예
apiVersion: v1 data: .dockercfg: ey...= -
data필드 값을 디코딩하십시오.echo "<ey...=>" | base64 -D출력 예
{"172.21.xxx.xxx:5000":{"username":"serviceaccount","password":"eyJ... -
내부 레지스트리의 새 이미지 가져오기 시크릿을 작성하십시오.
secret_name: 이미지 가져오기 시크릿에 이름을 지정하십시오(예:internal-registry).--namespace: 이미지 가져오기 시크릿을 작성할 프로젝트를 입력하십시오(예:default).--docker-server: 내부 서비스 IP 주소(172.21.xxx.xxx:5000) 대신image-registry라우트의 호스트 이름을 포트와 함께 입력하십시오(image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud:5000).--docker-username: 이전 이미지 가져오기 시크릿에서"username"을 복사하십시오(예:serviceaccount).--docker-password: 이전 이미지 가져오기 시크릿에서"password"를 복사하십시오.--docker-email: Docker 이메일 주소를 입력하십시오(있는 경우). 없다면 가상 이메일 주소(예:a@b.c)를 입력하십시오. 이 이메일은 Kubernetes 시크릿을 작성하는 데 필요하지만 작성 후에는 사용되지 않습니다.
oc create secret docker-registry internal-registry --namespace default --docker-server image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud:5000 --docker-username serviceaccount --docker-password <eyJ...> --docker-email a@b.c -
프로젝트의 기본 서비스 계정에 이미지 가져오기 시크릿을 추가하십시오.
oc patch -n <namespace_name> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"<image_pull_secret_name>"}}]' -
내부 레지스트리에서 이미지를 가져올 각 프로젝트에 대해 이러한 단계를 반복하십시오.
-
액세스 가능한 라우트로 내부 레지스트리를 설정하므로 로그인하여 레지스트리에 이미지를 푸시하거나 가져올 수 있습니다. 자세한 정보는 Red Hat OpenShift 문서를 참조하십시오.
이미지를 IBM Cloud Container Registry에서 내부 레지스트리 이미지 스트림으로 가져오기
기본적으로 Red Hat OpenShift on IBM Cloud 클러스터는 icr.io 프로젝트의 원격 개인용 IBM Cloud Container Registry default 도메인에서 이미지를 가져오도록 설정됩니다. 이미지를 이미지 스트림으로 태그 IBM Cloud Container Registry 지정하여 Red Hat OpenShift 클러스터의 내부 레지스트리로 가져올 수 있습니다. 이 설정에서는 내부 레지스트리의 로컬 캐시를 사용하여 이미지에서 앱을 배치할 수 있으며 앱 배치 빌드를 만드는 속도가 빨라집니다. 또한 각 프로젝트에서 IBM Cloud Container Registry에
대해 이미지 가져오기(pull) 시크릿 신임 정보를 작성할 필요가 없도록 다른 프로젝트 배치에서 이미지 스트림을 참조할 수 있습니다.
IBM Cloud Container Registry에서 이미지를 업데이트하는 경우 이미지를 Red Hat OpenShift 클러스터의 내부 레지스트리로 자동으로 가져오지 않습니다. 대신 주기적인 가져오기를 설정하거나, 이미지를 태그하기 위해 이 단계를 반복하십시오. 배치에 사용하는 이미지 가져오기 정책에 따라 배치를 다시 시작해야 할 수도 있습니다.
빌드, 이미지 스트림, 내부 레지스트리가 함께 작동하는 방식에 대해 자세히 알고 싶으십니까? 문 서를 Red Hat OpenShift 읽어보거나, 컨테이너 이미지 관리에 관한 이 블로그를 확인해 보세요.
-
default프로젝트로 전환하여 이미지를 이미지 스트림으로 가져오십시오.default프로젝트는icr.io레지스트리에 액세스하는 데 필요한 인증 정보로 이미 설정되어 있습니다.oc project default -
IBM Cloud Container Registry에 사용 가능한 이미지를 나열하십시오. Red Hat OpenShift 클러스터의 내부 레지스트리로 가져오려는 이미지의 저장소 및 태그를 기록해 두십시오.
ibmcloud cr images -
이미지를 이미지 스트림으로 IBM Cloud Container Registry 네임스페이스에서 내부 레지스트리로 가져오려면 이미지에 태그를 지정하십시오. 자세한 내용은 Red Hat OpenShift 문서를 참조하거나
oc tag --help을 실행하세요.oc tag <region>.icr.io/<namespace>/<image>:<tag> default/<image>:<tag> --reference-policy=local [--scheduled]<region>.icr.io/<namespace>/<image>:<tag>: 이전에 검색한 리포지토리 및 태그 정보를 사용하여 가져올 이미지의 리전, 네임스페이스, IBM Cloud Container Registry 이미지 및 태그 이름을 완성하십시오.default/<image>:<tag>: IBM Cloud Container Registry 태그 지정된 이미지에서 작성한 내부 이미지 스트림에 대한 정보를 입력하십시오. 프로젝트를 지정하지 않는 경우 이미지 스트림이 작성되는 프로젝트인default프로젝트에서 이 이미지 스트림을 작성합니다.<image>:<tag>의 값은 이전에 검색한 값과 일치합니다.--reference-policy=local: IBM Cloud Container Registry의 이미지 사본을 내부 레지스트리의 로컬 캐시에 가져오고 클러스터의 프로젝트에서 이미지 스트림으로 사용할 수 있도록 이 값을local로 설정하십시오. 이 값을 포함하지 않는 경우 배치에서 이를 사용할 때 이미지 스트림이 IBM Cloud Container Registry을(를) 다시 참조하므로 프로젝트에서 신임 정보가 필요합니다.--scheduled이 선택적 옵션을 설정하여 이미지를 내부 IBM Cloud Container Registry 레지스트리로 주기적으로 가져오도록 구성합니다. 기본 빈도는 15분입니다. 자세한 정보는 Red Hat OpenShift 문서를 참조하십시오.
-
이미지 스트림이 작성되었는지 확인하십시오.
oc get imagestreams -
이미지 스트림이 IBM Cloud Container Registry에서 이미지를 가져왔는지 확인하십시오. 출력에서 latest tagged from 이미지가
* <region>.icr.io/<namespace>/<image>@<digest>이미지와 일치하는지 확인하십시오.oc describe is/<imagestream>출력 예
NAME: <imagestream> Namespace: default Created: 2 days ago Labels: <none> Annotations: openshift.io/image.dockerRepositoryCheck=2020-03-31T09:41:36Z Image Repository: image-registry.openshift-image-registry.svc:5000/default/ant1 Image Lookup: local=false Unique Images: 1 Tags: 1 latest tagged from <region>.icr.io/<namespace>/<image>:<tag> * <region>.icr.io/<namespace>/<image>@<digest> 2 days ago
이제 개발자는 엡 배치에서 이미지 스트림을 사용할 수 있습니다. 해당 이미지는 내부 레지스트리의 로컬로 가져온 이미지에서 빌드됩니다. 이미지 스트림이 클러스터에 로컬이므로 프로젝트의 이미지 가져오기(pull) 시크릿을 IBM Cloud Container Registry에 설정할 필요가 없습니다.
IBM Cloud Container Registry에 이미지를 푸시하기 위해 내부 레지스트리에서 빌드 설정
클러스터에서 Red Hat OpenShift on IBM Cloud 빌드를 생성할 때, 내부 레지스트리를 설정하여 이미지를 외부 저장소로 푸시할 수 IBM Cloud Container Registry 있습니다. 기본적으로 클러스터의 default 프로젝트의 이미지 가져오기 시크릿에는 IBM Cloud Container Registry에서 이미지를 가져올 수 있는 읽기 액세스 권한만 있습니다. 이미지를 푸시하려면 쓰기 액세스
권한을 사용하여 시크릿을 추가해야 합니다.
-
default프로젝트로 전환하십시오.oc project default -
단계에 따라 레지스트리에서 이미지를 가져오고 이 레지스트리로 푸시할 수 있는
Reader및Writer서비스 액세스 역할로 IBM Cloud IAM API 키icr.io를 설정하십시오.프로젝트에 대한 액세스 권한을 가진 사용자는 이 시크릿을 사용하여 개인용 레지스트리에 이미지를 푸시할 수 있습니다. 클러스터에서 누가 어떤 조치를 수행하는지 관찰할 수 있도록 로깅 및 모니터링 도구를 설정할 수 있습니다.
-
이미지를 푸시할 각
icr.io지역별로 이전 단계를 반복하십시오. -
빌드 서비스 계정에 시크릿을 추가하고 빌드 구성 파일에서 시크릿을 참조하십시오. 자세한 정보는 Red Hat OpenShift 문서를 참조하십시오.
-
클러스터의 모든 빌드가 사용하는
builder역할에 작성한 시크릿을 연결하여 빌드 서비스 계정에 시크릿을 추가하십시오.oc secrets link builder <secret_name> -
빌드 구성을 나열하고 IBM Cloud Container Registry에 대한 푸시 및 가져오기 액세스 권한을 제공할 빌드 구성을 기록해 두십시오.
oc get bc -
IBM Cloud Container Registry에 대한
Writer서비스 액세스 권한을 사용하여 작성한 시크릿을 사용하도록 빌드 구성의 이미지 푸시 시크릿을 설정하십시오.oc set build-secret --push bc/<build_config_name> <secret_name> -
초기 빌드 이미지를 가져올 레지스트리에서 가져오도록 빌드 구성의 이미지 가져오기 시크릿을 설정하십시오. 예를 들어, 소스 이미지가 IBM Cloud Container Registry 저장소에 있는 경우 IBM Cloud Container Registry에 대한
Reader서비스 액세스 권한으로 작성한 시크릿을 사용할 수 있습니다.oc set build-secret --pull bc/<build_config_name> <secret_name>
-
-
IBM Cloud Container Registry에 푸시할 빌드 서비스 계정 및 빌드 구성 파일을 업데이트한 후 빌드를 다시 시작하십시오.
oc start-build <build_name> -
빌드 팟(Pod)의 이름을 가져오십시오(예:
<build>-2-build).oc get pods -
빌드 로그를 확인하고 이미지가 푸시된 위치를 확인하십시오.
oc logs <build_pod>성공적인 이미지 푸시 로그의 예.
... Successfully pushed <region>.icr.io/<namespace>/<build_name>@sha256:<hash> Push successful -
개인용 레지스트리에서 이미지를 찾아보고 이미지가 작성되었는지 확인하십시오.
ibmcloud cr image list출력 예
Repository Tag Digest Namespace Created Size Security status <region>.icr.io/<namespace>/<build_name> latest <digest> <namespace> 2 minutes ago 182 MB 33 Issues
이제 Red Hat OpenShift 빌드는 IBM Cloud Container Registry에서 이미지를 가져오고 푸시할 수 있습니다.
IBM Cloud Container Registry 사용
기본적으로 Red Hat OpenShift on IBM Cloud 클러스터는 icr.io 프로젝트의 원격 개인용 IBM Cloud Container Registry default 도메인에서 이미지를 가져오도록 설정됩니다. 다른 프로젝트에서 IBM Cloud Container Registry에 저장된 이미지를 사용하려는 경우, 이미지 스트림의 내부 레지스트리로 이미지를 가져오거나 프로젝트별로
각 글로벌 및 지역 레지스트리에 대해 이미지 가져오기 시크릿을 작성할 수 있습니다.
내부 레지스트리로 이미지를 가져오려는 경우: IBM Cloud Container Registry에서 내부 레지스트리 이미지 스트림으로 이미지 가져오기를 참조하십시오.
외부 IBM Cloud Container Registry에서 직접 이미지를 가져오려는 경우: 다음 주제를 참조하십시오.
- 레지스트리에서 이미지를 가져오도록 클러스터에 권한을 부여하는 방법 이해.
- 프로젝트에서 이미지를 가져올 프로젝트로
all-icr-io시크릿 복사default. - 고유 이미지 가져오기 시크릿 작성.
- 배치 구성 또는 프로젝트 서비스 계정에 이미지 가져오기 시크릿 추가.
개인용 레지스트리에서 이미지를 가져오도록 클러스터에 대한 권한 부여 방법 이해
레지스트리에서 이미지를 가져오기 위해 Red Hat OpenShift on IBM Cloud 클러스터는 Kubernetes 시크릿의 특수 유형인 imagePullSecret을 사용합니다. 이 이미지 가져오기 시크릿에는 컨테이너 레지스트리에 액세스하는 데 필요한 인증 정보가 저장됩니다.
컨테이너 레지스트리는 다음과 같을 수 있습니다.
- 자체 IBM Cloud Container Registry의 개인용 네임스페이스.
- 다른 IBM Cloud Container Registry 계정에 속한 IBM Cloud의 개인용 네임스페이스.
- 다른 개인용 레지스트리(예: Docker).
그러나 기본적으로 클러스터는 IBM Cloud Container Registry의 계정 네임스페이스에서만 이미지를 가져오고 해당 이미지의 컨테이너를 클러스터의 default Red Hat OpenShift 프로젝트로 배치하도록 설정되어 있습니다. 클러스터의 다른 프로젝트나 다른 컨테이너 레지스트리에서 이미지를 가져와야 하는 경우 자체 이미지 풀 시크릿을 설정해야 합니다.
기본 이미지 풀 시크릿 설정
일반적으로 Red Hat OpenShift on IBM Cloud 클러스터는 default Red Hat OpenShift 프로젝트의 모든 IBM Cloud Container Registry icr.io 도메인에서만 이미지를 가져오도록 설정됩니다. 다른 Red Hat OpenShift 프로젝트나 계정에서 이미지를 가져오는 방법, 가져오기 권한 제한 설정 방법, 또는 클러스터에 기본
이미지 가져오기 시크릿이 없는 이유에 대해 자세히 알아보려면 다음 자주 묻는 질문 를 참조하십시오.
- 내 클러스터가 프로젝트에서
defaultRed Hat OpenShift 이미지를 가져오도록 어떻게 설정되어 있나요? - 클러스터를 작성하면 해당 클러스터에는 IBM Cloud에 대한 IAM 독자 서비스 액세스 역할 정책이 제공된 IBM Cloud Container Registry IAM 서비스 ID가 있습니다. 서비스 ID 인증 정보는 클러스터의 이미지 풀 시크릿에 저장된 비만료 API 키에서 위장됩니다. 이미지 풀 시크릿은
defaultKubernetes 네임스페이스와 이 Red Hat OpenShift 프로젝트의default서비스 계정에 있는 시크릿 목록에 추가됩니다. 이미지 풀 시크릿을 사용하면 배치에서 글로벌 및 지역 IBM Cloud Container Registry의 이미지를 가져와서(읽기 전용 액세스)defaultRed Hat OpenShift 프로젝트에 컨테이너를 배치할 수 있습니다.
- 글로벌 레지스트리는 IBM이 제공한 공용 이미지를 안전하게 저장합니다. 각 지역 레지스트리에 저장된 이미지에 대해 서로 다른 참조를 가지지 않고 배치에서 이러한 공용 이미지를 참조할 수 있습니다.
- 지역 레지스트리는 개인용 Docker 이미지를 안전하게 저장합니다.
- 프로젝트에
defaultRed Hat OpenShift 이미지 풀 시크릿이 없다면 어떻게 해야 하나요? - 클러스터에 로그인하고
oc get secrets -n default | grep "icr-io"를 실행하여 이미지 풀 시크릿을 확인할 수 있습니다.icr시크릿이 나열되지 않으면 클러스터를 작성한 사용자가 IAM의 IBM Cloud Container Registry에 필요한 권한을 갖고 있지 않는 것일 수 있습니다. 기존 클러스터를 업데이트하여 API 키 이미지 풀 시크릿 사용을 참조하십시오. - 특정 지역 레지스트리에 대한 풀 액세스를 제한할 수 있나요?
- 예, 해당 지역 레지스트리 또는 네임스페이스와 같은 레지스트리 리소스에 대한 Reader 서비스 액세스 역할의 접근을 제한하는 서비스 ID의 기존 IAM 정책을 편집할 수 있습니다. 레지스트리 IAM 정책을 사용자 정의하려면 먼저 IBM Cloud에 대한 IBM Cloud Container Registry IAM 정책을 사용으로 설정해야 합니다.
레지스트리 인증 정보의 보안을 강화하시겠습니까? 클러스터 관리자에게 클러스터의 키 관리 서비스 제공자가 클러스터의 Kubernetes 시크릿(예: 레지스트리 인증 정보를 저장하는 이미지 가져오기 시크릿)을 암호화할 수 있도록 설정해 달라고 요청하십시오.
- 프로젝트 Red Hat OpenShift 외부의 이미지를
default가져올 수 있나요? - 기본적으로는 그렇지 않습니다. 기본 클러스터 설정을 사용하면 IBM Cloud Container Registry 네임스페이스에 저장되는 이미지에서 클러스터의
defaultRed Hat OpenShift 프로젝트로 컨테이너를 배치할 수 있습니다. 다른 Red Hat OpenShift 프로젝트 또는 다른 IBM Cloud 계정의 이러한 이미지를 사용하기 위해 고유 이미지 풀 시크릿을 복사하거나 작성하는 옵션이 있습니다. - 다른 IBM Cloud 계정의 이미지를 가져올 수 있나요?
- 예. 사용할 IBM Cloud 계정에서 API 키를 작성하십시오. 그런 다음 IBM Cloud 계정에서 이미지를 가져오려는 각 클러스터의 각 프로젝트에서 API 키를 보유하는 시크릿을 작성하십시오. 자세한 정보는 권한 부여된 서비스 ID API 키를 사용하는 이 예를 따라 진행하십시오.
Docker와 같은 비IBM Cloud 레지스트리를 사용하려면 기타 개인용 레지스트리에 저장된 이미지에 액세스를 참조하십시오.
- API 키는 서비스 ID용이어야 합니까? 내 계정의 서비스 ID 한도에 도달하면 어떻게 되나요?
- 기본 클러스터 설정은 서비스 ID를 작성하여 이미지 풀 시크릿에 IBM Cloud IAM API 키 인증 정보를 저장합니다. 그러나 개별 사용자에 대한 API 키를 작성하고 이미지 풀 시크릿에 해당 인증 정보를 저장할 수도 있습니다. 서비스 ID에 대한 IAM 한계에 도달하는 경우 클러스터가 서비스 ID 및 이미지
풀 시크릿 없이 작성되고 기본적으로
icr.io레지스트리 도메인에서 이미지를 가져올 수 없습니다. IBM Cloud IAM 서비스 ID가 아닌 기능 ID와 같은 개별 사용자에 대한 API 키를 사용하여 고유의 이미지 풀 시크릿을 작성해야 합니다. - 지역 레지스트리 도메인과 모든 레지스트리 도메인에 대한 이미지 풀 시크릿을 확인합니다. 어느 것을 사용해야 할까요?
- 이전에는 Red Hat OpenShift on IBM Cloud가 각 지역의 공용
icr.io레지스트리 도메인에 대해 별도의 이미지 풀 시크릿을 작성했습니다. 이제 모든 지역의 모든 공용 및 개인용icr.io레지스트리 도메인은 클러스터의all-icr-ioKubernetes 프로젝트에서 자동으로 작성되는 하나의default이미지 풀 시크릿에 저장됩니다.
클러스터에 있는 다른 Kubernetes 네임스페이스의 워크로드가 개인용 레지스트리에서 컨테이너 이미지를 가져오려는 경우, 이제는 해당 Kubernetes 프로젝트에 all-icr-io 이미지 풀 시크릿만 복사하면 됩니다. 그 후 서비스 계정 또는 배치에 all-icr-io 시크릿을 지정하십시오. 더 이상 이미지의 지역 레지스트리와 일치하는 이미지 풀 시크릿을 복사할 필요가 없습니다.
또한 인증이 필요하지 않은 공용 레지스트리에 대해서는 이미지 풀 시크릿이 필요하지 않다는 점에 유의하십시오.
- 다른 Red Hat OpenShift 프로젝트에서 이미지 풀 시크릿을 복사하거나 생성한 후에는 작업이 완료된 것인가요?
- 아닙니다. 작성한 시크릿을 사용하여 이미지를 가져올 수 있도록 컨테이너에 권한이 부여되어야 합니다. 사용자는 네임스페이스의 서비스 계정에 이미지 풀 시크릿을 추가하거나, 각 배치에서 해당 시크릿을 참조할 수 있습니다. 지시사항은 이미지 풀 시크릿을 사용하여 컨테이너 배치를 참조하십시오.
icr.io 레지스트리에 대한 사설 네트워크 연결
서비스 엔드포인트를 사용하도록 IBM Cloud 계정을 설정할 때 사설 네트워크 연결을 사용하여 IBM Cloud Container Registry에서 이미지를 푸시하고 가져올 수 있습니다.
프라이빗 연결을 통해 icr.io 레지스트리를 사용하도록 클러스터를 설정하려면 어떻게 해야 합니까?
- 인프라 IBM Cloud 계정에 가상 라우터 기능(VRF) 을 활성화하여 프라이빗 클라우드 서비스 IBM Cloud Container Registry 엔드포인트를 사용할 수 있도록 하십시오. VRF를 사용으로 설정하려면 VRF 사용을
참조하십시오. VRF가 이미 사용으로 설정되었는지 확인하려면
ibmcloud account show명령을 사용하십시오. - 서비스 엔드포인트를 사용하려면 IBM Cloud 계정을 사용으로 설정하십시오.
IBM Cloud Container Registry 자동으로 프라이빗 클라우드 서비스 엔드포인트를 사용합니다. Red Hat OpenShift on IBM Cloud 클러스터에 대한 프라이빗 클라우드 서비스 엔드포인트를 사용으로 설정할 필요가 없습니다.
기존 클러스터를 업데이트하여 API 키 이미지 풀 시크릿 사용
새 Red Hat OpenShift on IBM Cloud 클러스터는 IBM Cloud Container Registry에 액세스할 권한을 부여하기 위해 이미지 풀 시크릿에 API 키를 저장합니다. 이러한 이미지 풀 시크릿을 사용하여 icr.io 레지스트리 도메인에 저장된 이미지에서 컨테이너를 배치할 수 있습니다. 클러스터가 시크릿으로 작성되지
않은 경우 이미지 풀 시크릿을 클러스터에 추가할 수 있습니다.
시작하기 전에
-
다음 권한이 있는지 확인하십시오. IBM Cloud에 대한 Red Hat OpenShift on IBM Cloud IAM **운영자 또는 관리자 ** 플랫폼 액세스 역할. 계정 소유자가 다음 명령을 실행하여 사용자에게 해당 역할을 지정할 수 있습니다.
ibmcloud iam user-policy-create EMAIL --service-name containers-kubernetes --roles "Administrator,Operator" -
모든 지역 및 리소스 그룹에서 IBM Cloud에 대한 IBM Cloud Container Registry IAM 관리자 플랫폼 액세스 역할. 정책의 범위를 특정 지역 또는 리소스 그룹으로 지정할 수 없습니다. 계정 소유자가 다음 명령을 실행하여 사용자에게 해당 역할을 지정할 수 있습니다.
비밀키가 성공적으로 생성되었는지 확인하십시오
ibmcloud iam user-policy-create <your_user_email> --service-name container-registry --roles Administrator -
계정이 서비스 ID 작성을 제한하는 경우에는 콘솔에서 서비스 ID 작성자 역할을 Identity and Access Management에 추가하십시오(API 또는 CLI의
iam-identity). -
계정이 API 키 작성을 제한하는 경우에는 콘솔에서 사용자 API 키 작성자 역할을 Identity and Access Management에 추가하십시오(API 또는 CLI의
iam-identity).
이미지 가져오기(pull) 시크릿 업데이트
default Kubernetes 네임스페이스에서 클러스터 이미지 가져오기(pull) 시크릿을 업데이트하려는 경우
-
클러스터 ID를 가져오십시오.
ibmcloud oc cluster ls -
다음 명령을 실행하여 클러스터의 서비스 ID를 작성하고 서비스 ID에 IBM Cloud Container Registry에 대한 IAM 독자 서비스 액세스 역할을 지정하십시오. 이 명령은 또한 서비스 ID 인증 정보를 위장하는 API 키를 만들어 API 키를 클러스터의 Kubernetes 이미지 풀 시크릿에 저장합니다. 이미지 풀 시크릿은
defaultRed Hat OpenShift 프로젝트에 있습니다.ibmcloud oc cluster pull-secret apply --cluster <cluster_name_or_ID>이 명령을 실행하면 IAM 인증 정보 및 이미지 풀 시크릿의 작성이 초기화되며 완료하는 데 약간의 시간이 소요될 수 있습니다. 이미지 풀 시크릿이 작성될 때까지 IBM Cloud Container Registry
icr.io도메인에서 이미지를 가져오는 컨테이너를 배치할 수 없습니다. -
이미지 가져오기 시크릿이 클러스터에 작성되었는지 확인하십시오.
oc get secrets | grep icr-io출력 예
all-icr-io kubernetes.io/dockerconfigjson 1 16d -
컨테이너 배치를 업데이트하여
icr.io도메인 이름에서 이미지를 가져오십시오. -
선택사항: 방화벽이 있는 경우 사용하는 도메인의 레지스트리 서브넷에 아웃바운드 네트워크 트래픽을 허용했는지 확인하십시오.
-
다음 옵션 중 하나를 사용하여 설정을 완료하십시오.
default이외의 Red Hat OpenShift 프로젝트 또는 다른 IBM Cloud 계정에서 이미지를 가져오려면 다른 이미지 풀 시크릿을 복사 또는 작성하십시오.- 네임스페이스 또는 지역과 같은 특정 레지스트리 리소스에 대한 이미지 풀 시크릿 액세스를 제한하려면 다음을 수행하십시오.
이미지 풀 시크릿을 사용하여 외부 비공개 레지스트리의 이미지에 접근하기
default 이외의 Red Hat OpenShift 프로젝트에 컨테이너를 배치하거나, 다른 IBM Cloud 계정에 저장된 이미지를 사용하거나, 외부 개인용 레지스트리에 저장된 이미지를 사용하도록 사용자 고유의 이미지 풀 시크릿을 설정하십시오. 또한, 특정 레지스트리 이미지 네임스페이스 또는 조치(예: push 또는 pull)에 대한 권한을 제한하는 IAM
액세스 정책을 적용할 자신의 고유 이미지 풀 시크릿을 작성할 수도 있습니다.
이미지 풀 시크릿을 작성한 후에는 컨테이너가 해당 시크릿을 사용하여 레지스트리에서 이미지를 가져올 수 있도록 권한을 부여받아야 합니다. 프로젝트의 서비스 계정에 이미지 풀 시크릿을 추가하거나 각 배치의 해당 시크릿을 참조할 수 있습니다. 지시사항은 이미지 풀 시크릿을 사용하여 컨테이너 배치를 참조하십시오.
이미지 풀 시크릿은 시크릿이 작성된 Red Hat OpenShift 프로젝트에만 유효합니다. 컨테이너를 배치하려는 모든 네임스페이스에 대해 이러한 단계를 반복하십시오.
시작하기 전에:
- IBM Cloud Container Registry에 네임스페이스를 설정하고 이 네임스페이스에 이미지를 푸시하십시오.
- 클러스터를 작성하십시오.
- Red Hat OpenShift 클러스터에 액세스하십시오.
사용자 고유의 이미지 풀 시크릿을 사용하려면 다음 옵션 중에서 선택하십시오.
- 기본 Red Hat OpenShift 프로젝트에서 클러스터의 다른 프로젝트로 이미지 풀 시크릿을 복사합니다.
- 새 IAM API 키 인증 정보를 작성하고 이미지 풀 시크릿에 저장하여 다른 IBM Cloud 계정의 이미지에 액세스하거나 특정 레지스트리 도메인 또는 네임스페이스에 대한 액세스를 제한하는 IAM 정책을 적용합니다.
- 외부 개인용 레지스트리의 이미지에 액세스하는 이미지 풀 시크릿을 작성합니다.
이미지 풀 시크릿을 배치에 사용하려는 프로젝트에 이미 작성한 경우 작성된 imagePullSecret을 사용하여 컨테이너 배치를 참조하십시오.
기존 이미지 풀 시크릿 복사
default Red Hat OpenShift 프로젝트에 대해 자동으로 작성되는 것과 같은 이미지 풀 시크릿을 클러스터의 다른 프로젝트에 복사할 수 있습니다. 특정 프로젝트에 대한 액세스를 제한하거나 다른 IBM Cloud 계정에서 이미지를 가져오려는 경우처럼 이 프로젝트에 대해 다른 IBM Cloud IAM API 키 인증 정보를 사용하려는 경우 대신 이미지 풀 시크릿을 작성하십시오.
-
클러스터의 사용 가능한 Red Hat OpenShift 프로젝트를 나열하거나 사용할 프로젝트를 작성하십시오.
oc get projects출력 예
default Active ibm-cert-store Active ibm-system Active kube-public Active kube-system Active프로젝트를 작성하려면
oc new-project <project_name> -
IBM Cloud Container Registry에 대한
defaultRed Hat OpenShift 프로젝트에 있는 기존 이미지 풀 시크릿을 나열하십시오.oc get secrets -n default | grep icr-io출력 예
all-icr-io kubernetes.io/dockerconfigjson 1 16d -
all-icr-io프로젝트에서 선택한 프로젝트로default이미지 풀 시크릿을 복사하십시오. 새 이미지 풀 시크릿의 이름은<project_name>-icr-<region>-io입니다.oc get secret all-icr-io -n default -o yaml | sed 's/default/<new-project>/g' | oc create -n <new-project> -f - -
시크릿이 작성되었는지 확인하십시오.
oc get secrets -n <project_name> | grep icr-io -
컨테이너를 배치하려면 프로젝트의 모든 배치가 레지스트리에서 이미지를 가져올 수 있도록 프로젝트의 서비스 계정 또는 각 배치에 대해 이미지 풀 시크릿을 추가하십시오.
다른 IAM API키 인증 정보를 사용하여 이미지 풀 시크릿 작성
IBM Cloud IAM 액세스 정책을 사용자 또는 서비스 ID에 지정하여 특정 레지스트리 이미지 네임스페이스 또는 조치(예: push 또는 pull)에 대한 권한을 제한할 수 있습니다. 그런 다음 API 키를 작성하고 사용자 클러스터에 적합한 이미지 풀 시크릿에 이 레지스트리 인증 정보를 저장하십시오.
예를 들어, 다른 IBM Cloud 계정의 이미지에 액세스하려면 사용자 또는 서비스 ID의 IBM Cloud Container Registry 인증 정보를 해당 계정에 저장하는 API 키를 작성하십시오. 그런 다음 클러스터의 계정에서 각 클러스터 및 클러스터 프로젝트에 대한 이미지 풀 시크릿에 API 키 인증 정보를 저장하십시오.
다음 단계에서는 IBM Cloud IAM 서비스 ID의 인증 정보를 저장하는 API 키를 작성합니다. 서비스 ID를 사용하는 대신 IBM Cloud에 대한 IBM Cloud Container Registry IAM 서비스 액세스 정책이 있는 사용자 ID에 대한 API 키를 작성하려고 할 수 있습니다. 그러나 사용자가 기능 ID이거나 클러스터가 레지스트리에 계속 액세스할 수 있도록 사용자가 퇴사한 경우 계획이 있는지 확인하십시오.
-
클러스터의 사용 가능한 Red Hat OpenShift 프로젝트를 나열하거나 레지스트리 이미지에서 컨테이너를 배치하려는 경우 사용할 프로젝트를 작성하십시오.
oc get projects출력 예
default Active ibm-cert-store Active ibm-system Active kube-public Active kube-system Active프로젝트를 작성하려면
oc new-project <project_name> -
이미지 풀 시크릿에서 IAM 정책과 API 키 인증 정보에 사용되는 클러스터에 대한 IBM Cloud IAM 서비스 ID를 작성하십시오. 클러스터 및 네임스페이스 이름을 둘 다 포함하는 것처럼 나중에 서비스 ID를 검색하는 데 도움이 되는 설명을 서비스 ID에 제공해야 합니다.
ibmcloud iam service-id-create <cluster_name>-<project>-id --description "Service ID for IBM Cloud Container Registry in Red Hat OpenShift on IBM Cloud cluster <cluster_name> project <project>" -
IBM Cloud에 액세스 권한을 부여하는 클러스터 서비스 ID에 대한 사용자 정의 IBM Cloud Container Registry IAM 정책을 작성하십시오.
ibmcloud iam service-policy-create <cluster_service_ID> --roles <service_access_role> --service-name container-registry [--region <IAM_region>] [--resource-type namespace --resource <registry_namespace>]cluster_service_ID- 필수. Kubernetes 클러스터에 대해 이전에 작성한
<cluster_name>-<kube_namespace>-id서비스 ID로 대체합니다. --service-name container-registry- 필수. IAM 정책 대상이 IBM Cloud Container Registry가 되도록
container-registry를 입력합니다. --roles <service_access_role>- 필수. 서비스 ID 액세스 범위를 지정하려는 IBM Cloud Container Registry에 대해 서비스 액세스 역할을 입력하십시오. 가능한 값은
Reader,Writer,Manager입니다. --region <IAM_region>- 선택사항입니다. 액세스 정책을 특정 IAM 지역으로 범위 지정하려면 쉼표로 구분된 목록으로 지역을 입력합니다. 가능한 값은
global및 로컬 레지스트리 지역입니다. --resource-type namespace --resource <registry_namespace>- 선택사항입니다. 특정 IBM Cloud Container Registry 네임스페이스의 이미지로만 액세스를 제한하려면 리소스 유형에 대해
namespace를 입력하고<registry_namespace>를 지정하십시오. 레지스트리 네임스페이스를 나열하려면ibmcloud cr namespaces를 실행하십시오.
-
서비스 ID에 대한 API 키를 작성하십시오. API 키 이름을 서비스 ID와 유사하게 지정하고, 이전에 생성한 서비스 ID를 포함하세요
<cluster_name>-<kube_namespace>-id. 나중에 키를 검색하는 데 도움이 되는 설명을 API 키에 제공해야 합니다.ibmcloud iam service-api-key-create <cluster_name>-<project>-key <cluster_name>-<project>-id --description "API key for service ID <service_id> in Red Hat OpenShift on IBM Cloud cluster <cluster_name> project <project>" -
이전 명령 출력에서 API 키 값을 검색하십시오.
Please preserve the API key! It can't be retrieved after it's created. Name <cluster_name>-<kube_namespace>-key Description key_for_registry_for_serviceid_for_kubernetes_cluster_multizone_namespace_test Bound To crn:v1:bluemix:public:iam-identity::a/1bb222bb2b33333ddd3d3333ee4ee444::serviceid:ServiceId-ff55555f-5fff-6666-g6g6-777777h7h7hh Created At 2019-02-01T19:06+0000 API Key i-8i88ii8jjjj9jjj99kkkkkkkkk_k9-llllll11mmm1 Locked false UUID ApiKey-222nn2n2-o3o3-3o3o-4p44-oo444o44o4o4 -
이미지 풀 시크릿을 작성하여 클러스터 프로젝트에 API 키 인증 정보를 저장하십시오. 이미지를 가져오려는 각
icr.io도메인의 각 클러스터의 각 프로젝트에 대해 이 단계를 반복하십시오.oc --namespace <project> create secret docker-registry <secret_name> --docker-server=<registry_URL> --docker-username=iamapikey --docker-password=<api_key_value> --docker-email=<docker_email>--namespace <project>- 필수. 서비스 ID 이름에 사용한 클러스터의 Red Hat OpenShift 프로젝트를 지정합니다.
<secret_name>- 필수. 이미지 풀 시크릿의 이름을 입력합니다.
--docker-server <registry_URL>- 필수. URL을 레지스트리 네임스페이스가 설정된 이미지 레지스트리로 설정합니다. 사용 가능한 도메인은 로컬 도메인을 참조하십시오.
--docker-username iamapikey- 필수. 개인용 레지스트리에 로그인하기 위한 사용자 이름을 입력합니다. IBM Cloud Container Registry를 사용하는 경우
iamapikey를 입력하십시오. --docker-password <token_value>- 필수. 이전에 검색한
API Key의 값을 입력하십시오. --docker-email <docker-email>- 필수. Docker 이메일 주소가 있는 경우 입력하십시오. 없다면 가상 이메일 주소(예:
a@b.c)를 입력하십시오. 이 이메일은 Kubernetes 시크릿을 작성하는 데 필요하지만 작성 후에는 사용되지 않습니다.
-
시크릿이 작성되었는지 확인하십시오. 이미지 풀 시크릿을 생성한 위치로
project를<project>대체하십시오.oc get secrets --namespace <project> -
컨테이너를 배치할 때 프로젝트의 팟(Pod)에서 이미지 풀 시크릿을 사용할 수 있도록 Kubernetes 서비스 계정에 이미지 풀 시크릿을 추가하십시오.
다른 개인용 레지스트리에 저장된 이미지에 액세스
개인용 레지스트리가 이미 있는 경우 레지스트리 인증 정보를 Kubernetes 이미지 풀 시크릿에 저장하고 구성 파일에서 이 시크릿을 참조해야 합니다.
시작하기 전에:
- 클러스터를 작성하십시오.
- Red Hat OpenShift 클러스터에 액세스하십시오.
이미지 풀 시크릿을 작성하려면 다음을 수행하십시오.
-
개인용 레지스트리 인증 정보를 저장하기 위한 Kubernetes 시크릿을 작성하십시오.
oc --namespace <project> create secret docker-registry <secret_name> --docker-server=<registry_URL> --docker-username=<docker_username> --docker-password=<docker_password> --docker-email=<docker_email>--namespace <project>- 필수. 시크릿을 사용하고 컨테이너를 배치하려는 클러스터의 Red Hat OpenShift 프로젝트입니다. 클러스터의 사용 가능한 프로젝트를 나열하려면
oc get projects를 실행하십시오. <secret_name>- 필수. 이미지 풀 시크릿에 사용하려는 이름입니다.
--docker-server <registry_URL>- 필수. 개인용 이미지가 저장된 레지스트리에 대한 URL입니다.
--docker-username <docker_username>- 필수. 개인용 레지스트리에 로그인하기 위한 사용자 이름입니다.
--docker-password <token_value>- 필수. 개인용 레지스트리에 로그인하기 위한 비밀번호(예: 토큰 값)입니다.
--docker-email <docker-email>- 필수. Docker 이메일 주소가 있는 경우 입력하십시오. 없는 경우에는 가상의 이메일 주소(예:
a@b.c)를 입력하십시오. 이 이메일은 Kubernetes 시크릿을 작성하는 데 필요하지만 작성 후에는 사용되지 않습니다.
-
시크릿이 작성되었는지 확인하십시오.
<project>를 이미지 풀 시크릿을 작성한 프로젝트의 이름으로 대체하십시오.oc get secrets --namespace <project>
이미지 풀 시크릿을 사용하여 컨테이너 배치
팟(Pod) 배치에서 이미지 풀 시크릿을 정의하거나, 프로젝트의 Kubernetes 서비스 계정을 지정하지 않은 모든 배치에서 이미지 풀 시크릿을 사용할 수 있도록 Kubernetes 서비스 계정에 이미지 풀 시크릿을 저장할 수 있습니다.
이미지 가져오기(pull) 시크릿이 클러스터에서 사용되는 방식을 계획하려면 다음 옵션 중에서 선택하십시오.
- 팟(Pod) 배치의 이미지 풀 시크릿 참조: 기본적으로 프로젝트의 팟(Pod)에 대해 레지스트리에 액세스 권한을 부여하지 않으려는 경우에는 이 옵션을 사용하십시오. 개발자는 레지스트리에 액세스해야 하는 각 팟(Pod) 배치에 이미지 풀 시크릿을 포함할 수 있습니다.
- Kubernetes 서비스 계정에 이미지 풀 시크릿 저장: 선택한 Red Hat OpenShift 프로젝트의 모든 배치에 대해 레지스트리에 있는 이미지에 액세스 권한을 부여하려면 이 옵션을 사용하십시오. Kubernetes 서비스 계정에 이미지 풀 시크릿에 저장하려면 다음 단계를 사용하십시오.
선택한 프로젝트에 대해 Kubernetes 서비스 계정에 이미지 풀 시크릿 저장
모든 Red Hat OpenShift 프로젝트에는 default라는 이름의 Kubernetes 서비스 계정이 있습니다. 프로젝트 내에서 이미지 풀 시크릿을 이 서비스 계정에 추가하여 팟(pod)이 레지스트리에서 이미지를 가져올 수 있도록 액세스 권한을 부여할 수 있습니다. 서비스 계정을 지정하지 않은 배치는 자동으로 이 Red Hat OpenShift 프로젝트의 default 서비스
계정을 사용합니다.
-
default 서비스 계정에 대해 이미지 풀 시크릿이 이미 존재하고 있지 않은지 확인하십시오.
oc describe serviceaccount default -n <project_name>Image pull secrets 항목에
<none>이 표시되는 경우 이미지 풀 시크릿이 존재하지 않는 것입니다. -
default 서비스 계정에 이미지 풀 시크릿을 추가하십시오.
-
이미지 가져오기(pull) 시크릿이 정의되지 않은 경우 이미지 가져오기(pull) 시크릿을 추가하기 위한 명령 예제
oc patch -n <project_name> serviceaccount/default -p '{"imagePullSecrets":[{"name": "<image_pull_secret_name>"}]}' -
이미지 가져오기(pull) 시크릿이 이미 정의된 경우 이미지 가져오기(pull) 시크릿을 추가하기 위한 명령 예제
oc patch -n <project_name> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"<image_pull_secret_name>"}}]'
-
-
이미지 풀 시크릿이 default 서비스 계정에 추가되었는지 확인하십시오.
oc describe serviceaccount default -n <project_name>출력 예
Name: default Namespace: <namespace_name> Labels: <none> Annotations: <none> Image pull secrets: <image_pull_secret_name> Mountable secrets: default-token-sh2dx Tokens: default-token-sh2dx Events: <none>이미지 풀 시크릿에
<secret> (not found)가 표시되면oc get secrets -n project를 실행하여 서비스 계정과 동일한 프로젝트에 이미지 풀 시크릿이 존재하는지 확인하십시오. -
레지스트리에
mypod.yaml이미지**로부터 컨테이너를 배치하기 위한 **이라는 팟(pod) 구성 파일을 작성하십시오.apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mypod-container image: <region>.icr.io/<project>/<image>:<tag> -
mypod.yaml구성 파일을 적용하여 클러스터에 팟(pod)을 작성하십시오.oc apply -f mypod.yaml
권한 있는 소프트웨어를 가져오기 위한 클러스터 설정
사용자의 사용을 위해 IBM에서 라이센스를 부여한 Helm 차트에서 패키징되는 보호된 컨테이너 이미지의 콜렉션인 권한 있는 소프트웨어를 가져오도록 Red Hat OpenShift on IBM Cloud 클러스터를 설정할 수 있습니다. 권한 있는 소프트웨어는 특수 IBM Cloud Container Registry cp.icr.io 도메인에 저장됩니다. 이 도메인에 액세스하려면 클러스터에 대한 인타이틀먼트
키로 이미지 풀 시크릿을 작성하고 이 권한 있는 소프트웨어를 배치하려는 각 프로젝트의 Kubernetes 서비스 계정에 이 이미지 풀 시크릿을 추가해야 합니다.
시작하기 전에: Red Hat OpenShift 클러스터에 액세스하십시오.
-
권한 있는 소프트웨어 라이브러리에 대한 권한 키를 가져오십시오.
- . MyIBM com 에 로그인한 후 컨테이너 소프트웨어 라이브러리 섹션으로 스크롤하세요. 라이브러리 보기를 클릭하십시오.
- 컨테이너 소프트웨어에 액세스 > 권한 키 페이지에서 키 복사를 클릭하십시오. 이 키는 컨테이너 소프트웨어 라이브러리에서 권한 있는 모든 소프트웨어에 대한 액세스 권한을 부여합니다.
-
권한 있는 컨테이너를 배치하려는 프로젝트에서
cp.icr.io권한 있는 레지스트리에 액세스할 수 있도록 이미지 풀 시크릿을 작성하십시오. ** 값으로 이전에 검색한 **권한 키--docker-password를 사용하십시오. 자세한 정보는 다른 개인용 레지스트리에 저장된 이미지에 액세스를 참조하십시오.oc create secret docker-registry entitled-cp-icr-io --docker-server=cp.icr.io --docker-username=cp --docker-password=<entitlement_key> --docker-email=<docker_email> -n <project> -
프로젝트의 컨테이너가 권한 키를 사용하여 권한 있는 이미지를 가져올 수 있도록 네임스페이스의 서비스 계정에 이미지 풀 시크릿을 추가하십시오. 자세한 정보는 이미지 가져오기 시크릿을 사용하여 컨테이너 배치를 참조하십시오.
oc patch -n <project> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"entitled-cp-icr-io"}}]' -
권한 있는 레지스트리에 있는 이미지로부터 컨테이너를 빌드하는 프로젝트에 팟(Pod)을 작성하십시오.
oc run <pod_name> --image=cp.icr.io/<image_name> -n <project> --generator=run-pod/v1 -
팟(Pod)의 상태가 실행 중인지 검사하여 컨테이너가 권한 있는 이미지에서 빌드할 수 있었는지 확인하십시오.
oc get pod <pod_name> -n <project>
다음에 수행할 작업이 궁금하십니까? 권한 있는 소프트웨어를 통합하는 Helm 차트가 저장되는 권한 있는 Helm 차트 저장소를 설정할 수 있습니다. 클러스터에 이미 Helm을 설치한 경우에는 helm repo add entitled https://raw.githubusercontent.com/IBM/charts/master/repo/entitled를
실행하십시오.
글로벌 풀 시크릿에 개인용 레지스트리 추가
RHEL 워커 노드
RHEL 워커 노드만 사용하는 클러스터에서는 클러스터 내 각 워커 노드가 사설 레지스트리에서 이미지를 풀링하는 데 사용할 수 있는 글로벌 이미지 풀 시크릿을 설정할 수 있습니다.
기본적으로 Red Hat OpenShift on IBM Cloud 클러스터에는 다음 레지스트리에 대한 글로벌 이미지 풀 시크릿이 있으므로 기본 Red Hat OpenShift 컴포넌트를 배치할 수 있습니다.
cloud.openshift.comquay.ioregistry.connect.redhat.comregistry.redhat.io
글로벌 풀 시크릿을 기본 Red Hat 레지스트리에 대한 인증 정보가 없는 풀 시크릿으로 바꾸지 마십시오. 그렇게 하면 OperatorHub와 같이 클러스터에 설치된 기본 Red Hat OpenShift 컴포넌트가 이러한 레지스트리에서 이미지를 가져올 수 없으므로 실패할 수 있습니다.
시작하기 전에:
- JSON 프로세서
jq명령줄 패키지를 다운로드하십시오.jq를 사용하여 기본 글로벌 풀 시크릿의 JSON 값을 추가하려는 개인용 레지스트리 풀 시크릿과 결합하십시오. - Red Hat OpenShift 클러스터에 액세스하십시오.
개인용 레지스트리를 추가하려면 pull-secret 프로젝트에서 글로벌 openshift-config을 편집하십시오.
-
개인용 레지스트리에 액세스하고 디코딩된 시크릿 값을 JSON 파일에 저장하는 인증 정보를 보유하는 시크릿 값을 작성하십시오. 시크릿 값을 작성하면 인증 정보가 Base64에 자동으로 인코딩됩니다.
--dry-run옵션을 사용하면 시크릿 값만 작성하고 클러스터에 시크릿 오브젝트는 작성되지 않습니다. 그런 다음 디코딩된 시크릿 값이 JSON 파일에 저장되어 글로벌 풀 시크릿에서 추후에 사용할 수 있습니다.oc create secret docker-registry <secret_name> --docker-server=<registry_URL> --docker-username=<docker_username> --docker-password=<docker_password> --docker-email=<docker_email> --dry-run=true --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode > myregistryconfigjson--namespace <project>- 필수. 시크릿을 사용하고 컨테이너를 배치하려는 클러스터의 Red Hat OpenShift 프로젝트입니다. 클러스터의 사용 가능한 프로젝트를 나열하려면
oc get ns를 실행하십시오. <secret_name>- 필수. 이미지 풀 시크릿에 사용하려는 이름입니다.
--docker-server <registry_URL>- 필수. 개인용 이미지가 저장된 레지스트리에 대한 URL입니다.
--docker-username <docker_username>- 필수. 개인용 레지스트리에 로그인하기 위한 사용자 이름입니다.
--docker-password <token_value>- 필수. 개인용 레지스트리에 로그인하기 위한 비밀번호(예: 토큰 값)입니다.
--docker-email <docker-email>- 필수. Docker 이메일 주소가 있는 경우 입력하십시오. 없는 경우에는 가상의 이메일 주소(예:
a@b.c)를 입력하십시오. 이 이메일은 Kubernetes 시크릿을 작성하는 데 필요하지만 작성 후에는 사용되지 않습니다. --dry-run=true- 이 옵션을 포함하면 비밀 값만 생성하고, 클러스터에 비밀 객체를 생성 및 저장하지 않습니다.
--output="jsonpath={.data.\.dockerconfigjson}"- Kubernetes 시크릿의 데이터 섹션에서
.dockerconfigjson값만 가져옵니다. | base64 --decode > myregistryconfigjson- 로컬
myregistryconfigjson파일로 디코딩된 시크릿 데이터를 다운로드합니다.
-
기본 글로벌 풀 시크릿의 디코딩된 시크릿 값을 검색하고 값을
dockerconfigjson파일에 저장합니다.oc get secret pull-secret -n openshift-config --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode > dockerconfigjson -
다운로드한 개인용 레지스트리 풀 시크릿
myregistryconfigjson파일을 기본 글로벌 풀 시크릿dockerconfigjson파일과 결합하십시오.jq -s '.[0] * .[1]' dockerconfigjson myregistryconfigjson > dockerconfigjson-merged -
글로벌 풀 시크릿을 결합된
dockerconfigjson-merged파일로 업데이트하십시오.oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=dockerconfigjson-merged -
글로벌 풀 시크릿이 업데이트되었는지 확인하십시오. 개인용 레지스트리 및 기본 Red Hat 레지스트리가 각각 다음 명령의 출력에 있는지 확인하십시오.
oc get secret pull-secret -n openshift-config --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode출력 예
{ "auths": { "cloud.openshift.com": { "auth": "<encoded_string>", "email": "email@example.com" }, "quay.io": { "auth": "<encoded_string>", "email": "email@example.com" }, "registry.connect.redhat.com": { "auth": "<encoded_string>", "email": "email@example.com" }, "registry.redhat.io": { "auth": "<encoded_string>", "email": "email@example.com" }, "<private_registry>": { "username": "iamapikey", "password": "<encoded_string>", "email": "email@example.com", "auth": "<encoded_string>" } } } -
글로벌 구성 변경사항을 적용하려면 클러스터의 모든 작업자 노드를 다시 로드하십시오.
-
클러스터에서 작업자 노드의 ID를 기록해 두십시오.
ibmcloud oc worker ls -c <cluster_name_or_ID> -
클래식 클러스터의 경우 각 작업자 노드를 다시 로드하십시오. 여러 worker node를 재로드하려면 여러
-w옵션을 포함시키되, 서비스 중단을 방지하기 위해 앱에 필요한 만큼의 worker node가 동시에 실행되도록 충분히 남겨두어야 합니다.ibmcloud oc worker reload -c <cluster_name_or_ID> -w <workerID_1> -w <workerID_2> -
VPC 클러스터의 경우 각 작업자 노드를 대체하십시오. 시작하기 전에 사용자의 팟(Pod)을 다시 스케줄링하고 실행을 계속할 수 있도록 클러스터에 충분한 다른 작업자 노드가 있는지 확인하십시오.
ibmcloud oc worker replace --cluster <cluster_name_or_ID> --worker <worker_node_ID>
-
-
작업자 노드가 정상 상태로 돌아오면 작업자 노드에서 글로벌 풀 시크릿이 업데이트되었는지 확인하십시오.
-
작업자 노드에 로그인하도록 디버깅 팟(pod)을 시작하십시오. 이전에
<node_name>에 대해 이전에 검색한 사설 IP를 사용하십시오.oc debug node/<node_name> -
작업자 노드의 파일을 볼 수 있도록 루트 디렉토리를 호스트로 변경하십시오.
chroot /host -
Docker 구성 파일에 사용자가 설정한 글로벌 풀 시크릿과 일치하는 레지스트리 인증 정보가 있는지 확인하십시오.
vi /.docker/config.json
-
글로벌 풀 시크릿 업데이트
RHCOS 워커 노드 RHEL 워커 노드
RHCOS 워커 또는 조합 또는 RHCOS와 RHEL 워커를 사용하는 클러스터에서는 다음 단계를 완료하여 Red Hat OpenShift on IBM Cloud 클러스터에서 글로벌 풀 시크릿을 업데이트할 수 있습니다.
기본적으로 Red Hat OpenShift on IBM Cloud 클러스터에는 다음 레지스트리에 대한 글로벌 이미지 풀 시크릿이 있으므로 기본 Red Hat OpenShift 컴포넌트를 배치할 수 있습니다.
cloud.openshift.comquay.ioregistry.connect.redhat.comregistry.redhat.io
글로벌 풀 시크릿을 기본 Red Hat 레지스트리에 대한 인증 정보가 없는 풀 시크릿으로 바꾸지 마십시오. 그렇게 하면 OperatorHub와 같이 클러스터에 설치된 기본 Red Hat OpenShift 컴포넌트가 이러한 레지스트리에서 이미지를 가져올 수 없으므로 실패할 수 있습니다.
- 사용하려는 레지스트리에 대한 자격 증명이 있는 비밀을 만듭니다.
oc create secret docker-registry docker-auth-secret \ --docker-server=REGISTRY \ --docker-username=USERNAME \ --docker-password=PASSWORD \ --namespace kube-system - DaemonSet 생성하여 모든 워커 노드에 시크릿을 적용합니다.
cat << EOF | oc create -f - apiVersion: apps/v1 kind: DaemonSet metadata: name: update-docker-config namespace: kube-system labels: app: update-docker-config spec: selector: matchLabels: name: update-docker-config template: metadata: labels: name: update-docker-config spec: initContainers: - command: ["/bin/sh", "-c"] args: - > echo "Checking if RHEL or RHCOS host"; [[ -s /docker-config/.docker/config.json ]] && CONFIG_PATH=/docker-config/.docker || CONFIG_PATH=/docker-config/root/.docker; echo "Backing up or restoring config.json"; [[ -s \$CONFIG_PATH/config.json ]] && cp \$CONFIG_PATH/config.json \$CONFIG_PATH/config.json.bak || cp \$CONFIG_PATH/config.json.bak \$CONFIG_PATH/config.json; echo "Merging secret with config.json"; /host/usr/bin/jq -s '.[0] * .[1]' \$CONFIG_PATH/config.json /auth/.dockerconfigjson > \$CONFIG_PATH/config.tmp; mv \$CONFIG_PATH/config.tmp \$CONFIG_PATH/config.json; echo "Sending signal to reload crio config"; pidof crio; kill -1 \$(pidof crio) image: icr.io/ibm/alpine:latest imagePullPolicy: IfNotPresent name: updater resources: {} securityContext: privileged: true volumeMounts: - name: docker-auth-secret mountPath: /auth - name: docker mountPath: /docker-config - name: bin mountPath: /host/usr/bin - name: lib64 mountPath: /lib64 containers: - resources: requests: cpu: 0.01 image: icr.io/ibm/alpine:latest name: sleepforever command: ["/bin/sh", "-c"] args: - > while true; do sleep 100000; done hostPID: true volumes: - name: docker-auth-secret secret: secretName: docker-auth-secret - name: docker hostPath: path: / - name: bin hostPath: path: /usr/bin - name: lib64 hostPath: path: /lib64 hostPathType: Directory EOF - 포드가 실행 중인지 확인하십시오.
oc get daemonset -n kube-system update-docker-config
IBM Cloud Kubernetes Service containerd 사용자 정의 레지스트리 구성 업데이트
Kubernetes 버전 1.22 이상에서는 작업자 노드에서 containerd 구성 파일을 사용하여 컨테이너 레지스트리에서 가져오기를 구성할 수 있습니다. daemonset를 사용하여 클러스터의 모든 노드에서 구성을 업데이트할 수 있습니다. 이는 작업자 노드가 다시 로드되거나 새 작업자가 추가될 때 구성이 삭제되지 않도록 합니다.
containerd 사용자 정의 레지스트리 구성을 업데이트하는 daemonset의 예
예제 YAML 파일을 통해 모든 작업자 노드에서 실행되는 daemonset를 정의하여 containerd 레지스트리 호스트 구성을 설정하거나 업데이트하고 해당 containerd 레지스트리 경로에 마운트하십시오.
이 예에서는 dockerhub에 대해 다음 레지스트리 호스트 구성을 설정합니다. 이 레지스트리 호스트 구성은 이미 제공되었으며 작업자 프로비저닝 단계 중에 자동으로 구성됩니다. 컨테이너는 init 배포 후 및 워커 노드 재로드 또는 재시작 후 각 워커 노드에서 hosts.toml 초기화됩니다.
server = "https://docker.io"
[host."https://registry-1.docker.io"]
capabilities = ["pull", "resolve"]
예제 YAML 파일:
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
name: containerd-dockerhub-registry-config
name: containerd-dockerhub-registry-config
namespace: kube-system
spec:
selector:
matchLabels:
name: containerd-dockerhub-registry-config
template:
metadata:
labels:
name: containerd-dockerhub-registry-config
spec:
initContainers:
- image: alpine:3.13.6
name: containerd-dockerhub-registry-config
command:
- /bin/sh
- -c
- |
#!/bin/sh
set -uo pipefail
cat << EOF > /etc/containerd/certs.d/docker.io/hosts.toml
server = "https://docker.io"
[host."https://registry-1.docker.io"]
capabilities = ["pull", "resolve"]
EOF
volumeMounts:
- mountPath: /etc/containerd/certs.d/docker.io/
name: dockerhub-registry-config
containers:
- name: pause
image: "us.icr.io/armada-master/pause:3.5"
imagePullPolicy: IfNotPresent
volumes:
- name: dockerhub-registry-config
hostPath:
path: /etc/containerd/certs.d/docker.io/
containerd 레지스트리 호스트 구성 업데이트에 대한 자세한 정보는 containerd 문서를 참조하십시오.