TheKoguryo's 기술 블로그

 Version 2024.04.01

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. 1.5 OCIR 이미지 사용하기을 참조하여 OCIR Private Registry에 사용할 이미지를 미리 넣어 둡니다.

  2. OCI CLI나 REST API를 이용할 때 아래와 같이 imagePullSecrets을 추가할 수 있습니다.

    {
      ...
      "containers": [
        ...  
      ],
      "imagePullSecrets": [
        {
          "username": "string",
          "password": "string",
          "registryEndpoint": "string",
          "secretType": "BASIC"
        }
      ]  
    }  
    
  3. OCIR 접속 username과 password(AuthToken)을 base64로 인코딩합니다.

    • 예시

      $ echo -n "cnxxxxxxxx/kildong.example.com" | base64
      Y254eHh4eHh4eC9raWxkb25nLmV4YW1wbGUuY29t
      $ echo -n "ps;yps;yps;yps;yps;y" | base64
      cHM7eXBzO3lwczt5cHM7eXBzO3k=
      
  4. 이전 테스트에서 사용한 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="
          }
        ]  
      }  
      
  5. 업데이트한 JSON 파일로 Container Instance를 생성합니다.

    oci container-instances container-instance create --from-json=file://wordpress-secret-basic.json
    
  6. CLI로 생성한 결과를 보면, 아래와 같이 OCIR상의 Private Registry에 있는 이미지로 가져와서 실행중인 것을 볼 수 있습니다.

    image-20230511183750093

imagePullSecrets 저장소로 OCI Vault 사용하기

OCI Vault 만들기

  1. OCI 콘솔에 로그인합니다.

  2. 좌측 상단 햄버거 메뉴에서 Identity & Security > Vault로 이동합니다.

  3. Create Vault를 클릭합니다.

    image-20230503132037374

  4. 위치할 Compartment를 선택하고, 이름을 입력하여 생성합니다.

    image-20230503132358134

  5. 생성된 Vault를 클릭합니다.

마스터 키 만들기

  1. 먼저 마스터키 생성을 위해 Resources > Master Encryption Keys로 이동합니다.

  2. Create Key를 클릭합니다.

  3. 마스터 키 생성 정보를 입력합니다.

    • Create in Compartment: 위치할 Compartment 지정
    • Protection Mode: HSM(Hardware Security Module) 또는 Software 중에 선택, Software는 무료
    • Name: 원하는 이름 입력
    • Key Shape Algorithm: Secret 생성시 사용할 것이므로 대칭키인 AES를 선택합니다.

    image-20230503133352999

  4. Create Key를 클릭하여 키를 생성합니다.

암호를 저장할 Secret 만들기

  1. Secret 생성을 위해 Resources > Secrets로 이동합니다.

  2. Create Secret을 클릭합니다.

  3. Secret 생성 정보를 입력합니다.

    • Name: 이름을 입력합니다. 예, ocir-imagePullSecrets

    • Encryption Key: 앞서 생성한 마스터키 선택

    • Secret Contents: 다음 JSON 포맷으로 Private Repository에 대한 인증정보를 저장합니다.

      {
        "username": "container-instance-user",
        "password": "<password>"
      }
      

    image-20230511192038220

Container Instance를 위한 Policy 만들기

생성될 Container Instance에서 앞서 만든 OCI Vault상에 있는 Secret에 대한 읽기 권한이 필요합니다.

  1. 좌측 상단 햄버거 메뉴에서 Identity & Security > Policies로 이동합니다.

  2. 다음 Policy를 추가합니다. compartment-name은 Secret이 위치한 Compartment의 이름을 사용합니다.

    allow any-user to read secret-bundles in compartment <compartment-name> where all {request.principal.type='computecontainerinstance'}
    

Container Instance 만들기

  1. 이전 테스트에서 사용한 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>"
          }
        ] 
      }  
      
  2. 업데이트한 JSON 파일로 Container Instance를 생성합니다.

    oci container-instances container-instance create --from-json=file://wordpress-secret-vault.json
    
  3. CLI로 생성한 결과를 보면, 아래와 같이 OCIR상의 Private Registry에 있는 이미지로 가져와서 실행중인 것을 볼 수 있습니다.

    image-20230511193331619



이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.

Last updated on 11 May 2023