아티클 관련 제품: 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에 적용하는 방법에 대해 알아보았습니다.
아티클이 유용했나요?
훌륭합니다!
피드백을 제공해 주셔서 감사합니다.
도움이 되지 못해 죄송합니다!
피드백을 제공해 주셔서 감사합니다.
피드백 전송
소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.