6.3 Private Repository를 위한 image pull secret 사용하기
컨테이너 이미지 레지스트리 중 Private Repository에서 이미지를 가져오기 위해서는 사용자 인증 정보가 필요합니다. 쿠버네티스에서는 imagePullSecrets을 사용합니다. Container Instance에서도 imagePullSecrets를 설정하여, 사용자 인증 정보를 입력합니다.
- OCI 콘솔에서는 인증정보를 Username / Password로 입력하는 것을 지원히지만, OCI Vault 연동은 아직 지원하고 있지 않습니다. 작성일 기준으로는 API, SDK, CLI를 통해서만 가능합니다.
- 예시에서는 Private Repository로 OCIR 내 Private Repository를 사용합니다.
기본 인증정보 사용하기
-
1.5 OCIR 이미지 사용하기을 참조하여 OCIR Private Registry에 사용할 이미지를 미리 넣어 둡니다.
-
OCI CLI나 REST API를 이용할 때 아래와 같이 imagePullSecrets을 추가할 수 있습니다.
{ ... "containers": [ ... ], "imagePullSecrets": [ { "username": "string", "password": "string", "registryEndpoint": "string", "secretType": "BASIC" } ] }
-
OCIR 접속 username과 password(AuthToken)을 base64로 인코딩합니다.
-
예시
$ echo -n "cnxxxxxxxx/kildong.example.com" | base64 Y254eHh4eHh4eC9raWxkb25nLmV4YW1wbGUuY29t $ echo -n "ps;yps;yps;yps;yps;y" | base64 cHM7eXBzO3lwczt5cHM7eXBzO3k=
-
-
이전 테스트에서 사용한 JSON 파일을 업데이트합니다.
-
이미지 주소를 OCIR 주소로 변경합니다.
-
imagePullSecrets을 추가합니다.
{ "displayName": "wordpress", ... "containers": [ { "displayName": "mysql", "imageUrl": "yny.ocir.io/cnxxxxxxxx/mysql:8.0.31", ... }, { "displayName": "wordpress", "imageUrl": "yny.ocir.io/cnxxxxxxxx/wordpress:latest", ... } ], "imagePullSecrets": [ { "registryEndpoint": "yny.ocir.io", "secretType": "BASIC", "username": "Y254eHh4eHh4eC9raWxkb25nLmV4YW1wbGUuY29t", "password": "cHM7eXBzO3lwczt5cHM7eXBzO3k=" } ] }
-
-
업데이트한 JSON 파일로 Container Instance를 생성합니다.
oci container-instances container-instance create --from-json=file://wordpress-secret-basic.json
-
CLI로 생성한 결과를 보면, 아래와 같이 OCIR상의 Private Registry에 있는 이미지로 가져와서 실행중인 것을 볼 수 있습니다.
imagePullSecrets 저장소로 OCI Vault 사용하기
OCI Vault 만들기
-
OCI 콘솔에 로그인합니다.
-
좌측 상단 햄버거 메뉴에서 Identity & Security > Vault로 이동합니다.
-
Create Vault를 클릭합니다.
-
위치할 Compartment를 선택하고, 이름을 입력하여 생성합니다.
-
생성된 Vault를 클릭합니다.
마스터 키 만들기
-
먼저 마스터키 생성을 위해 Resources > Master Encryption Keys로 이동합니다.
-
Create Key를 클릭합니다.
-
마스터 키 생성 정보를 입력합니다.
- Create in Compartment: 위치할 Compartment 지정
- Protection Mode: HSM(Hardware Security Module) 또는 Software 중에 선택, Software는 무료
- Name: 원하는 이름 입력
- Key Shape Algorithm: Secret 생성시 사용할 것이므로 대칭키인 AES를 선택합니다.
-
Create Key를 클릭하여 키를 생성합니다.
암호를 저장할 Secret 만들기
-
Secret 생성을 위해 Resources > Secrets로 이동합니다.
-
Create Secret을 클릭합니다.
-
Secret 생성 정보를 입력합니다.
-
Name: 이름을 입력합니다. 예, ocir-imagePullSecrets
-
Encryption Key: 앞서 생성한 마스터키 선택
-
Secret Contents: 다음 JSON 포맷으로 Private Repository에 대한 인증정보를 저장합니다.
{ "username": "container-instance-user", "password": "<password>" }
-
Container Instance를 위한 Policy 만들기
생성될 Container Instance에서 앞서 만든 OCI Vault상에 있는 Secret에 대한 읽기 권한이 필요합니다.
-
좌측 상단 햄버거 메뉴에서 Identity & Security > Policies로 이동합니다.
-
다음 Policy를 추가합니다. compartment-name은 Secret이 위치한 Compartment의 이름을 사용합니다.
allow any-user to read secret-bundles in compartment <compartment-name> where all {request.principal.type='computecontainerinstance'}
Container Instance 만들기
-
이전 테스트에서 사용한 JSON 파일을 업데이트합니다.
-
이미지 주소를 OCIR 주소로 변경합니다.
-
imagePullSecrets을 추가합니다.
- OCI Vault 내에 생성한 Secret의 OCID를 입력
{ "displayName": "wordpress", ... "containers": [ { "displayName": "mysql", "imageUrl": "yny.ocir.io/cnxxxxxxxx/mysql:8.0.31", ... }, { "displayName": "wordpress", "imageUrl": "yny.ocir.io/cnxxxxxxxx/wordpress:latest", ... } ], "imagePullSecrets": [ { "registryEndpoint": "yny.ocir.io", "secretType": "VAULT", "secretId": "ocid1.vaultsecret.oc1.<region_code>.<unique_ID>" } ] }
-
-
업데이트한 JSON 파일로 Container Instance를 생성합니다.
oci container-instances container-instance create --from-json=file://wordpress-secret-vault.json
-
CLI로 생성한 결과를 보면, 아래와 같이 OCIR상의 Private Registry에 있는 이미지로 가져와서 실행중인 것을 볼 수 있습니다.
이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.