Private repository에서 이미지 받기

작성자 김아름 수정일 2022-10-17 15:41

#SparklingSoDA4.0, #스파클링소다4.0, #nexus, #넥서스, #image

아티클 관련 제품: SparklingSoDA4.0

들어가며

  • 외부망 연결이 되어있지 않은 서버의 경우, 도커 이미지를 사용하기 위해 사설 repository를 구축하게 됩니다.
  • 이후 pod를 생성할 때 사설 repository에서 이미지를 받아오도록 명시합니다.
  • docker login까지 모두 해 놓았지만 image pull Error가 발생할 수 있습니다.
  • 해당 이슈에 대한 해결 방안에 대해 알아보겠습니다.



secret 생성하기

사설 repository에서 이미지를 받아오도록 하려면, 쿠버네티스 시크릿 설정이 필요합니다.


커맨드 라인을 통해 secret을 생성하여 활용하는 방법을 알아보겠습니다.

kubectl create secret docker-registry regsecret --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>

여기서 < > 안에 값은 아래와 같이 작성하게 됩니다.

  • your-registry-server : docker hub 주소
  • your-name : docker 사용자 계정
  • your-pword : docker 사용자 비밀번호
  • your-email : docker 사용자 이메일 주소


스파클링소다에서는 아래와 같이 secret을 생성하게 됩니다.

kubectl create secret docker-registry regsecret \
--docker-server=hub.sparklingsoda.io:80 \
--docker-username=<user id> \
--docker-password=<user pw> \
--docker-email=<user email> \
--namespace sodaflow


위 커맨드를 통해 regsecret 이라는 이름의 secret이 생성되었습니다.

kubectl get secret -A | grep regsecret
kube-system       regsecret                                                    kubernetes.io/dockerconfigjson        1      69d
minio             regsecret                                                    kubernetes.io/dockerconfigjson        1      69d
monitoring        regsecret                                                    kubernetes.io/dockerconfigjson        1      69d
sodaflow-prod     regsecret                                                    kubernetes.io/dockerconfigjson        1      69d
sodaflow          regsecret                                                    kubernetes.io/dockerconfigjson        1      69d


secret을 생성한 후, 검증해 보겠습니다.

kubectl get secret regsecret --output=yaml
apiVersion: v1
data:
  .dockerconfigjson: eyJhdXRocyI6eyJodWIuc3BhcmtsaW5nc29kYS5pbzo4MCI6eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQ
kind: Secret
metadata:
  creationTimestamp: "2022-07-11T06:49:41Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:.dockerconfigjson: {}
      f:type: {}
    manager: kubectl
    operation: Update
    time: "2022-07-11T06:49:41Z"
  name: regsecret
  namespace: sodaflow
  resourceVersion: "842949"
  selfLink: /api/v1/namespaces/sodaflow/secrets/regsecret
  uid: da47b08a-0596-48d5-9482-4fee537d1880
type: kubernetes.io/dockerconfigjson


위 결과값에서 .dockerconfigjson 값은 도커 자격 증명의 base63 인코딩 결과 값 입니다.

값은 decode 를 통해 확인할 수 있습니다.

kubectl get secret regsecret --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode


secret 생성이 완료되었다면, 해당 secret을 사용하는 pod를 생성할 수 있습니다.

  apiVersion: v1
  kind: Pod
  metadata:
    name: private-reg
  spec:
    containers:
    - name: private-reg-container
      image: <your-private-image>
    imagePullSecrets:
    - name: regsecret

위 예시와 같이 image이름은 사설 repository image url을, image pull secret에는 생성한 secret을 작성하게 됩니다.

그 후 yaml파일을 apply하면, 사설 repository에서 이미지를 받아와 pod가 생성되는 것을 확인할 수 있습니다.




마무리

  • 사설 repository를 구축한 후, pod에 적용하는 방법에 대해 알아보았습니다.

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.

02-558-8300