컨테이너 레지스트리에 액세스
IBM Cloud® Code Engine에서 사용되는 이미지는 보통 공용(공용 레지스트리)에서 액세스 가능하거나 소형 사용자 그룹(개인용 레지스트리)용으로 액세스가 제한되어 설정되는 레지스트리에 저장됩니다.
컨테이너 레지스트리 또는 레지스트리는 컨테이너 이미지를 저장하는 서비스입니다. 예를 들어, IBM Cloud Container Registry 및 Docker Hub가 컨테이너 레지스트리입니다. 컨테이너 레지스트리는 공용 또는 개인용일 수 있습니다. 공용 컨테이너 레지스트리에 액세스하려면 인증 정보가 필요하지 않습니다. 반대로, 개인용 레지스트리에 액세스하려면 인증 정보가 필요합니다.
Code Engine에서 다음 조치를 완료하려면 컨테이너 레지스트리에 대한 액세스 권한이 필요합니다.
- 앱 또는 작업을 실행하기 위해 컨테이너 이미지 검색(또는 "가져오기")
- 새로 작성된 컨테이너 이미지를 이미지 빌드의 출력으로 저장
- 로컬 소스에서 빌드를 실행할 때 로컬 파일 저장 및 검색
Code Engine은 시스템과 레지스트리 간 상호작용에 대한 많은 기본 세부사항을 처리합니다.
레지스트리에서 이미지를 가져오기 위해 Code Engine은 imagePullSecret이라는 특수 유형의 Kubernetes 시크릿을 사용합니다. 이 이미지 가져오기 시크릿에는 컨테이너 레지스트리에 액세스하는 데 필요한 인증 정보가 저장됩니다. 이미지를 가져오기 위해 Code Engine 로 컨테이너 레지스트리에 액세스 권한을 추가하면 이미지 가져오기 시크릿을 만드는 것입니다. 이미지 풀 시크릿에 대한 자세한
내용은 Kubernetes 문서를 참조하세요.
이미지 레지스트리 유형
일반적으로 이미지는 공용으로 액세스 가능한 레지스트리(공용 레지스트리) 또는 소규모의 사용자 그룹에 대해 제한된 액세스를 제공하는 레지스트리(개인용 레지스트리)에 저장됩니다.
공용 Docker Hub와 같은 공용 레지스트리를 사용하면 Docker 및 Code Engine을 시작하여 첫 번째 애플리케이션 또는 작업을 작성할 수 있습니다. 그러나 엔터프라이즈 워크로드의 경우 IBM Cloud Container Registry에 제공된 것과 같은 개인용 레지스트리를 사용하여 권한이 없는 사용자가 이미지를 사용하지 못하도록 보호하십시오. 비공개 레지스트리의 경우 레지스트리 비밀을 사용하여 비공개 레지스트리에 액세스할 수 있는 자격 증명을 사용할 수 있는지 확인합니다.
| 레지스트리 | 설명 |
|---|---|
| IBM Cloud Container Registry |
이러한 유형의 레지스트리를 사용하면 IBM Cloud Container Registry 에서 사용자 간에 이미지를 안전하게 저장하고 공유할 수 있는 자체 보안 이미지 저장소를 설정할 수 있습니다.
|
| 기타 개인용 레지스트리 |
액세스 권한을 추가하여 기존 개인용 레지스트리를 Code Engine에 연결합니다. 액세스 권한을 추가하면 레지스트리 URL과 인증 정보가 Kubernetes 시크릿에 저장됩니다.
|
| 공용 Docker Hub |
이 유형의 레지스트리를 사용하여 Code Engine 애플리케이션 또는 작업에서 직접 Docker Hub의 기존 공개 이미지를 가져올 수 있습니다. 중요:
공개 Docker 허브를 사용하면 가능합니다:
|
레지스트리 시크릿의 유형
Code Engine 은 레지스트리의 이미지에 액세스하기 위해 다음 유형의 레지스트리 비밀 중 하나를 사용합니다.
- Code Engine 관리되는 비밀 - 레지스트리가 계정에 있는 IBM Cloud Container Registry 네임스페이스를 사용하는 경우 Code Engine 에서 레지스트리 비밀을 생성하고 관리하도록 할 수 있습니다. 콘솔에서 자동으로 작성된 이 레지스트리 시크릿을
Code Engine managed secret라고 합니다. CLI에서 자동으로 생성되는 레지스트리 비밀의 이름은ce-auto-icr-private-<region>형식입니다. - 사용자 관리 시크릿 - 이 시크릿은 사용자가 작성하고 관리하는 시크릿입니다. API 키를 사용하여 계정의 이미지에 액세스하거나 선택한 컨테이너 레지스트리에 대한 액세스 토큰을 사용할 수 있습니다(예: Docker Hub). 이 경우 콘솔에 나열되는 레지스트리 비밀은 레지스트리 비밀의 이름입니다.
레지스트리가 공개이고 자격 증명이 필요하지 않은 경우(예: icr.io/codeengine 또는 Docker 허브 공개에 있는 Code Engine 샘플 이미지)에는 레지스트리 비밀 번호가 필요하지 않습니다. 이 경우 콘솔에 나열되는 레지스트리 암호는 None 입니다.
공용 계정의 이미지에 액세스
이미지가 공용 Docker Hub와 같은 공용 저장소에 저장되는 경우 애플리케이션을 배치하거나 작업을 실행할 때 이미지를 직접 참고만 하면 됩니다. 공용 레지스트리에 이미지를 저장하는 것은 애플리케이션 및 작업을 시작하는 데 좋지만 엔터프라이즈 이미지는 개인용 레지스트리에 저장해야 합니다.
콘솔에서 사용자 고유 계정의 이미지에 액세스
사용자가 소유하거나 관리하는 계정에서 Code Engine에 액세스하는 경우, 콘솔에서 앱, 작업 또는 빌드를 작성하거나 업데이트할 때 Code Engine은 계정의 IBM Cloud Container Registry 네임스페이스에서 이미지를 자동으로 푸시하고 가져올 수 있습니다. 사용자가 이미지를 푸시하면 Code Engine은 네임스페이스를 작성할 수도 있습니다. 자세한 정보는 다음 주제를 참조하십시오.
API 키를 사용하여 계정의 이미지에 액세스
CLI를 사용하여 Code Engine에 액세스하는 경우 먼저 IAM API 키를 작성한 후 Code Engine에 레지스트리 액세스로 IAM API 키를 저장하십시오.
다음 단계에서는 사용자 ID의 인증 정보를 저장하는 API 키를 작성합니다. 사용자 ID를 사용하는 대신, IBM Cloud에 대한 IBM Cloud Container Registry IAM 서비스 액세스 정책이 있는 서비스 ID의 API 키를 작성할 수 있습니다. 사용자 ID 인증을 선택하는 경우 사용자가 기능 ID인지 확인하거나, Code Engine이 레지스트리에 계속 액세스할 수 있도록 사용자가 떠나는 경우에 대한 계획을 세우십시오.
콘솔에서 API 키 작성
콘솔에서 IBM Cloud IAM API 키를 작성하려면 다음을 수행하십시오.
-
액세스(IAM) 개요를 실행하십시오.
-
API 키를 선택하십시오.
-
IBM Cloud API 키 작성을 클릭하십시오.
-
API 키에 대한 이름과 선택적 설명을 입력하고 작성을 클릭하십시오.
-
API 키를 복사하거나 다운로드를 클릭하여 저장하십시오.
이 API 키는 다시 볼 수 없으므로 안전한 장소에 기록해 둬야 합니다.
이제 API 키를 작성했으므로 레지스트리 액세스로 저장하십시오.
CLI를 사용하여 API 키 작성
CLI로 IBM Cloud IAM API 키를 작성하려면 iam api-key-create 명령을 실행하십시오. 예를 들어 My CLI API key 설명이 포함된 cliapikey 라는 API 키를 생성하고 key_file 라는 파일에 저장하려면 다음 명령을 실행합니다:
ibmcloud iam api-key-create cliapikey -d "My CLI API key" --file key_file
키를 파일에 저장하지 않도록 선택한 경우 키를 작성할 때 표시되는 API 키를 기록해 두어야 합니다. 나중에 검색할 수 없습니다.
이제 API 키를 작성했으므로 레지스트리 액세스로 저장하십시오.
다른 계정의 이미지에 액세스
IBM Cloud IAM 액세스 정책을 사용자 또는 서비스 ID에 지정하여 권한을 특정 레지스트리 이미지 네임스페이스 또는 조치(예: 푸시 또는 가져오기)로 제한할 수 있습니다. 그런 다음 API 키를 작성하고 이러한 레지스트리 인증 정보를 Code Engine에 저장하십시오.
예를 들어, 다른 IBM Cloud 계정의 이미지에 액세스하려면 해당 계정에 있는 사용자 또는 서비스 ID의 IBM Cloud Container Registry 인증 정보를 저장하는 API 키를 작성하십시오. 그런 다음 Code Engine에서 해당 키를 사용하여 계정에서 액세스를 작성하십시오.
개인용 Docker Hub 계정의 이미지에 액세스
개인용 Docker Hub 계정의 이미지에 액세스하려면 비밀번호 또는 액세스 토큰을 제공하여 레지스트리 액세스를 작성하십시오. 액세스 토큰을 사용하면 비밀번호를 변경하지 않고도 Docker Hub 계정에 대한 액세스 권한을 더 쉽게 부여하고 취소할 수 있습니다. 액세스 토큰 및 Docker 허브에 대한 자세한 내용은 액세스 토큰 만들기 및 관리하기를 참조하세요.
비밀번호를 직접 사용할지 아니면 액세스 토큰을 작성할지 여부를 결정한 후 레지스트리 액세스를 작성하십시오.
Code Engine에 레지스트리 액세스 권한 추가
다른 IBM Cloud Container Registry 계정에서 IBM Cloud에 대한 액세스를 설정하거나 개인용 Docker Hub 계정에서 이미지를 가져오거나 Code Engine CLI를 사용하여 이미지를 가져오거나 푸시하기 위해 IBM API 키 또는 Docker Hub 비밀번호 또는 액세스 토큰을 사용하면 Code Engine을 통해 레지스트리 액세스를 작성하여 인증 키 또는 토큰을 저장할 수 있습니다.
콘솔에서 레지스트리 액세스 권한 추가
시작하기 전에 프로젝트를 작성하십시오.
- 프로젝트가 활성 상태가 되면 Code Engine 프로젝트 페이지에서 프로젝트 이름을 클릭합니다.
- 컴포넌트 페이지에서 시크릿 및 configmap을 클릭하십시오.
- 시크릿 및 configmap 페이지에서 작성을 클릭하여 시크릿을 작성하십시오.
- 시크릿 또는 configmap 작성 페이지에서 다음 단계를 완료하십시오.
- 레지스트리 시크릿을 선택하고 다음을 클릭하십시오.
- 이름을 입력합니다(예:
mysecret-registry). - 이 시크릿의 대상 레지스트리를 지정하십시오 (예: IBM Cloud Container Registry 또는 Docker Hub).
- 레지스트리의 위치를 지정하십시오.
- 사용자 이름을 지정합니다. 이 시크릿이 IBM Cloud Container Registry에 대한 것인 경우 사용자 이름은
iamapikey입니다. 이 시크릿이 Docker 허브에 대한 것이면 Docker ID입니다. - 사용자 아이디에 대한 자격 증명을 입력합니다. IBM Cloud Container Registry의 경우 IAM API키를 사용하십시오. Docker Hub의 경우 Docker Hub 비밀번호 또는 액세스 토큰을 사용할 수 있습니다. 기타 대상 레지스트리의 경우 사용자 이름에 대한 비밀번호 또는 API키를 지정하십시오.
- 작성을 클릭하여 시크릿을 작성하십시오.
이제 콘솔에서 비밀번호가 만들어졌으므로 비밀번호 및 구성 맵 페이지로 이동하여 정의된 비밀번호 및 구성 맵 목록을 확인합니다. 필터를 적용하여 필요에 맞게 목록을 사용자 정의할 수 있습니다.
애플리케이션 또는 작업을 작성하거나 이미지를 빌드할 때 컨테이너 레지스트리에 대한 액세스 권한을 추가할 수 있습니다. 이미지 구성을 클릭하고 이미지가 저장된 레지스트리와 이미지 검색에 사용할 레지스트리 액세스를 포함하여 실행할 컨테이너 이미지를 지정하십시오.
CLI를 사용하여 레지스트리 액세스 권한 추가
CLI 버전 1.42.0 부터는 CLI에서 비밀 번호를 정의하고 작업하는 것이 secret 명령 그룹으로 통합됩니다. ibmcloud ce secret 명령을 참조하십시오. --format 옵션을 사용하여 basic_auth, generic, hmac, ssh, tls 또는 registry 과 같은 비밀 카테고리를 지정합니다. 명령 그룹을 계속 사용할 수 있지만 registry 명령 그룹을 계속 사용할 수 있지만, 통합된
secret 명령 그룹을 활용하세요. 컨테이너 레지스트리에 액세스하기 위한 비밀번호를 만들려면 ibmcloud ce secret create --format registry 명령을 사용합니다.
Code Engine 에서 비밀 번호로 작업하는 방법에 대해 자세히 알아보려면 비밀 번호로 작업하기를 참조하세요.
CLI를 사용하여 IBM Cloud Container Registry 또는 Docker 허브 액세스를 추가하려면 secret create --format registry 명령을 사용합니다. 이 명령에는 레지스트리 비밀 이름, 레지스트리 서버의 URL, 레지스트리 서버에 액세스하기 위한 사용자 이름 및 비밀번호 정보가 필요하며 다른 선택적 인수도 사용할 수 있습니다. 전체
옵션 목록을 보려면 ibmcloud ce secret create 명령을 참조하세요.
IBM Cloud Container Registry 예를 들어 다음 명령은 us.icr.io 레지스트리 서버에 있는 myregistry 인스턴스에 대한 레지스트리 액세스를 생성합니다:
ibmcloud ce secret create --format registry --name myregistry --server us.icr.io --username iamapikey --password API_KEY
출력 예
Creating registry secret 'myregistry'...
OK
다음 표에는 이 예제에서 사용된 secret create --format registry 명령과 함께 사용된 옵션을 요약한 표입니다. 명령 및 해당 옵션에 대한 자세한 내용은 ibmcloud ce secret create 명령을 참조하세요.
| 옵션 | 설명 |
|---|---|
--name |
레지스트리 본인확인정보의 이름입니다. 프로젝트 내에서 고유한 이름을 사용하십시오. 이 값은 필수입니다.
|
--server |
레지스트리 서버의 URL을 입력하십시오. Container Registry의 경우 서버 이름은 <region>.icr.io입니다. 예를 들어, us.icr.io입니다. Docker Hub의 경우, 값은 https://index.docker.io/v1/입니다. |
--username |
레지스트리 서버에 액세스하려면 사용자 이름을 입력하십시오. Container Registry의 경우 iamapikey입니다. Docker Hub의 경우 Docker ID입니다. |
--password |
비밀번호를 입력하십시오. Container Registry의 경우 비밀번호는 API 키입니다. Docker Hub의 경우 Docker Hub 비밀번호 또는 액세스 토큰을 사용할 수 있습니다. |
Code Engine 워크로드의 Container Registry 에 대한 액세스 제어
Code Engine 가 이미지를 가져올 때 IBM Cloud Container Registry 에 대한 액세스를 제어하려 한다고 가정합니다. 예를 들어, 특정 IP 주소에 대한 Container Registry 에 대한 액세스를 제어하려고 합니다. 다음 접근 방식을 고려하십시오.
-
컨텍스트 기반 제한사항 을 사용하십시오. 컨텍스트 기반 제한사항을 사용하여 Code Engine 프로젝트의 IP 주소가 변경되는 경우 액세스를 변경할 필요가 없습니다. Container Registry 에 대한 액세스를 네트워크 구역으로 제한할 수 있습니다. 여기서 네트워크 구역에는 Code Engine 및 레지스트리에 대한 액세스가 필요한 모든 항목이 포함됩니다.
-
IBM Cloud Container Registry 에 대한 공용 액세스를 사용 안함으로 설정하고 Code Engine 가 공용 엔드포인트 대신 개인용 엔드포인트를 사용하는지 확인하십시오. Container Registry에 대한 연결 보안 을 참조하십시오.
-
특정 IP 범위별로 액세스를 제어하려면 API 엔드포인트를 사용하여 특정 Code Engine 프로젝트의 IP 주소를 페치하십시오. 이러한 IP 주소는 변경될 수 있으므로 이 경우 적절한 단계를 수행해야 합니다. Code Engine 공용 및 사설 IP 주소 및 내 Code Engine 앱을 허용 목록에 어떻게 추가할 수 있습니까 를 참조하십시오.
레지스트리의 이미지에 대한 고려사항
앱 또는 작업에 사용되는 이미지의 이름은 다음 형식 중 하나여야 합니다.
REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY:TAG여기서REGISTRY및TAG는 선택사항입니다.REGISTRY를 지정하지 않으면 기본값은docker.io입니다.TAG가 지정되지 않은 경우 콜론 (:) 을 포함하지 마십시오.TAG의 기본값은latest입니다.REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY@IMAGEID여기서REGISTRY는 선택사항입니다.REGISTRY가 지정되지 않은 경우 기본값은 Docker 조직으로서docker.io및ibm입니다.
| 컴포넌트 | 허용되는 문자 | 길이 | 추가 규칙 |
|---|---|---|---|
REGISTRY |
a-zA-Z0-9 -_. --__ |
1-253 | (0-127Periods)(label:1-63,noDashOnEnd) |
NAMESPACE |
a-z 0-9 -_ --__ |
4-30 | (start/end with letterOrNumber) |
DOCKERUSERorDOCKERORG |
a-z 0-9 |
4-30 | |
REPOSITORY |
a-z 0-9 -_. / |
2-255 | (start/end with letterOrNumber) |
TAG |
a-zA-Z0-9 -_. --__.. |
0-128 | (NOT start with periodOrDash) |
IMAGEID |
a-z 0-9 : |
(startwith sha256: noOtherColon) |
이미지 이름의 파트는 다음 기준을 충족해야 합니다.
REGISTRY는 253자이하여야 하며 소문자 또는 대문자, 숫자, 마침표 (.), 하이픈 (-) 및 밑줄 (_) 을 포함할 수 있습니다. 마지막 문자로 대시 (.) 를 사용하지 마십시오. 127개이상의 마침표 (.) 를 사용하지 마십시오. 마침표 사이의 레이블 길이는 1-63자입니다.NAMESPACE는 4-30자사이여야 하며 소문자 또는 숫자로 시작하고 끝나야 합니다.NAMESPACE에는 소문자 영숫자 문자, 하이픈 (-) 및 밑줄 (_) 이 포함될 수 있습니다.DOCKERUSERorDOCKERORG는NAMESPACE대신 Docker 레지스트리에 사용할 수 있습니다. Docker 사용자 이름 또는 Docker 조직을 지정하십시오. Docker 사용자 이름 및 조직은 4-30자여야 하며 소문자 영숫자 또는 숫자만 포함해야 합니다.REPOSITORY는 2-255자사이여야 하며 소문자 또는 숫자로 시작하고 끝나야 합니다.REPOSITORY에는 소문자 영숫자 문자, 슬래시 (/), 마침표 (.), 하이픈 (-) 및 밑줄 (_) 이 포함될 수 있습니다.TAG는 0-128자사이여야 하며 소문자 또는 대문자, 숫자, 마침표 (.), 하이픈 (-) 및 밑줄 (_) 을 포함할 수 있습니다.TAG은 마침표나 대시로 시작하지 않아야 합니다.TAG를 포함하지 않는 경우 콜론도 포함하지 마십시오.IMAGEID의 접두부는sha256:이며 소문자 및 숫자를 포함할 수 있습니다.